Cleanup old local contacts

This commit is contained in:
M66B 2019-03-15 08:50:31 +00:00
parent a2d03f7af8
commit 40f1832ab7
5 changed files with 1619 additions and 3 deletions

File diff suppressed because it is too large Load Diff

View File

@ -50,7 +50,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 56,
version = 57,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -615,6 +615,15 @@ public abstract class DB extends RoomDatabase {
db.execSQL("ALTER TABLE `contact` ADD COLUMN `favorite` INTEGER NOT NULL DEFAULT 0");
}
})
.addMigrations(new Migration(56, 57) {
@Override
public void migrate(SupportSQLiteDatabase db) {
Log.i("DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("CREATE INDEX `index_contact_times_contacted` ON `contact` (`times_contacted`)");
db.execSQL("CREATE INDEX `index_contact_last_contacted` ON `contact` (`last_contacted`)");
db.execSQL("CREATE INDEX `index_contact_favorite` ON `contact` (`favorite`)");
}
})
.build();
}

View File

@ -72,6 +72,12 @@ public interface DaoContact {
@Query("DELETE FROM contact WHERE id= :id")
int deleteContact(long id);
@Query("DELETE FROM contact" +
" WHERE last_contacted IS NOT NULL" +
" AND last_contacted < :before" +
" AND NOT favorite")
int deleteContacts(long before);
@Query("DELETE FROM contact")
int clearContacts();
}

View File

@ -40,6 +40,9 @@ import androidx.room.PrimaryKey;
indices = {
@Index(value = {"email", "type"}, unique = true),
@Index(value = {"name", "type"}),
@Index(value = {"times_contacted"}),
@Index(value = {"last_contacted"}),
@Index(value = {"favorite"})
}
)
public class EntityContact implements Serializable {

View File

@ -22,6 +22,7 @@ import androidx.work.WorkerParameters;
public class WorkerCleanup extends Worker {
private static final int CLEANUP_INTERVAL = 4; // hours
private static final long CACHE_IMAGE_DURATION = 3 * 24 * 3600 * 1000L; // milliseconds
private static final long KEEP_CONTACTS_DURATION = 180 * 24 * 3600 * 1000L; // milliseconds
private static final long KEEP_LOG_DURATION = 24 * 3600 * 1000L; // milliseconds
public WorkerCleanup(@NonNull Context context, @NonNull WorkerParameters workerParams) {
@ -112,9 +113,12 @@ public class WorkerCleanup extends Worker {
Log.w("Error deleting " + file);
}
Log.i("Cleanup contacts");
int contacts = db.contact().deleteContacts(now - KEEP_CONTACTS_DURATION);
Log.i("Deleted contacts=" + contacts);
Log.i("Cleanup log");
long before = now - KEEP_LOG_DURATION;
int logs = db.log().deleteLogs(before);
int logs = db.log().deleteLogs(now - KEEP_LOG_DURATION);
Log.i("Deleted logs=" + logs);
db.setTransactionSuccessful();