From: Antonio Ospite <ospite@studenti.unina.it>
Date: Sat, 26 Nov 2011 11:56:54 +0000 (+0100)
Subject: winfreed.py: use the file name from Content-Disposition if available
X-Git-Url: https://git.ao2.it/winfreed.git/commitdiff_plain/f8e482ed42eb5326cccec1ad92127774a068de33?ds=sidebyside;hp=1d965dd5d6ad87a1a668668f6200ebef0962996d

winfreed.py: use the file name from Content-Disposition if available

Some servers provide a Content-Disposition header with indication about
the filename of the object served, use this instead of the name in the
URL if this information is available.
---

diff --git a/winfreed.py b/winfreed.py
index 108b719..a53bda8 100755
--- a/winfreed.py
+++ b/winfreed.py
@@ -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