Added deleted operation

pull/162/head
M66B 5 years ago
parent cfb11a0cb6
commit 249f9b07bd

@ -313,7 +313,7 @@ The low priority status bar notification shows the number of pending operations,
* *copy*: copy message to another remote folder
* *fetch*: fetched pushed message
* *delete*: delete message from remote folder
* *send*: send message
* *deleted*: delete message from local folder
* *seen*: mark message as read/unread in remote folder
* *answered*: mark message as answered in remote folder
* *flag*: add/remove star in remote folder

@ -166,6 +166,7 @@ class Core {
if (message == null) {
if (!EntityOperation.FETCH.equals(op.name) &&
!EntityOperation.DELETED.equals(op.name) &&
!EntityOperation.SYNC.equals(op.name) &&
!EntityOperation.SUBSCRIBE.equals(op.name))
throw new MessageRemovedException();
@ -221,6 +222,10 @@ class Core {
onDelete(context, jargs, folder, message, (IMAPFolder) ifolder);
break;
case EntityOperation.DELETED:
onDeleted(context, jargs, folder, (IMAPFolder) ifolder);
break;
case EntityOperation.HEADERS:
onHeaders(context, jargs, folder, message, (IMAPFolder) ifolder);
break;
@ -327,10 +332,14 @@ class Core {
return;
if (EntityOperation.ADD.equals(op.name))
return;
if (EntityOperation.FETCH.equals(op.name))
return;
if (EntityOperation.EXISTS.equals(op.name))
return;
if (EntityOperation.DELETE.equals(op.name) && !TextUtils.isEmpty(message.msgid))
return;
if (EntityOperation.DELETED.equals(op.name))
return;
Log.i(folder.name + " ensure uid op=" + op.name + " msgid=" + message.msgid);
@ -743,6 +752,18 @@ class Core {
}
}
private static void onDeleted(Context context, JSONArray jargs, EntityFolder folder, IMAPFolder ifolder) throws JSONException, MessagingException, IOException {
long uid = jargs.getLong(0);
DB db = DB.getInstance(context);
try {
db.message().deleteMessage(folder.id, uid);
} finally {
int count = ifolder.getMessageCount();
db.folder().setFolderTotal(folder.id, count < 0 ? null : count);
}
}
private static void onHeaders(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException {
// Download headers
DB db = DB.getInstance(context);

@ -77,8 +77,9 @@ public class EntityOperation {
static final String ADD = "add";
static final String MOVE = "move";
static final String COPY = "copy";
static final String DELETE = "delete";
static final String FETCH = "fetch";
static final String DELETE = "delete";
static final String DELETED = "deleted";
static final String SEEN = "seen";
static final String ANSWERED = "answered";
static final String FLAG = "flag";

@ -908,17 +908,7 @@ public class ServiceSynchronize extends ServiceBase {
for (Message imessage : e.getMessages()) {
long uid = ifolder.getUID(imessage);
try {
db.beginTransaction();
EntityMessage message = db.message().getMessageByUid(folder.id, uid);
if (message != null)
EntityOperation.queue(ServiceSynchronize.this, message, EntityOperation.DELETE);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
EntityOperation.queue(ServiceSynchronize.this, folder, EntityOperation.DELETED, uid);
}
} catch (Throwable ex) {
Log.e(folder.name, ex);

Loading…
Cancel
Save