Store POP3 UIDL

pull/178/head
M66B 4 years ago
parent 79590e8eac
commit 98c7e1f8aa

File diff suppressed because it is too large Load Diff

@ -1063,7 +1063,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
" ignored=" + message.ui_ignored +
" found=" + message.ui_found +
"\nhash=" + message.hash +
"\nmsgid=" + message.msgid +
"\nmsgid=" + message.msgid + "/" + message.uidl +
"\nthread=" + message.thread +
"\nsender=" + message.sender;

@ -1529,8 +1529,8 @@ class Core {
db.folder().setFolderSyncState(folder.id, "downloading");
List<String> existing = db.message().getMsgIds(folder.id);
Log.i(folder.name + " POP existing=" + existing.size());
List<String> uidls = db.message().getUidls(folder.id);
Log.i(folder.name + " POP existing=" + uidls.size());
for (Message imessage : imessages)
try {
@ -1538,23 +1538,23 @@ class Core {
return;
MessageHelper helper = new MessageHelper((MimeMessage) imessage);
String msgid = caps.containsKey("UIDL")
String uidl = caps.containsKey("UIDL")
? ifolder.getUID(imessage)
: helper.getMessageID();
if (TextUtils.isEmpty(msgid)) {
if (TextUtils.isEmpty(uidl)) {
Log.w(folder.name + " POP no message ID");
continue;
}
if (existing.contains(msgid)) {
existing.remove(msgid);
Log.i(folder.name + " POP having=" + msgid);
if (uidls.contains(uidl)) {
uidls.remove(uidl);
Log.i(folder.name + " POP having=" + uidl);
continue;
}
try {
Log.i(folder.name + " POP sync=" + msgid);
Log.i(folder.name + " POP sync=" + uidl);
Long sent = helper.getSent();
if (sent == null)
@ -1567,8 +1567,8 @@ class Core {
message.account = folder.account;
message.folder = folder.id;
message.uid = null;
message.msgid = msgid;
message.uidl = uidl;
message.msgid = helper.getMessageID();
message.hash = helper.getHash();
message.references = TextUtils.join(" ", helper.getReferences());
message.inreplyto = helper.getInReplyTo();
@ -1671,7 +1671,7 @@ class Core {
}
if (!account.leave_on_device)
for (String msgid : existing) {
for (String msgid : uidls) {
Log.i(folder.name + " POP deleted=" + msgid);
db.message().deleteMessage(folder.id, msgid);
}

@ -60,7 +60,7 @@ import io.requery.android.database.sqlite.SQLiteDatabase;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 157,
version = 158,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -1565,6 +1565,13 @@ public abstract class DB extends RoomDatabase {
Log.i("DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("ALTER TABLE `message` ADD COLUMN `wasforwardedfrom` TEXT");
}
})
.addMigrations(new Migration(157, 158) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
Log.i("DB migration from version " + startVersion + " to " + endVersion);
db.execSQL("ALTER TABLE `message` ADD COLUMN `uidl` TEXT");
}
});
}

@ -483,9 +483,9 @@ public interface DaoMessage {
" AND NOT uid IS NULL")
List<Long> getUids(long folder, Long received);
@Query("SELECT msgid FROM message" +
@Query("SELECT IFNULL(uidl, msgid) FROM message" +
" WHERE folder = :folder")
List<String> getMsgIds(long folder);
List<String> getUidls(long folder);
@Query("SELECT * FROM message" +
" WHERE folder = :folder" +

@ -102,6 +102,7 @@ public class EntityMessage implements Serializable {
public Long replying; // obsolete
public Long forwarding; // obsolete
public Long uid; // compose/moved = null
public String uidl; // POP3
public String msgid;
public String hash; // headers hash
public String references;

Loading…
Cancel
Save