Allow unlabeling self

This commit is contained in:
M66B 2020-06-27 11:00:13 +02:00
parent 154ded7b5d
commit 908d992fa9
2 changed files with 42 additions and 11 deletions

View File

@ -3601,13 +3601,12 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
Bundle args = new Bundle();
args.putLong("id", message.id);
args.putLong("account", message.account);
args.putString("exclude", message.folderName);
args.putString("self", message.folderName);
new SimpleTask<String[]>() {
@Override
protected String[] onExecute(Context context, Bundle args) {
long account = args.getLong("account");
String exclude = args.getString("exclude");
DB db = DB.getInstance(context);
List<EntityFolder> folders = db.folder().getFolders(account, true, true);
@ -3615,7 +3614,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
List<String> result = new ArrayList<>();
if (folders != null)
for (EntityFolder folder : folders)
if (EntityFolder.USER.equals(folder.type) && !exclude.equals(folder.name))
if (EntityFolder.USER.equals(folder.type))
result.add(folder.name);
Collator collator = Collator.getInstance(Locale.getDefault());
@ -6209,10 +6208,13 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
final long id = getArguments().getLong("id");
String self = getArguments().getString("self");
String[] labels = getArguments().getStringArray("labels");
final String[] folders = getArguments().getStringArray("folders");
List<String> l = new ArrayList<>();
if (self != null)
l.add(self);
if (labels != null)
l.addAll(Arrays.asList(labels));

View File

@ -695,19 +695,48 @@ class Core {
private static void onLabel(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPStore istore, IMAPFolder ifolder, State state) throws JSONException, MessagingException, IOException {
// Set/clear Gmail label
// Gmail does not push label changes
String label = jargs.getString(0);
boolean set = jargs.getBoolean(1);
// Gmail does not push label changes
try {
Message imessage = ifolder.getMessageByUID(message.uid);
if (imessage instanceof GmailMessage)
((GmailMessage) imessage).setLabels(new String[]{label}, set);
} catch (MessagingException ex) {
Log.w(ex);
DB db = DB.getInstance(context);
if (!set && label.equals(folder.name)) {
// Prevent deleting message
EntityFolder archive = db.folder().getFolderByType(message.account, EntityFolder.ARCHIVE);
if (archive == null)
throw new IllegalArgumentException("label/archive");
Message[] imessages;
Folder iarchive = istore.getFolder(archive.name);
try {
iarchive.open(Folder.READ_ONLY);
imessages = ifolder.search(new MessageIDTerm(message.msgid));
} finally {
if (iarchive.isOpen())
iarchive.close();
}
if (imessages != null && imessages.length > 0)
try {
Message imessage = ifolder.getMessageByUID(message.uid);
imessage.setFlag(Flags.Flag.DELETED, true);
ifolder.expunge();
} catch (MessagingException ex) {
Log.w(ex);
}
else
throw new IllegalArgumentException("label/delete");
} else {
try {
Message imessage = ifolder.getMessageByUID(message.uid);
if (imessage instanceof GmailMessage)
((GmailMessage) imessage).setLabels(new String[]{label}, set);
} catch (MessagingException ex) {
Log.w(ex);
}
}
DB db = DB.getInstance(context);
try {
db.beginTransaction();