winfreed.py: use the file name from Content-Disposition if available
[winfreed.git] / winfreed.py
index 108b719..a53bda8 100755 (executable)
@@ -17,6 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import re
 import os
 import sys
 import glob
@@ -67,7 +68,17 @@ def download(pkg):
         pass
 
     response = urllib2.urlopen(url)
-    filename = urllib2.unquote(os.path.basename(response.geturl()))
+
+    filename = ""
+    if 'Content-Disposition' in  response.info():
+        # Use the filename the server tells us if any,
+        # re pattern from http://stackoverflow.com/questions/8035900
+        content_disposition = response.info().getheader('Content-Disposition').strip()
+        filename = re.findall("filename=(\S+)", content_disposition)[0]
+    
+    if filename == "":
+        filename = urllib2.unquote(os.path.basename(response.geturl()))
+
     if filename == "":
         sys.stderr.write("Debug (%s): filename: %s url: %s\n" %(pkg['package_name'], filename, response.geturl()))
         return