|
|
@ -77,6 +77,8 @@ import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Objects;
|
|
|
|
import java.util.Objects;
|
|
|
|
import java.util.Properties;
|
|
|
|
import java.util.Properties;
|
|
|
|
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
|
|
import java.util.concurrent.ConcurrentMap;
|
|
|
|
import java.util.concurrent.Semaphore;
|
|
|
|
import java.util.concurrent.Semaphore;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
@ -111,6 +113,7 @@ import static androidx.core.app.NotificationCompat.DEFAULT_SOUND;
|
|
|
|
|
|
|
|
|
|
|
|
class Core {
|
|
|
|
class Core {
|
|
|
|
private static int lastUnseen = -1;
|
|
|
|
private static int lastUnseen = -1;
|
|
|
|
|
|
|
|
private static ConcurrentMap<Long, Long> lockFolders = new ConcurrentHashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
private static final int MAX_NOTIFICATION_COUNT = 10; // per group
|
|
|
|
private static final int MAX_NOTIFICATION_COUNT = 10; // per group
|
|
|
|
private static final int SYNC_CHUNCK_SIZE = 200;
|
|
|
|
private static final int SYNC_CHUNCK_SIZE = 200;
|
|
|
@ -1369,6 +1372,8 @@ class Core {
|
|
|
|
IMAPFolder ifolder, IMAPMessage imessage,
|
|
|
|
IMAPFolder ifolder, IMAPMessage imessage,
|
|
|
|
boolean browsed, boolean download,
|
|
|
|
boolean browsed, boolean download,
|
|
|
|
List<EntityRule> rules, State state) throws MessagingException, IOException {
|
|
|
|
List<EntityRule> rules, State state) throws MessagingException, IOException {
|
|
|
|
|
|
|
|
lockFolders.putIfAbsent(folder.id, folder.id);
|
|
|
|
|
|
|
|
synchronized (lockFolders.get(folder.id)) {
|
|
|
|
long uid = ifolder.getUID(imessage);
|
|
|
|
long uid = ifolder.getUID(imessage);
|
|
|
|
|
|
|
|
|
|
|
|
if (imessage.isExpunged()) {
|
|
|
|
if (imessage.isExpunged()) {
|
|
|
@ -1528,13 +1533,6 @@ class Core {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
db.beginTransaction();
|
|
|
|
db.beginTransaction();
|
|
|
|
|
|
|
|
|
|
|
|
// Check if message was added in the meantime
|
|
|
|
|
|
|
|
EntityMessage existing = db.message().getMessageByUid(message.folder, message.uid);
|
|
|
|
|
|
|
|
if (existing != null) {
|
|
|
|
|
|
|
|
Log.i("Message was already added");
|
|
|
|
|
|
|
|
return existing;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message.id = db.message().insertMessage(message);
|
|
|
|
message.id = db.message().insertMessage(message);
|
|
|
|
Log.i(folder.name + " added id=" + message.id + " uid=" + message.uid);
|
|
|
|
Log.i(folder.name + " added id=" + message.id + " uid=" + message.uid);
|
|
|
|
|
|
|
|
|
|
|
@ -1696,6 +1694,7 @@ class Core {
|
|
|
|
|
|
|
|
|
|
|
|
return message;
|
|
|
|
return message;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static EntityIdentity matchIdentity(Context context, EntityFolder folder, EntityMessage message) {
|
|
|
|
private static EntityIdentity matchIdentity(Context context, EntityFolder folder, EntityMessage message) {
|
|
|
|
DB db = DB.getInstance(context);
|
|
|
|
DB db = DB.getInstance(context);
|
|
|
|