Run download log cleaner regularly (#7975)

This commit is contained in:
Hans-Peter Lehmann
2025-09-07 22:34:40 +02:00
committed by GitHub
parent e8a18d4887
commit 9db9dc7732
9 changed files with 98 additions and 3 deletions

View File

@ -73,6 +73,7 @@ dependencies {
implementation project(':playback:base')
implementation project(':playback:cast')
implementation project(':storage:database')
implementation project(':storage:database-maintenance-service')
implementation project(':storage:importexport')
implementation project(':storage:preferences')
implementation project(':ui:app-start-intent')

View File

@ -48,6 +48,7 @@ import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueue;
import de.danoeh.antennapod.playback.cast.CastEnabledActivity;
import de.danoeh.antennapod.playback.service.PlaybackServiceInterface;
import de.danoeh.antennapod.storage.databasemaintenanceservice.DatabaseMaintenanceWorker;
import de.danoeh.antennapod.storage.importexport.AutomaticDatabaseExportWorker;
import de.danoeh.antennapod.storage.preferences.PlaybackPreferences;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
@ -199,6 +200,7 @@ public class MainActivity extends CastEnabledActivity {
FeedUpdateManager.getInstance().restartUpdateAlarm(this, false);
SynchronizationQueue.getInstance().syncIfNotSyncedRecently();
AutomaticDatabaseExportWorker.enqueueIfNeeded(this, false);
DatabaseMaintenanceWorker.enqueueIfNeeded(this);
WorkManager.getInstance(this)
.getWorkInfosByTagLiveData(FeedUpdateManagerImpl.WORK_TAG_FEED_UPDATE)

View File

@ -39,6 +39,7 @@ include ':playback:cast'
include ':playback:service'
include ':storage:database'
include ':storage:database-maintenance-service'
include ':storage:importexport'
include ':storage:preferences'

View File

@ -0,0 +1,5 @@
# :storage:database-maintenance-service
Periodic tasks to clean up the database, such as clearing old download logs.
Should never be directly triggered by users.

View File

@ -0,0 +1,19 @@
plugins {
id("com.android.library")
}
apply from: "../../common.gradle"
apply from: "../../playFlavor.gradle"
android {
namespace "de.danoeh.antennapod.storage.databasemaintenanceservice"
}
dependencies {
implementation project(':storage:database')
implementation project(':ui:notifications')
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
implementation "androidx.core:core:$coreVersion"
implementation "androidx.work:work-runtime:$workManagerVersion"
implementation "com.google.guava:guava:31.0.1-android"
}

View File

@ -0,0 +1,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:supportsRtl="true">
</application>
</manifest>

View File

@ -0,0 +1,53 @@
package de.danoeh.antennapod.storage.databasemaintenanceservice;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.work.ExistingPeriodicWorkPolicy;
import androidx.work.ForegroundInfo;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import de.danoeh.antennapod.storage.database.PodDBAdapter;
import de.danoeh.antennapod.ui.notifications.NotificationUtils;
import java.util.concurrent.TimeUnit;
public class DatabaseMaintenanceWorker extends Worker {
private static final String WORK_ID_DATABASE_MAINTENANCE = "DatabaseMaintenanceWorker";
public static void enqueueIfNeeded(Context context) {
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
DatabaseMaintenanceWorker.class, 3, TimeUnit.DAYS).build();
WorkManager.getInstance(context).enqueueUniquePeriodicWork(WORK_ID_DATABASE_MAINTENANCE,
ExistingPeriodicWorkPolicy.KEEP, workRequest);
}
public DatabaseMaintenanceWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@Override
@NonNull
public Result doWork() {
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
adapter.clearOldDownloadLog();
adapter.close();
return Result.success();
}
@NonNull
@Override
public ListenableFuture<ForegroundInfo> getForegroundInfoAsync() {
return Futures.immediateFuture(new ForegroundInfo(R.id.notification_db_maintenance,
new NotificationCompat.Builder(getApplicationContext(), NotificationUtils.CHANNEL_ID_REFRESHING)
.setContentTitle(getApplicationContext().getString(R.string.download_notification_title_feeds))
.setSmallIcon(R.drawable.ic_notification_sync)
.setOngoing(true)
.build()));
}
}

View File

@ -0,0 +1,3 @@
<resources>
<item name="notification_db_maintenance" type="id"/>
</resources>

View File

@ -963,6 +963,11 @@ public class PodDBAdapter {
db.delete(TABLE_NAME_DOWNLOAD_LOG, null, null);
}
public void clearOldDownloadLog() {
db.execSQL("DELETE FROM " + PodDBAdapter.TABLE_NAME_DOWNLOAD_LOG + " WHERE "
+ PodDBAdapter.KEY_COMPLETION_DATE + "<" + (System.currentTimeMillis() - 7L * 24L * 3600L * 1000L));
}
/**
* Get all Feeds from the Feed Table.
*
@ -1531,9 +1536,6 @@ public class PodDBAdapter {
public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
Log.w("DBAdapter", "Upgrading from version " + oldVersion + " to " + newVersion + ".");
DBUpgrader.upgrade(db, oldVersion, newVersion);
db.execSQL("DELETE FROM " + PodDBAdapter.TABLE_NAME_DOWNLOAD_LOG + " WHERE "
+ PodDBAdapter.KEY_COMPLETION_DATE + "<" + (System.currentTimeMillis() - 7L * 24L * 3600L * 1000L));
}
}
}