From bbd3128da21f419581a1166d938a2c8eb8af6ad6 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Sat, 3 Mar 2007 13:10:21 +0000 Subject: [PATCH] support for mp3 player cleanup git-svn-id: svn://svn.berlios.de/gpodder/trunk@253 b0d088ad-0a06-0410-aad2-9ed5178a7e87 --- ChangeLog | 6 ++++++ bin/gpodder | 4 ++-- src/gpodder/gpodder.py | 37 ++++++++++++++++++++++++++++++++----- src/gpodder/libgpodder.py | 5 +++++ src/gpodder/libipodsync.py | 14 ++++++++++++++ 5 files changed, 59 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index e98e0c40..306653aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat, 3 Mar 2007 14:08:18 +0100 + * src/gpodder/libgpodder.py: Added can_write_directory() function + * src/gpodder/libipodsync.py: Add support for MP3 player cleanup + * src/gpodder/gpodder.py: Add support for MP3 player cleanup + * bin/gpodder: version + svn release date push + Tue, 27 Feb 2007 21:11:47 +0100 * data/po/es.po: Updated Spanish translation by José Luis Fustel (dr_psy terra.es) diff --git a/bin/gpodder b/bin/gpodder index 067c6498..2c7d3e56 100755 --- a/bin/gpodder +++ b/bin/gpodder @@ -26,8 +26,8 @@ # PLEASE DO NOT CHANGE FORMAT OF __version__ LINE (setup.py reads this) __author__ = "Thomas Perl " -__version__ = "0.8.9+svn20070227" -__date__ = "2007-02-27" +__version__ = "0.8.9+svn20070303" +__date__ = "2007-03-03" __copyright__ = "Copyright (c) 2005-2007 %s. All rights reserved." % __author__ __licence__ = "GPL" diff --git a/src/gpodder/gpodder.py b/src/gpodder/gpodder.py index 6e0db15b..66194224 100644 --- a/src/gpodder/gpodder.py +++ b/src/gpodder/gpodder.py @@ -354,6 +354,13 @@ class Gpodder(SimpleGladeApp): def sync_to_fs_proc( self, sync_win): gpl = gPodderLib() gpl.loadConfig() + + if not gpl.can_write_directory( gpl.mp3_player_folder): + gobject.idle_add( self.showMessage, _('Cannot write to %s.\nMake sure your MP3 player is connected.') % ( gpl.mp3_player_folder, )) + if sync_win.close: + sync_win.close() + return False + sync = gPodder_FSSync( destination = gpl.mp3_player_folder, callback_status = sync_win.set_status, callback_progress = sync_win.set_progress, callback_done = sync_win.close) for channel in self.ldb.channel_list: @@ -374,6 +381,21 @@ class Gpodder(SimpleGladeApp): sync.clean_playlist() sync.close() + def fs_cleanup_proc( self, sync_win): + gpl = gPodderLib() + gpl.loadConfig() + + if not gpl.can_write_directory( gpl.mp3_player_folder): + gobject.idle_add( self.showMessage, _('Cannot write to %s.\nMake sure your MP3 player is connected.') % ( gpl.mp3_player_folder, )) + if sync_win.close: + sync_win.close() + return False + + sync = gPodder_FSSync( destination = gpl.mp3_player_folder, callback_status = sync_win.set_status, callback_progress = sync_win.set_progress, callback_done = sync_win.close) + + sync.clean_playlist() + sync.close() + def update_feed_cache_callback( self, progressbar, position, count): try: progressbar.set_text( _("Updating: %s") % ( self.channels[position].title, )) @@ -526,19 +548,24 @@ class Gpodder(SimpleGladeApp): #-- Gpodder.on_cleanup_ipod_activate { def on_cleanup_ipod_activate(self, widget, *args): gl = gPodderLib() + target_function = None + if gl.device_type == 'none': self.showMessage( _('Configure your device in the preferences dialog first.')) elif gl.device_type == 'ipod': - if not self.showConfirmation( _('Do you really want to truncate the Podcasts playlist on your iPod?')): - return + if self.showConfirmation( _('Do you really want to truncate the Podcasts playlist on your iPod?')): + target_function = self.ipod_cleanup_proc + elif gl.device_type == 'filesystem': + if self.showConfirmation( _('Do you really want to delete all Podcasts from your MP3 player?')): + target_function = self.fs_cleanup_proc + + if target_function: sync_win = Gpoddersync() while gtk.events_pending(): gtk.main_iteration( False) args = ( sync_win, ) - thread = Thread( target = self.ipod_cleanup_proc, args = args) + thread = Thread( target = target_function, args = args) thread.start() - elif gl.device_type == 'filesystem': - self.showMessage( _('Cleanup of %s currently not supported.') % ( gl.mp3_player_folder, )) #-- Gpodder.on_cleanup_ipod_activate } #-- Gpodder.on_itemPreferences_activate { diff --git a/src/gpodder/libgpodder.py b/src/gpodder/libgpodder.py index 46998bd9..796109b1 100644 --- a/src/gpodder/libgpodder.py +++ b/src/gpodder/libgpodder.py @@ -56,6 +56,8 @@ from os import environ from os import system from os import unlink from os import listdir +from os import access +from os import W_OK from glob import glob # for the desktop symlink stuff: @@ -253,6 +255,9 @@ class gPodderLibClass( object): def history_mark_downloaded( self, url): self.__download_history.mark_downloaded( url) + def can_write_directory( self, directory): + return isdir( directory) and access( directory, W_OK) + def history_is_downloaded( self, url): return (url in self.__download_history) diff --git a/src/gpodder/libipodsync.py b/src/gpodder/libipodsync.py index dad8e267..a63b28dc 100644 --- a/src/gpodder/libipodsync.py +++ b/src/gpodder/libipodsync.py @@ -84,6 +84,7 @@ except: import os import os.path +import glob import shutil import sys import time @@ -435,4 +436,17 @@ class gPodder_FSSync( gPodderSyncMethod): os.system('sync') except: pass + + def clean_playlist( self): + folders = glob.glob( os.path.join( self.destination, '*')) + for folder in range( len( folders)): + self.set_progress( folder+1, len( folders)) + self.set_status( channel = os.path.basename( folders[folder]), progressbar_text = _('%d of %d') % ( folder+1, len(folders), )) + log( 'deleting: %s', folders[folder]) + shutil.rmtree( folders[folder]) + try: + os.system('sync') + except: + pass +