That fuck shit the fascists are using
at master 100 lines 3.5 kB view raw
1package org.tm.archive.service; 2 3import android.app.Application; 4import android.content.BroadcastReceiver; 5import android.content.Context; 6import android.content.Intent; 7 8import androidx.annotation.NonNull; 9import androidx.annotation.Nullable; 10 11import org.signal.core.util.logging.Log; 12import org.tm.archive.database.MessageTable; 13import org.tm.archive.database.SignalDatabase; 14import org.tm.archive.database.ThreadTable; 15import org.tm.archive.dependencies.ApplicationDependencies; 16import org.tm.archive.keyvalue.KeepMessagesDuration; 17import org.tm.archive.keyvalue.SignalStore; 18 19public class TrimThreadsByDateManager extends TimedEventManager<TrimThreadsByDateManager.TrimEvent> { 20 21 private static final String TAG = Log.tag(TrimThreadsByDateManager.class); 22 23 private final ThreadTable threadTable; 24 private final MessageTable messageTable; 25 26 public TrimThreadsByDateManager(@NonNull Application application) { 27 super(application, "TrimThreadsByDateManager"); 28 29 threadTable = SignalDatabase.threads(); 30 messageTable = SignalDatabase.messages(); 31 32 scheduleIfNecessary(); 33 } 34 35 @Override 36 protected @Nullable TrimEvent getNextClosestEvent() { 37 KeepMessagesDuration keepMessagesDuration = SignalStore.settings().getKeepMessagesDuration(); 38 if (keepMessagesDuration == KeepMessagesDuration.FOREVER) { 39 return null; 40 } 41 42 long trimBeforeDate = System.currentTimeMillis() - keepMessagesDuration.getDuration(); 43 44 if (messageTable.getMessageCountBeforeDate(trimBeforeDate) > 0) { 45 Log.i(TAG, "Messages exist before date, trim immediately"); 46 return new TrimEvent(0); 47 } 48 49 long timestamp = messageTable.getTimestampForFirstMessageAfterDate(trimBeforeDate); 50 51 if (timestamp == 0) { 52 return null; 53 } 54 55 return new TrimEvent(Math.max(0, keepMessagesDuration.getDuration() - (System.currentTimeMillis() - timestamp))); 56 } 57 58 @Override 59 protected void executeEvent(@NonNull TrimEvent event) { 60 KeepMessagesDuration keepMessagesDuration = SignalStore.settings().getKeepMessagesDuration(); 61 62 int trimLength = SignalStore.settings().isTrimByLengthEnabled() ? SignalStore.settings().getThreadTrimLength() 63 : ThreadTable.NO_TRIM_MESSAGE_COUNT_SET; 64 65 long trimBeforeDate = keepMessagesDuration != KeepMessagesDuration.FOREVER ? System.currentTimeMillis() - keepMessagesDuration.getDuration() 66 : ThreadTable.NO_TRIM_BEFORE_DATE_SET; 67 68 Log.i(TAG, "Trimming all threads with length: " + trimLength + " before: " + trimBeforeDate); 69 threadTable.trimAllThreads(trimLength, trimBeforeDate); 70 } 71 72 @Override 73 protected long getDelayForEvent(@NonNull TrimEvent event) { 74 return event.delay; 75 } 76 77 @Override 78 protected void scheduleAlarm(@NonNull Application application, TrimEvent event, long delay) { 79 setAlarm(application, delay, TrimThreadsByDateAlarm.class); 80 } 81 82 public static class TrimThreadsByDateAlarm extends BroadcastReceiver { 83 84 private static final String TAG = Log.tag(TrimThreadsByDateAlarm.class); 85 86 @Override 87 public void onReceive(@NonNull Context context, @NonNull Intent intent) { 88 Log.d(TAG, "onReceive()"); 89 ApplicationDependencies.getTrimThreadsByDateManager().scheduleIfNecessary(); 90 } 91 } 92 93 public static class TrimEvent { 94 final long delay; 95 96 public TrimEvent(long delay) { 97 this.delay = delay; 98 } 99 } 100}