Always keep and synchronize flagged messages

This commit is contained in:
M66B 2018-12-03 09:33:43 +01:00
parent 36e6d34b54
commit b5c7cea122
5 changed files with 1190 additions and 6 deletions

File diff suppressed because it is too large Load Diff

View File

@ -46,7 +46,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 12,
version = 13,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -220,6 +220,13 @@ public abstract class DB extends RoomDatabase {
db.execSQL("CREATE INDEX `index_operation_message` ON `operation` (`message`)");
}
})
.addMigrations(new Migration(12, 13) {
@Override
public void migrate(SupportSQLiteDatabase db) {
Log.i(Helper.TAG, "DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("CREATE INDEX `index_message_ui_flagged` ON `message` (`ui_flagged`)");
}
})
.build();
}

View File

@ -300,20 +300,27 @@ public interface DaoMessage {
@Query("DELETE FROM message WHERE id = :id")
int deleteMessage(long id);
@Query("DELETE FROM message WHERE folder = :folder AND uid = :uid")
@Query("DELETE FROM message" +
" WHERE folder = :folder" +
" AND uid = :uid")
int deleteMessage(long folder, long uid);
@Query("DELETE FROM message WHERE folder = :folder AND NOT uid IS NULL")
@Query("DELETE FROM message" +
" WHERE folder = :folder" +
" AND NOT uid IS NULL")
int deleteLocalMessages(long folder);
@Query("DELETE FROM message WHERE folder = :folder AND seen")
@Query("DELETE FROM message" +
" WHERE folder = :folder" +
" AND seen")
int deleteSeenMessages(long folder);
@Query("DELETE FROM message" +
" WHERE folder = :folder" +
" AND received < :received" +
" AND NOT uid IS NULL" +
" AND (NOT ui_browsed OR :browsed)")
" AND (NOT ui_browsed OR :browsed)" +
" AND NOT ui_flagged")
int deleteMessagesBefore(long folder, long received, boolean browsed);
@Query("DELETE FROM message WHERE ui_found")

View File

@ -74,6 +74,7 @@ import static androidx.room.ForeignKey.SET_NULL;
@Index(value = {"thread"}),
@Index(value = {"received"}),
@Index(value = {"ui_seen"}),
@Index(value = {"ui_flagged"}),
@Index(value = {"ui_hide"}),
@Index(value = {"ui_found"}),
@Index(value = {"ui_ignored"}),

View File

@ -114,6 +114,8 @@ import javax.mail.event.StoreListener;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.search.ComparisonTerm;
import javax.mail.search.FlagTerm;
import javax.mail.search.OrTerm;
import javax.mail.search.ReceivedDateTerm;
import javax.net.ssl.SSLException;
@ -1881,7 +1883,12 @@ public class ServiceSynchronize extends LifecycleService {
// Reduce list of local uids
long search = SystemClock.elapsedRealtime();
Message[] imessages = ifolder.search(new ReceivedDateTerm(ComparisonTerm.GE, new Date(sync_time)));
Message[] imessages = ifolder.search(
new OrTerm(
new ReceivedDateTerm(ComparisonTerm.GE, new Date(sync_time)),
new FlagTerm(new Flags(Flags.Flag.FLAGGED), true)
)
);
Log.i(Helper.TAG, folder.name + " remote count=" + imessages.length +
" search=" + (SystemClock.elapsedRealtime() - search) + " ms");