move download directory fix, new dialog

git-svn-id: svn://svn.berlios.de/gpodder/trunk@221 b0d088ad-0a06-0410-aad2-9ed5178a7e87
This commit is contained in:
Thomas Perl 2006-12-20 16:38:36 +00:00
parent 60029079e5
commit 1f6834e119
5 changed files with 108 additions and 16 deletions

View File

@ -1,3 +1,15 @@
Wed, 20 Dec 2006 17:35:48 +0100 <thp@perli.net>
* src/gpodder/libgpodder.py: Added get_size() and
size_to_string() functions to gPodderLib to get the size
of a folder/file and to convert the byte size to a string
* src/gpodder/libpodcasts.py: Utilize gPodderLib's new
size_to_string() function for getting the size string;
fixed a bug when moving the download directory to another
device (thanks to Andy <apblist speakeasy net> for reporting)
* src/gpodder/gpodder.py: Added moving progress dialog to
show progress of moving download directory to another device
* bin/gpodder: the usual version bumping
Sun, 17 Dec 2006 02:19:04 +0100 <thp@perli.net>
* src/gpodder/libipodsync.py: Re-factor general sync method
interface to "gPodderSyncMethod" and let gPodder_iPodSync

View File

@ -26,8 +26,8 @@
# PLEASE DO NOT CHANGE FORMAT OF __version__ LINE (setup.py reads this)
__author__ = "Thomas Perl <thp@perli.net>"
__version__ = "0.8.0+svn20061216-ik"
__date__ = "2006-12-16"
__version__ = "0.8.0+svn20061220"
__date__ = "2006-12-20"
__copyright__ = "Copyright (c) 2005-2006 %s. All rights reserved." % __author__
__licence__ = "GPL"

View File

@ -949,6 +949,13 @@ class Gpodderproperties(SimpleGladeApp):
# return last item = custom command
return index-1
# end find_active
def set_download_dir( self, new_download_dir, event = None):
gl = gPodderLib()
gl.downloaddir = self.chooserDownloadTo.get_filename()
if event:
event.set()
#-- Gpodderproperties custom methods }
#-- Gpodderproperties.on_gPodderProperties_destroy {
@ -1040,7 +1047,54 @@ class Gpodderproperties(SimpleGladeApp):
gl.ipod_mount = self.iPodMountpoint.get_label()
gl.mp3_player_folder = self.filesystemMountpoint.get_label()
gl.opml_url = self.opmlURL.get_text()
gl.downloaddir = self.chooserDownloadTo.get_filename()
if gl.downloaddir != self.chooserDownloadTo.get_filename():
new_download_dir = self.chooserDownloadTo.get_filename()
download_dir_size = gl.get_size( gl.downloaddir)
download_dir_size_string = gl.size_to_string( download_dir_size, 'MB')
event = Event()
dlg = gtk.Dialog( _('Moving downloads folder'), self.gPodderProperties)
dlg.vbox.set_spacing( 5)
dlg.set_border_width( 5)
label = gtk.Label()
label.set_line_wrap( True)
label.set_markup( _('Moving downloads from <b>%s</b> to <b>%s</b>...') % ( gl.downloaddir, new_download_dir, ))
myprogressbar = gtk.ProgressBar()
# put it all together
dlg.vbox.pack_start( label)
dlg.vbox.pack_end( myprogressbar)
# switch windows
dlg.show_all()
self.gPodderProperties.hide_all()
# hide action area and separator line
dlg.action_area.hide()
dlg.set_has_separator( False)
args = ( new_download_dir, event, )
thread = Thread( target = self.set_download_dir, args = args)
thread.start()
while not event.isSet():
new_download_dir_size = gl.get_size( new_download_dir)
fract = (1.00*new_download_dir_size) / (1.00*download_dir_size)
if fract < 0.99:
myprogressbar.set_text( _('%s of %s') % ( gl.size_to_string( new_download_dir_size, 'MB'), download_dir_size_string, ))
else:
myprogressbar.set_text( _('Finishing... please wait.'))
myprogressbar.set_fraction( fract)
event.wait( 0.1)
while gtk.events_pending():
gtk.main_iteration( False)
dlg.destroy()
gl.update_on_startup = self.updateonstartup.get_active()
device_type = self.comboboxDeviceType.get_active()
if device_type == 0:

View File

@ -46,12 +46,15 @@ from os.path import basename
from os.path import isfile
from os.path import isdir
from os.path import islink
from os.path import getsize
from os.path import join
from os import mkdir
from os import rmdir
from os import makedirs
from os import environ
from os import system
from os import unlink
from os import listdir
from glob import glob
# for the desktop symlink stuff:
@ -200,6 +203,10 @@ class gPodderLibClass( object):
log( 'Desktop symlink exists before move.')
generate_symlink = True
# Fix error when moving over disk boundaries
if isdir( new_downloaddir) and not listdir( new_downloaddir):
rmdir( new_downloaddir)
shutil.move( self.__download_dir, new_downloaddir)
if generate_symlink:
@ -307,6 +314,36 @@ class gPodderLibClass( object):
except:
return exists( symlink_path)
def get_size( self, filename):
if isfile( filename):
return getsize( filename)
elif isdir( filename):
sum = getsize( filename)
for item in listdir( filename):
sum = sum + self.get_size( join( filename, item))
return sum
else:
log( 'Cannot get size for %s' % ( filename, ))
return 0L
def size_to_string( self, size, method = None):
methods = {
'GB': 1073741824.0,
'MB': 1048576.0,
'KB': 1024.0,
'B': 1.0,
}
size = float(size)
if method not in methods:
method = 'B'
for trying in ( 'KB', 'MB', 'GB'):
if size >= methods[trying]:
method = trying
return '%.2f %s' % ( size / methods[method], method, )
def createDesktopSymlink( self):
if not self.getDesktopSymlink():
downloads_path = expanduser( "~/Desktop/")

View File

@ -409,20 +409,9 @@ class podcastItem(object):
size = int( self.length)
except ValueError:
return '-'
kilobyte = 1024
megabyte = kilobyte * 1024
gigabyte = megabyte * 1024
if size > gigabyte:
# Might be a bit big, but who cares...
return '%d GB' % int(size / gigabyte)
if size > megabyte:
return '%d MB' % int(size / megabyte)
if size > kilobyte:
return '%d KB' % int(size / kilobyte)
return '%d Bytes' % size
return libgpodder.gPodderLib().size_to_string( size)
class opmlChannel(object):