1
0
mirror of https://github.com/moparisthebest/k-9 synced 2025-02-12 05:00:20 -05:00

Delete now uses LocalFolder.moveMessages

Copy now copied body (but attachments might not work right).

Move is now reliable (needed to open the destination folder), and
leaves a placeHolder message behind in the source folder so that
messages are not resynced.
This commit is contained in:
Daniel Applebaum 2009-03-07 07:20:15 +00:00
parent 6d5b158787
commit 45227e2708
3 changed files with 47 additions and 46 deletions

View File

@ -2214,6 +2214,10 @@ s * critical data as fast as possible, and then we'll fill in the de
+ ", uid = " + origUid + ", destination folder = " + destFolder + ", isCopy = " + isCopy); + ", uid = " + origUid + ", destination folder = " + destFolder + ", isCopy = " + isCopy);
} }
if (isCopy) { if (isCopy) {
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.BODY);
localSrcFolder.fetch(new Message[] { message }, fp, null);
localSrcFolder.copyMessages(new Message[] { message }, localDestFolder); localSrcFolder.copyMessages(new Message[] { message }, localDestFolder);
} }
else { else {
@ -2255,6 +2259,7 @@ s * critical data as fast as possible, and then we'll fill in the de
Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication); Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication);
Folder localFolder = localStore.getFolder(folder); Folder localFolder = localStore.getFolder(folder);
Message lMessage = localFolder.getMessage(message.getUid()); Message lMessage = localFolder.getMessage(message.getUid());
String origUid = message.getUid();
if (lMessage != null) if (lMessage != null)
{ {
if (folder.equals(account.getTrashFolderName())) if (folder.equals(account.getTrashFolderName()))
@ -2276,20 +2281,11 @@ s * critical data as fast as possible, and then we'll fill in the de
{ {
if (Config.LOGD) if (Config.LOGD)
{ {
Log.d(Email.LOG_TAG, "Deleting message in normal folder, copying"); Log.d(Email.LOG_TAG, "Deleting message in normal folder, moving");
}
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.BODY);
// TODO: Turn the fetch/copy/delete into an atomic move
localFolder.fetch(new Message[] { lMessage }, fp, null);
localFolder.copyMessages(new Message[] { lMessage }, localTrashFolder);
if (folder.equals(account.getOutboxFolderName())) {
lMessage.setFlag(Flag.X_DESTROYED, true);
}
else {
lMessage.setFlag(Flag.DELETED, true);
} }
localFolder.moveMessages(new Message[] { message }, localTrashFolder);
} }
} }
} }
@ -2323,14 +2319,14 @@ s * critical data as fast as possible, and then we'll fill in the de
{ {
PendingCommand command = new PendingCommand(); PendingCommand command = new PendingCommand();
command.command = PENDING_COMMAND_SET_FLAG; command.command = PENDING_COMMAND_SET_FLAG;
command.arguments = new String[] { folder, message.getUid(), Boolean.toString(true), Flag.DELETED.toString() }; command.arguments = new String[] { folder, origUid, Boolean.toString(true), Flag.DELETED.toString() };
queuePendingCommand(account, command); queuePendingCommand(account, command);
processPendingCommands(account); processPendingCommands(account);
} }
else if (account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) { else if (account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) {
PendingCommand command = new PendingCommand(); PendingCommand command = new PendingCommand();
command.command = PENDING_COMMAND_MOVE_OR_COPY; command.command = PENDING_COMMAND_MOVE_OR_COPY;
command.arguments = new String[] { folder, message.getUid(), account.getTrashFolderName(), "false" }; command.arguments = new String[] { folder, origUid, account.getTrashFolderName(), "false" };
queuePendingCommand(account, command); queuePendingCommand(account, command);
processPendingCommands(account); processPendingCommands(account);
} }
@ -2338,7 +2334,7 @@ s * critical data as fast as possible, and then we'll fill in the de
{ {
PendingCommand command = new PendingCommand(); PendingCommand command = new PendingCommand();
command.command = PENDING_COMMAND_SET_FLAG; command.command = PENDING_COMMAND_SET_FLAG;
command.arguments = new String[] { folder, message.getUid(), Boolean.toString(true), Flag.SEEN.toString() }; command.arguments = new String[] { folder, origUid, Boolean.toString(true), Flag.SEEN.toString() };
queuePendingCommand(account, command); queuePendingCommand(account, command);
processPendingCommands(account); processPendingCommands(account);
} }

