winfreed.py: use the file name from Content-Disposition if available
authorAntonio Ospite <ospite@studenti.unina.it>
Sat, 26 Nov 2011 11:56:54 +0000 (12:56 +0100)
committerAntonio Ospite <ospite@studenti.unina.it>
Sat, 26 Nov 2011 12:10:39 +0000 (13:10 +0100)
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.

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