From 0700bf7b950cd67a63f0f2dff7778823e04e369b Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Tue, 17 Jan 2012 16:42:39 +0530 Subject: [PATCH] titles are not filename safe --- pandora/item/models.py | 7 ++++--- pandora/item/utils.py | 8 ++++++++ pandora/item/views.py | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pandora/item/models.py b/pandora/item/models.py index 4d7332d8c..ec3e06d02 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -919,13 +919,14 @@ class Item(models.Model): shutil.rmtree(base) ox.makedirs(base) - base = self.path('torrent/%s' % self.get('title')) + filename = utils.sefe_filename(self.get('title')) + base = self.path('torrent/%s' % filename) base = os.path.abspath(os.path.join(settings.MEDIA_ROOT, base)) size = 0 duration = 0.0 if streams.count() == 1: url = "%s/torrent/%s.webm" % (self.get_absolute_url(), - quote(self.get('title').encode('utf-8'))) + quote(filename.encode('utf-8'))) video = "%s.webm" % base v = streams[0] os.symlink(v.video.path, video) @@ -936,7 +937,7 @@ class Item(models.Model): part = 1 os.makedirs(base) for v in streams: - video = "%s/%s.Part %d.webm" % (base, self.get('title'), part) + video = "%s/%s.Part %d.webm" % (base, filename, part) part += 1 os.symlink(v.video.path, video) size += v.video.size diff --git a/pandora/item/utils.py b/pandora/item/utils.py index f72a1bbfd..451704f7f 100644 --- a/pandora/item/utils.py +++ b/pandora/item/utils.py @@ -6,6 +6,14 @@ import re import unicodedata import ox +def safe_filename(filename): + filename = filename.replace('_ ', ': ') + filename = filename.replace('/', '_') + filename = filename.replace('\\', '_') + if filename.endswith('.'): + filename = filename[:-1] + '_' + return filename + def decode_id(id): try: id = ox.fromAZ(id) diff --git a/pandora/item/views.py b/pandora/item/views.py index 95e0a4657..f409daa88 100644 --- a/pandora/item/views.py +++ b/pandora/item/views.py @@ -725,7 +725,7 @@ def torrent(request, id, filename=None): if not filename or filename.endswith('.torrent'): response = HttpResponse(item.get_torrent(request), content_type='application/x-bittorrent') - filename = "%s.torrent" % item.get('title') + filename = utils.safe_filename("%s.torrent" % item.get('title')) response['Content-Disposition'] = 'attachment; filename="%s"' % filename.encode('utf-8') return response while filename.startswith('/'):