Added workaround for Seznam server bug

pull/205/head
M66B 3 years ago
parent c304f5cd11
commit a13c296f1a

@ -1285,38 +1285,42 @@ class Core {
Log.i(folder.name + " " + (duplicate ? "copy" : "move") + Log.i(folder.name + " " + (duplicate ? "copy" : "move") +
" from " + folder.type + " to " + target.type); " from " + folder.type + " to " + target.type);
List<Message> icopies = new ArrayList<>(); if (!duplicate && account.isSeznam())
for (Message imessage : map.keySet()) { ifolder.copyMessages(map.keySet().toArray(new Message[0]), itarget);
EntityMessage message = map.get(imessage); else {
List<Message> icopies = new ArrayList<>();
for (Message imessage : map.keySet()) {
EntityMessage message = map.get(imessage);
File file = File.createTempFile("draft", "." + message.id, context.getCacheDir()); File file = File.createTempFile("draft", "." + message.id, context.getCacheDir());
try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) { try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
imessage.writeTo(os); imessage.writeTo(os);
} }
Properties props = MessageHelper.getSessionProperties(); Properties props = MessageHelper.getSessionProperties();
Session isession = Session.getInstance(props, null); Session isession = Session.getInstance(props, null);
Message icopy; Message icopy;
try (InputStream is = new BufferedInputStream(new FileInputStream(file))) { try (InputStream is = new BufferedInputStream(new FileInputStream(file))) {
if (duplicate) { if (duplicate) {
String msgid = EntityMessage.generateMessageId(); String msgid = EntityMessage.generateMessageId();
msgids.put(message, msgid); msgids.put(message, msgid);
icopy = new MimeMessageEx(isession, is, msgid); icopy = new MimeMessageEx(isession, is, msgid);
icopy.saveChanges(); icopy.saveChanges();
} else } else
icopy = new MimeMessage(isession, is); icopy = new MimeMessage(isession, is);
} }
file.delete(); file.delete();
for (Flags.Flag flag : imessage.getFlags().getSystemFlags()) for (Flags.Flag flag : imessage.getFlags().getSystemFlags())
icopy.setFlag(flag, true); icopy.setFlag(flag, true);
icopies.add(icopy); icopies.add(icopy);
} }
itarget.appendMessages(icopies.toArray(new Message[0])); itarget.appendMessages(icopies.toArray(new Message[0]));
}
} else { } else {
for (Message imessage : map.keySet()) { for (Message imessage : map.keySet()) {
Log.i((copy ? "Copy" : "Move") + " seen=" + seen + " unflag=" + unflag + " flags=" + imessage.getFlags() + " can=" + canMove); Log.i((copy ? "Copy" : "Move") + " seen=" + seen + " unflag=" + unflag + " flags=" + imessage.getFlags() + " can=" + canMove);

@ -162,6 +162,10 @@ public class EntityAccount extends EntityOrder implements Serializable {
return "imap.mail.yahoo.co.jp".equalsIgnoreCase(host); return "imap.mail.yahoo.co.jp".equalsIgnoreCase(host);
} }
boolean isSeznam() {
return "imap.seznam.cz".equalsIgnoreCase(host);
}
boolean isTransient(Context context) { boolean isTransient(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean enabled = prefs.getBoolean("enabled", true); boolean enabled = prefs.getBoolean("enabled", true);

Loading…
Cancel
Save