That fuck shit the fascists are using
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}