On Mon, 2008-08-04 at 01:36 +0600, Leonid Ponomarev wrote:
> I've adopted my first patch in this thread to current codebase, so we
> can try one more time!

I've cleaned up the patch a bit. I think you forgot to include sync.py
in the diff, because the function "device.available_space" does not
exist for me. Can you please send it to me?

Updated patch attached.

Thanks,
Thomas
diff --git a/bin/gpodder b/bin/gpodder
index 5bea945..66ef36f 100755
--- a/bin/gpodder
+++ b/bin/gpodder
@@ -101,6 +101,9 @@ def main( argv = sys.argv):
     parser.add_option("-d", "--delete", dest="delete",
                       help=_("Delete channel specified by URL"), metavar="URL")
 
+    parser.add_option("-S", "--stats",
+			          action="store_true", dest="stats", default=False,
+                      help=_("Get sync statistics"))
 
     (options, args) = parser.parse_args(argv)
 
@@ -135,6 +138,8 @@ def main( argv = sys.argv):
         console.add_channel( options.add)
     elif options.delete:
         console.del_channel( options.delete)
+    elif options.stats:
+        console.sync_stats()
     else:
         #default run gui
         from gpodder import gui
diff --git a/src/gpodder/console.py b/src/gpodder/console.py
index c18a0cc..568a641 100644
--- a/src/gpodder/console.py
+++ b/src/gpodder/console.py
@@ -20,6 +20,7 @@
 from gpodder import util
 from gpodder import download
 from gpodder import sync
+from gpodder.libgpodder import gl
 from gpodder.liblogger import msg
 
 from libpodcasts import load_channels
@@ -136,3 +137,32 @@ def sync_device():
         msg('error', _('Cannot close device.'))
         return False
 
+def sync_stats():
+    size = 0
+    device = sync.open_device()
+    if device is None:
+        msg('error', _('No device configured. Please use the GUI.'))
+        return False
+
+    for channel in load_channels():
+        if not channel.sync_to_devices:
+            continue
+        for episode in channel.get_all_episodes():
+            if episode.was_downloaded(and_exists=True):
+                episode.calculate_filesize()
+                size += episode.length
+    msg('info', _('Free space on device %s: %s') % (gl.get_device_name(), gl.format_filesize(device.available_space())))
+    msg('info', _('Size of episodes to sync: %s') % gl.format_filesize(size))
+
+    difference = device.available_space() - size
+    if difference < 0:
+        msg('error', _('Need to free at least %s more') % gl.format_filesize(abs(difference)))
+        return False
+    else:
+        msg('info', _('Free space after sync: %s') % gl.format_filesize(abs(difference)))
+
+    if not device.close():
+        msg('error', _('Cannot close device.'))
+        return False
+
+    return True
_______________________________________________
gpodder-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/gpodder-devel

Reply via email to