mirror of https://github.com/M66B/FairEmail.git
Allow unlabeling self
This commit is contained in:
parent
154ded7b5d
commit
908d992fa9
|
@ -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));
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue