Store recent flag

This commit is contained in:
M66B 2022-05-28 11:25:08 +02:00
parent ef25812bfe
commit e40f618210
7 changed files with 2799 additions and 2 deletions

File diff suppressed because it is too large Load Diff

View File

@ -225,6 +225,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private int colorAccent;
private int textColorPrimary;
private int textColorSecondary;
private int textColorTertiary;
private int textColorLink;
private int colorUnreadHighlight;
private int colorUnread;
@ -1341,6 +1342,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvTime.setText(date && FragmentMessages.SORT_DATE_HEADER.contains(sort)
? TF.format(message.received)
: Helper.getRelativeTimeSpanString(context, message.received));
tvTime.setTextColor(BuildConfig.DEBUG && message.recent ? colorAccent : textColorTertiary);
// Line 2
tvSubject.setText(message.subject);
@ -6857,6 +6859,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
this.textColorPrimary = Helper.resolveColor(context, android.R.attr.textColorPrimary);
this.textColorSecondary = Helper.resolveColor(context, android.R.attr.textColorSecondary);
this.textColorTertiary = Helper.resolveColor(context, android.R.attr.textColorTertiary);
this.textColorLink = Helper.resolveColor(context, android.R.attr.textColorLink);
boolean highlight_unread = prefs.getBoolean("highlight_unread", true);
@ -7168,6 +7171,11 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
same = false;
log("stored changed", next.id);
}
if (!prev.recent.equals(next.recent)) {
// updated after decryption
same = false;
log("recent changed", next.id);
}
// seen
// answered
// flagged

View File

@ -3559,10 +3559,16 @@ class Core {
EntityMessage message = db.message().getMessageByUid(folder.id, uid.uid);
if (message != null) {
boolean update = false;
boolean recent = flags.contains(Flags.Flag.RECENT);
boolean seen = flags.contains(Flags.Flag.SEEN);
boolean answered = flags.contains(Flags.Flag.ANSWERED);
boolean flagged = flags.contains(Flags.Flag.FLAGGED);
boolean deleted = flags.contains(Flags.Flag.DELETED);
if (message.recent != recent) {
update = true;
message.recent = recent;
Log.i("UID fetch recent=" + recent);
}
if (message.seen != seen) {
update = true;
message.seen = seen;
@ -3887,6 +3893,7 @@ class Core {
}
MessageHelper helper = new MessageHelper(imessage, context);
boolean recent = helper.getRecent();
boolean seen = helper.getSeen();
boolean answered = helper.getAnswered();
boolean flagged = helper.getFlagged();
@ -3949,7 +3956,7 @@ class Core {
}
}
if (dup.seen != seen || dup.answered != answered || dup.flagged != flagged)
if (dup.recent != recent || dup.seen != seen || dup.answered != answered || dup.flagged != flagged)
syncSimilar = true;
if (dup.flagged && dup.color != null)
@ -4051,6 +4058,7 @@ class Core {
message.notes = notes;
message.notes_color = notes_color;
message.sent = sent;
message.recent = recent;
message.seen = seen;
message.answered = answered;
message.flagged = flagged;
@ -4343,6 +4351,13 @@ class Core {
}
}
if (!message.recent.equals(recent)) {
update = true;
message.recent = recent;
Log.i(folder.name + " updated id=" + message.id + " uid=" + message.uid + " recent=" + recent);
syncSimilar = true;
}
if ((!message.seen.equals(seen) ||
(!folder.read_only && !message.ui_seen.equals(seen))) &&
db.operation().getOperationCount(folder.id, message.id, EntityOperation.SEEN) == 0) {
@ -4491,6 +4506,11 @@ class Core {
if (syncSimilar && account.isGmail())
for (EntityMessage similar : db.message().getMessagesBySimilarity(message.account, message.id, message.msgid)) {
if (similar.recent != message.recent) {
Log.i(folder.name + " Synchronize similar id=" + similar.id + " recent=" + message.recent);
db.message().setMessageRecent(similar.id, message.recent);
}
if (similar.seen != message.seen) {
Log.i(folder.name + " Synchronize similar id=" + similar.id + " seen=" + message.seen);
db.message().setMessageSeen(similar.id, message.seen);

View File

@ -71,7 +71,7 @@ import io.requery.android.database.sqlite.SQLiteDatabase;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 234,
version = 235,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -2344,6 +2344,12 @@ public abstract class DB extends RoomDatabase {
public void migrate(@NonNull SupportSQLiteDatabase db) {
logMigration(startVersion, endVersion);
}
}).addMigrations(new Migration(234, 235) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
logMigration(startVersion, endVersion);
db.execSQL("ALTER TABLE `message` ADD COLUMN `recent` INTEGER NOT NULL DEFAULT 0");
}
}).addMigrations(new Migration(998, 999) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {

View File

@ -720,6 +720,9 @@ public interface DaoMessage {
@Query("UPDATE message SET subject = :subject WHERE id = :id AND NOT (subject IS :subject)")
int setMessageSubject(long id, String subject);
@Query("UPDATE message SET recent = :recent WHERE id = :id AND NOT (recent IS :recent)")
int setMessageRecent(long id, boolean recent);
@Query("UPDATE message SET seen = :seen WHERE id = :id AND NOT (seen IS :seen)")
int setMessageSeen(long id, boolean seen);

View File

@ -198,6 +198,8 @@ public class EntityMessage implements Serializable {
@NonNull
public Long stored = new Date().getTime();
@NonNull
public Boolean recent = false;
@NonNull
public Boolean seen = false;
@NonNull
public Boolean answered = false;
@ -656,6 +658,7 @@ public class EntityMessage implements Serializable {
Objects.equals(this.sent, other.sent) &&
this.received.equals(other.received) &&
this.stored.equals(other.stored) &&
this.recent.equals(other.recent) &&
this.seen.equals(other.seen) &&
this.answered.equals(other.answered) &&
this.flagged.equals(other.flagged) &&

View File

@ -1191,6 +1191,10 @@ public class MessageHelper {
}
}
boolean getRecent() throws MessagingException {
return imessage.isSet(Flags.Flag.RECENT);
}
boolean getSeen() throws MessagingException {
return imessage.isSet(Flags.Flag.SEEN);
}