1
0
mirror of https://github.com/moparisthebest/k-9 synced 2025-02-07 02:30:10 -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);
}
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);
}
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);
Folder localFolder = localStore.getFolder(folder);
Message lMessage = localFolder.getMessage(message.getUid());
String origUid = message.getUid();
if (lMessage != null)
{
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)
{
Log.d(Email.LOG_TAG, "Deleting message in normal folder, copying");
}
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);
Log.d(Email.LOG_TAG, "Deleting message in normal folder, moving");
}
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();
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);
processPendingCommands(account);
}
else if (account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) {
PendingCommand command = new PendingCommand();
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);
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();
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);
processPendingCommands(account);
}

View File

@ -1002,28 +1002,27 @@ public class FolderMessageList extends ExpandableListActivity
{
return;
}
String destFolderName = folder.name;
FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
if (destHolder == null) {
// String destFolderName = folder.name;
// FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
//
if (folder == null) {
return;
}
if (holder.read == false && holder.folder.unreadMessageCount > 0)
if (holder.read == false )
{
if (holder.folder.unreadMessageCount > 0) {
holder.folder.unreadMessageCount--;
destHolder.unreadMessageCount++;
}
folder.unreadMessageCount++;
}
if (destHolder != null)
{
destHolder.needsRefresh = true;
}
folder.needsRefresh = true;
mAdapter.removeMessage(holder.message.getFolder().getName(), holder.uid);
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;
}
String destFolderName = folder.name;
FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
if (destHolder == null) {
if (folder == null) {
return;
}
if (holder.read == false && holder.folder.unreadMessageCount > 0)
if (holder.read == false)
{
destHolder.unreadMessageCount++;
folder.unreadMessageCount++;
}
if (destHolder != null)
{
destHolder.needsRefresh = true;
}
folder.needsRefresh = true;
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)

View File

@ -981,18 +981,26 @@ public class LocalStore extends Store implements Serializable {
@Override
public void moveMessages(Message[] msgs, Folder destFolder) throws MessagingException {
if (!(destFolder instanceof LocalFolder)) {
throw new MessagingException("copyMessages called with incorrect Folder");
throw new MessagingException("copyMessages called with non-LocalFolder");
}
LocalFolder lDestFolder = (LocalFolder)destFolder;
lDestFolder.open(OpenMode.READ_WRITE);
for (Message message : msgs)
{
LocalMessage lMessage = (LocalMessage)message;
if (!message.isSet(Flag.SEEN)) {
if (getUnreadMessageCount() > 0) {
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());
@ -1000,6 +1008,10 @@ public class LocalStore extends Store implements Serializable {
lDestFolder.getId(),
message.getUid(),
lMessage.getId() });
LocalMessage placeHolder = new LocalMessage(oldUID, this);
placeHolder.setFlagInternal(Flag.DELETED, true);
appendMessages(new Message[] { placeHolder });
}
}