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
+
+
+
+ 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 5f85a03e..a5aaf95c 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)