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:
parent
6d5b158787
commit
45227e2708
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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 });
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user