View File

@ -1002,28 +1002,27 @@ public class FolderMessageList extends ExpandableListActivity
{ {
return; return;
} }
String destFolderName = folder.name; // String destFolderName = folder.name;
FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName); // FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
//
if (destHolder == null) { if (folder == null) {
return; return;
} }
if (holder.read == false && holder.folder.unreadMessageCount > 0) if (holder.read == false )
{ {
if (holder.folder.unreadMessageCount > 0) {
holder.folder.unreadMessageCount--; holder.folder.unreadMessageCount--;
destHolder.unreadMessageCount++; }
folder.unreadMessageCount++;
} }
if (destHolder != null) folder.needsRefresh = true;
{
destHolder.needsRefresh = true;
}
mAdapter.removeMessage(holder.message.getFolder().getName(), holder.uid); mAdapter.removeMessage(holder.message.getFolder().getName(), holder.uid);
MessagingController.getInstance(getApplication()).moveMessage(mAccount, MessagingController.getInstance(getApplication()).moveMessage(mAccount,
holder.message.getFolder().getName(), holder.message, destFolderName, null); holder.message.getFolder().getName(), holder.message, folder.name, null);
} }
@ -1034,25 +1033,19 @@ public class FolderMessageList extends ExpandableListActivity
{ {
return; return;
} }
String destFolderName = folder.name; if (folder == null) {
FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
if (destHolder == null) {
return; return;
} }
if (holder.read == false && holder.folder.unreadMessageCount > 0) if (holder.read == false)
{ {
destHolder.unreadMessageCount++; folder.unreadMessageCount++;
} }
if (destHolder != null) folder.needsRefresh = true;
{
destHolder.needsRefresh = true;
}
MessagingController.getInstance(getApplication()).copyMessage(mAccount, MessagingController.getInstance(getApplication()).copyMessage(mAccount,
holder.message.getFolder().getName(), holder.message, destFolderName, null); holder.message.getFolder().getName(), holder.message, folder.name, null);
} }
private void onReply(MessageInfoHolder holder) private void onReply(MessageInfoHolder holder)

View File

@ -981,18 +981,26 @@ public class LocalStore extends Store implements Serializable {
@Override @Override
public void moveMessages(Message[] msgs, Folder destFolder) throws MessagingException { public void moveMessages(Message[] msgs, Folder destFolder) throws MessagingException {
if (!(destFolder instanceof LocalFolder)) { if (!(destFolder instanceof LocalFolder)) {
throw new MessagingException("copyMessages called with incorrect Folder"); throw new MessagingException("copyMessages called with non-LocalFolder");
} }
LocalFolder lDestFolder = (LocalFolder)destFolder; LocalFolder lDestFolder = (LocalFolder)destFolder;
lDestFolder.open(OpenMode.READ_WRITE);
for (Message message : msgs) for (Message message : msgs)
{ {
LocalMessage lMessage = (LocalMessage)message; LocalMessage lMessage = (LocalMessage)message;
if (!message.isSet(Flag.SEEN)) { if (!message.isSet(Flag.SEEN)) {
if (getUnreadMessageCount() > 0) {
setUnreadMessageCount(getUnreadMessageCount() - 1); setUnreadMessageCount(getUnreadMessageCount() - 1);
lDestFolder.setUnreadMessageCount(destFolder.getUnreadMessageCount() + 1);
} }
lDestFolder.setUnreadMessageCount(lDestFolder.getUnreadMessageCount() + 1);
}
String oldUID = message.getUid();
Log.d(Email.LOG_TAG, "Updating folder_id to " + lDestFolder.getId() + " for message with UID "
+ message.getUid() + ", id " + lMessage.getId() + " currently in folder " + getName());
message.setUid("Local" + UUID.randomUUID().toString()); message.setUid("Local" + UUID.randomUUID().toString());
@ -1000,6 +1008,10 @@ public class LocalStore extends Store implements Serializable {
lDestFolder.getId(), lDestFolder.getId(),
message.getUid(), message.getUid(),
lMessage.getId() }); lMessage.getId() });
LocalMessage placeHolder = new LocalMessage(oldUID, this);
placeHolder.setFlagInternal(Flag.DELETED, true);
appendMessages(new Message[] { placeHolder });
} }
} }