Skip to content

Instantly share code, notes, and snippets.

@virtualstaticvoid
Created September 25, 2014 11:01
Show Gist options
  • Save virtualstaticvoid/84e83605512245306336 to your computer and use it in GitHub Desktop.
Save virtualstaticvoid/84e83605512245306336 to your computer and use it in GitHub Desktop.
gPodder Rename Episode Extension
# -*- coding: utf-8 -*-
# Rename files based on the episode title
# Copyright (c) 2014-09-25 Chris Stefano <virtualstaticvoid@gmail.com>
# Licensed under the same terms as gPodder itself
# Source code copied and modified from https://github.com/gpodder/gpodder/blob/master/share/gpodder/extensions/rename_download.py
import os
import gpodder
from gpodder import util
import logging
logger = logging.getLogger(__name__)
_ = gpodder.gettext
__title__ = _('Rename episodes')
__description__ = _('Rename episodes to "<Episode Title>.<ext>"')
__authors__ = 'Chris Stefano <virtualstaticvoid@gmail.com>'
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/RenameEpisode'
__payment__ = 'https://flattr.com/submit/auto?user_id=VirtualStaticVoid&url=http://wiki.gpodder.org/wiki/Extensions/RenameEpisode'
__category__ = 'desktop-integration'
class gPodderExtension:
def __init__(self, container):
self.container = container
def on_episodes_context_menu(self, episode):
return [('Rename', self._rename_episodes)]
def _rename_episodes(self, episodes):
for episode in episodes:
self._rename_episode(episode)
def _rename_episode(self, episode):
current_filename = episode.local_filename(create=False)
new_filename = self.make_filename(current_filename, episode.title)
if new_filename != current_filename:
logger.info('Renaming: %s -> %s', current_filename, new_filename)
os.rename(current_filename, new_filename)
util.rename_episode_file(episode, new_filename)
def make_filename(self, current_filename, title):
dirname = os.path.dirname(current_filename)
filename = os.path.basename(current_filename)
basename, ext = os.path.splitext(filename)
new_basename = util.sanitize_encoding(title) + ext
# On Windows, force ASCII encoding for filenames (bug 1724)
new_basename = util.sanitize_filename(new_basename,
use_ascii=gpodder.ui.win32)
new_filename = os.path.join(dirname, new_basename)
if new_filename == current_filename:
return current_filename
for filename in util.generate_names(new_filename):
# Avoid filename collisions
if not os.path.exists(filename):
return filename
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment