From d08b9e196e27b2d4454281a1fb57b8bc697afb63 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 5 Nov 2022 13:04:07 +0100 Subject: Decouple sync service from other classes --- .../de/danoeh/antennapod/core/ClientConfigurator.java | 3 +++ .../java/de/danoeh/antennapod/core/storage/DBTasks.java | 3 +-- .../core/sync/queue/SynchronizationQueueSink.java | 17 +++++++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java b/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java index 4a8759a6b..cdd516f16 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/ClientConfigurator.java @@ -6,6 +6,8 @@ import de.danoeh.antennapod.core.preferences.SleepTimerPreferences; import de.danoeh.antennapod.core.preferences.UsageStatistics; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; +import de.danoeh.antennapod.core.sync.SyncService; +import de.danoeh.antennapod.core.sync.queue.SynchronizationQueueSink; import de.danoeh.antennapod.core.util.NetworkUtils; import de.danoeh.antennapod.core.util.download.NetworkConnectionChangeHandler; import de.danoeh.antennapod.core.util.gui.NotificationUtils; @@ -28,6 +30,7 @@ public class ClientConfigurator { SslProviderInstaller.install(context); NetworkUtils.init(context); NetworkConnectionChangeHandler.init(context); + SynchronizationQueueSink.setServiceStarterImpl(() -> SyncService.sync(context)); AntennapodHttpClient.setCacheDirectory(new File(context.getCacheDir(), "okhttp")); AntennapodHttpClient.setProxyConfig(UserPreferences.getProxyConfig()); SleepTimerPreferences.init(context); diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java index e9fe3af1a..3cc607433 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java @@ -35,7 +35,6 @@ import de.danoeh.antennapod.event.FeedListUpdateEvent; import de.danoeh.antennapod.event.MessageEvent; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.model.download.DownloadStatus; -import de.danoeh.antennapod.core.sync.SyncService; import de.danoeh.antennapod.core.sync.queue.SynchronizationQueueSink; import de.danoeh.antennapod.model.download.DownloadError; import de.danoeh.antennapod.core.util.LongList; @@ -119,7 +118,7 @@ public final class DBTasks { SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, MODE_PRIVATE); prefs.edit().putLong(PREF_LAST_REFRESH, System.currentTimeMillis()).apply(); - SyncService.sync(context); + SynchronizationQueueSink.syncNow(); // Note: automatic download of episodes will be done but not here. // Instead it is done after all feeds have been refreshed (asynchronously), // in DownloadService.onDestroy() diff --git a/core/src/main/java/de/danoeh/antennapod/core/sync/queue/SynchronizationQueueSink.java b/core/src/main/java/de/danoeh/antennapod/core/sync/queue/SynchronizationQueueSink.java index 445faf60f..55c415153 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/sync/queue/SynchronizationQueueSink.java +++ b/core/src/main/java/de/danoeh/antennapod/core/sync/queue/SynchronizationQueueSink.java @@ -3,12 +3,21 @@ package de.danoeh.antennapod.core.sync.queue; import android.content.Context; import de.danoeh.antennapod.core.sync.LockingAsyncExecutor; -import de.danoeh.antennapod.core.sync.SyncService; import de.danoeh.antennapod.core.sync.SynchronizationSettings; import de.danoeh.antennapod.model.feed.FeedMedia; import de.danoeh.antennapod.net.sync.model.EpisodeAction; public class SynchronizationQueueSink { + // To avoid a dependency loop of every class to SyncService, and from SyncService back to every class. + private static Runnable serviceStarterImpl = () -> { }; + + public static void setServiceStarterImpl(Runnable serviceStarter) { + serviceStarterImpl = serviceStarter; + } + + public static void syncNow() { + serviceStarterImpl.run(); + } public static void clearQueue(Context context) { LockingAsyncExecutor.executeLockedAsync(new SynchronizationQueueStorage(context)::clearQueue); @@ -20,7 +29,7 @@ public class SynchronizationQueueSink { } LockingAsyncExecutor.executeLockedAsync(() -> { new SynchronizationQueueStorage(context).enqueueFeedAdded(downloadUrl); - SyncService.sync(context); + syncNow(); }); } @@ -30,7 +39,7 @@ public class SynchronizationQueueSink { } LockingAsyncExecutor.executeLockedAsync(() -> { new SynchronizationQueueStorage(context).enqueueFeedRemoved(downloadUrl); - SyncService.sync(context); + syncNow(); }); } @@ -40,7 +49,7 @@ public class SynchronizationQueueSink { } LockingAsyncExecutor.executeLockedAsync(() -> { new SynchronizationQueueStorage(context).enqueueEpisodeAction(action); - SyncService.sync(context); + syncNow(); }); } -- cgit v1.2.3