Refactoring

This commit is contained in:
M66B 2021-01-05 19:51:22 +01:00
parent 6a98be46dc
commit 7ae84af534
2 changed files with 36 additions and 36 deletions

View File

@ -999,10 +999,8 @@ class Core {
throw new IllegalArgumentException("self"); throw new IllegalArgumentException("self");
// De-classify // De-classify
if (MessageClassifier.canClassify(folder.type) &&
MessageClassifier.canClassify(target.type))
for (EntityMessage message : messages) for (EntityMessage message : messages)
MessageClassifier.classify(message, false, context); MessageClassifier.classify(message, folder, target, context);
IMAPFolder itarget = (IMAPFolder) istore.getFolder(target.name); IMAPFolder itarget = (IMAPFolder) istore.getFolder(target.name);
@ -1505,7 +1503,7 @@ class Core {
parts.isPlainOnly(), parts.isPlainOnly(),
HtmlHelper.getPreview(body), HtmlHelper.getPreview(body),
parts.getWarnings(message.warning)); parts.getWarnings(message.warning));
MessageClassifier.classify(message, true, context); MessageClassifier.classify(message, folder, null, context);
if (body != null) if (body != null)
EntityLog.log(context, "Operation body size=" + body.length()); EntityLog.log(context, "Operation body size=" + body.length());
@ -3012,7 +3010,7 @@ class Core {
parts.isPlainOnly(), parts.isPlainOnly(),
HtmlHelper.getPreview(body), HtmlHelper.getPreview(body),
parts.getWarnings(message.warning)); parts.getWarnings(message.warning));
MessageClassifier.classify(message, true, context); MessageClassifier.classify(message, folder, null, context);
if (!message.ui_hide) if (!message.ui_hide)
db.message().setMessageUiHide(message.id, false); db.message().setMessageUiHide(message.id, false);
@ -3142,7 +3140,7 @@ class Core {
if (process) { if (process) {
updateContactInfo(context, folder, message); updateContactInfo(context, folder, message);
MessageClassifier.classify(message, true, context); MessageClassifier.classify(message, folder, null, context);
} else } else
Log.d(folder.name + " unchanged uid=" + uid); Log.d(folder.name + " unchanged uid=" + uid);
@ -3447,7 +3445,7 @@ class Core {
parts.isPlainOnly(), parts.isPlainOnly(),
HtmlHelper.getPreview(body), HtmlHelper.getPreview(body),
parts.getWarnings(message.warning)); parts.getWarnings(message.warning));
MessageClassifier.classify(message, true, context); MessageClassifier.classify(message, folder, null, context);
if (stats != null && body != null) if (stats != null && body != null)
stats.content += body.length(); stats.content += body.length();

View File

@ -54,28 +54,22 @@ public class MessageClassifier {
private static final int MIN_MATCHED_WORDS = 10; private static final int MIN_MATCHED_WORDS = 10;
private static final double CHANCE_THRESHOLD = 2.0; private static final double CHANCE_THRESHOLD = 2.0;
static void classify(EntityMessage message, boolean added, Context context) { static void classify(EntityMessage message, EntityFolder folder, EntityFolder target, Context context) {
try { try {
if (!isEnabled(context)) if (!isEnabled(context))
return; return;
DB db = DB.getInstance(context);
EntityFolder folder = db.folder().getFolder(message.folder);
if (folder == null)
return;
EntityAccount account = db.account().getAccount(folder.account);
if (account == null)
return;
if (!canClassify(folder.type)) if (!canClassify(folder.type))
return; return;
if (target != null && !canClassify(target.type))
return;
File file = message.getFile(context); File file = message.getFile(context);
if (!file.exists()) if (!file.exists())
return; return;
// Build text to classify
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
List<Address> addresses = new ArrayList<>(); List<Address> addresses = new ArrayList<>();
@ -112,14 +106,17 @@ public class MessageClassifier {
if (sb.length() == 0) if (sb.length() == 0)
return; return;
// Load data if needed
load(context); load(context);
if (!classMessages.containsKey(account.id)) // Initialize data if needed
classMessages.put(account.id, new HashMap<>()); if (!classMessages.containsKey(folder.account))
if (!wordClassFrequency.containsKey(account.id)) classMessages.put(folder.account, new HashMap<>());
wordClassFrequency.put(account.id, new HashMap<>()); if (!wordClassFrequency.containsKey(folder.account))
wordClassFrequency.put(folder.account, new HashMap<>());
String classified = classify(account.id, folder.name, sb.toString(), added, context); // Classify text
String classified = classify(folder.account, folder.name, sb.toString(), target == null, context);
EntityLog.log(context, "Classifier" + EntityLog.log(context, "Classifier" +
" folder=" + folder.name + " folder=" + folder.name +
@ -129,28 +126,32 @@ public class MessageClassifier {
" class=" + classified + " class=" + classified +
" re=" + message.auto_classified); " re=" + message.auto_classified);
Integer m = classMessages.get(account.id).get(folder.name); // Update message count
if (added) { Integer m = classMessages.get(folder.account).get(folder.name);
if (target == null) {
m = (m == null ? 1 : m + 1); m = (m == null ? 1 : m + 1);
classMessages.get(account.id).put(folder.name, m); classMessages.get(folder.account).put(folder.name, m);
} else { } else {
if (m != null && m > 0) if (m != null && m > 0)
classMessages.get(account.id).put(folder.name, m - 1); classMessages.get(folder.account).put(folder.name, m - 1);
} }
Log.i("Classifier classify=" + folder.name + " messages=" + classMessages.get(account.id).get(folder.name)); EntityLog.log(context, "Classifier classify=" + folder.name +
" messages=" + classMessages.get(folder.account).get(folder.name));
dirty = true; dirty = true;
if (classified != null && !message.auto_classified) // Auto classify
if (classified != null &&
!classified.equals(folder.name) &&
!message.auto_classified &&
!EntityFolder.JUNK.equals(folder.type)) {
DB db = DB.getInstance(context);
try { try {
db.beginTransaction(); db.beginTransaction();
EntityFolder target = db.folder().getFolderByName(account.id, classified); EntityFolder dest = db.folder().getFolderByName(folder.account, classified);
if (target != null && target.auto_classify && if (dest != null && dest.auto_classify) {
!target.id.equals(folder.id) && EntityOperation.queue(context, message, EntityOperation.MOVE, dest.id, false, true);
!EntityFolder.JUNK.equals(folder.type)) {
EntityOperation.queue(context, message, EntityOperation.MOVE, target.id, false, true);
message.ui_hide = true; message.ui_hide = true;
} }
@ -159,6 +160,7 @@ public class MessageClassifier {
} finally { } finally {
db.endTransaction(); db.endTransaction();
} }
}
} catch (Throwable ex) { } catch (Throwable ex) {
Log.e(ex); Log.e(ex);
} }