From 9c54237c2766423286b50c2393112896056f3dba Mon Sep 17 00:00:00 2001 From: auouymous Date: Sun, 20 Aug 2023 06:08:29 -0600 Subject: [PATCH] Add setting to toggle sync filesize comparisons. Fixes #1416. --- share/gpodder/ui/gtk/gpodderpreferences.ui | 16 ++++++++++++++++ src/gpodder/config.py | 2 ++ src/gpodder/gtkui/desktop/preferences.py | 3 +++ src/gpodder/sync.py | 18 ++++++++---------- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/share/gpodder/ui/gtk/gpodderpreferences.ui b/share/gpodder/ui/gtk/gpodderpreferences.ui index a7379166..7a7e1840 100644 --- a/share/gpodder/ui/gtk/gpodderpreferences.ui +++ b/share/gpodder/ui/gtk/gpodderpreferences.ui @@ -1019,6 +1019,22 @@ 10 + + + Sync existing episodes on device when file size differs from gPodder (disable if device modifies files) + True + True + False + start + 4 + True + + + False + True + 11 + + devices diff --git a/src/gpodder/config.py b/src/gpodder/config.py index 485b392e..c7e550f1 100644 --- a/src/gpodder/config.py +++ b/src/gpodder/config.py @@ -197,6 +197,8 @@ defaults = { 'max_filename_length': 120, + 'compare_episode_filesize': True, + 'custom_sync_name': '{episode.sortdate}_{episode.title}', 'custom_sync_name_enabled': False, diff --git a/src/gpodder/gtkui/desktop/preferences.py b/src/gpodder/gtkui/desktop/preferences.py index 5c64fea4..360b3c93 100644 --- a/src/gpodder/gtkui/desktop/preferences.py +++ b/src/gpodder/gtkui/desktop/preferences.py @@ -300,6 +300,8 @@ class gPodderPreferences(BuilderWidget): self.checkbutton_delete_using_playlists) self._config.connect_gtk_togglebutton('device_sync.delete_deleted_episodes', self.checkbutton_delete_deleted_episodes) + self._config.connect_gtk_togglebutton('device_sync.compare_episode_filesize', + self.checkbutton_compare_episode_filesize) # Have to do this before calling set_active on checkbutton_enable self._enable_mygpo = self._config.mygpo.enabled @@ -688,6 +690,7 @@ class gPodderPreferences(BuilderWidget): self.combobox_on_sync.set_sensitive(False) self.checkbutton_skip_played_episodes.set_sensitive(True) self.checkbutton_delete_deleted_episodes.set_sensitive(True) + self.checkbutton_compare_episode_filesize.set_sensitive(True) children = self.btn_filesystemMountpoint.get_children() if children: diff --git a/src/gpodder/sync.py b/src/gpodder/sync.py index 344cb082..f8f3bdb5 100644 --- a/src/gpodder/sync.py +++ b/src/gpodder/sync.py @@ -532,16 +532,14 @@ class MP3PlayerDevice(Device): # Comparing file size would detect such files and finish uploading. # However, some devices add metadata to files, increasing their size, and forcing an upload on every sync. # File size and checksum can not be used. - # TODO: see https://github.com/gpodder/gpodder/issues/1416 -# if to_file_exists: -# try: -# info = to_file.query_info(Gio.FILE_ATTRIBUTE_STANDARD_SIZE, Gio.FileQueryInfoFlags.NONE) -# to_size = info.get_attribute_uint64(Gio.FILE_ATTRIBUTE_STANDARD_SIZE) -# except GLib.Error: -# # Assume same size and don't sync again -# pass -# if not to_file_exists or from_size != to_size: - if not to_file_exists: + if to_file_exists and self._config.device_sync.compare_episode_filesize: + try: + info = to_file.query_info(Gio.FILE_ATTRIBUTE_STANDARD_SIZE, Gio.FileQueryInfoFlags.NONE) + to_size = info.get_attribute_uint64(Gio.FILE_ATTRIBUTE_STANDARD_SIZE) + except GLib.Error: + # Assume same size and don't sync again + pass + if not to_file_exists or from_size != to_size: logger.info('Copying %s (%d bytes) => %s (%d bytes)', os.path.basename(from_file), from_size, to_file.get_uri(), to_size)