Extensions: Various fixes and clean-ups from review
[gpodder.git] / share / gpodder / extensions / rename_download.py
blob5fcf0c7da06d2be6c2c0756865dde659a9ba53ce
1 # -*- coding: utf-8 -*-
2 # Rename files after download based on the episode title
3 # Copyright (c) 2011-04-04 Thomas Perl <thp.io>
4 # Licensed under the same terms as gPodder itself
6 import os
8 import gpodder
9 from gpodder import util
11 import logging
12 logger = logging.getLogger(__name__)
14 _ = gpodder.gettext
16 __title__ = _('Rename episodes after download')
17 __description__ = _('Rename episodes to "<Episode Title>.<ext>" on download')
18 __author__ = 'Bernd Schlapsi <brot@gmx.info>, Thomas Perl <thp@gpodder.org>'
21 class gPodderExtension:
22 def __init__(self, container):
23 self.container = container
25 def on_episode_downloaded(self, episode):
26 current_filename = episode.local_filename(create=False)
28 new_filename = self.make_filename(current_filename, episode.title)
30 if new_filename != current_filename:
31 logger.info('Renaming: %s -> %s', current_filename, new_filename)
32 os.rename(current_filename, new_filename)
33 util.rename_episode_file(episode, new_filename)
35 def make_filename(self, current_filename, title):
36 dirname = os.path.dirname(current_filename)
37 filename = os.path.basename(current_filename)
38 basename, ext = os.path.splitext(filename)
40 new_basename = util.sanitize_encoding(title) + ext
41 new_filename = os.path.join(dirname, new_basename)
43 if new_filename == current_filename:
44 return current_filename
46 for filename in util.generate_names(new_filename):
47 # Avoid filename collisions
48 if not os.path.exists(filename):
49 return filename