mirror of
https://github.com/M66B/FairEmail.git
synced 2026-03-28 11:55:20 +01:00
Suppress rule sounds for browsed messages
This commit is contained in:
@@ -467,7 +467,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
|
||||
continue;
|
||||
|
||||
if (rule.matches(context, message, null, null))
|
||||
if (rule.execute(context, message, null))
|
||||
if (rule.execute(context, message, false, null))
|
||||
applied++;
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
|
||||
@@ -3253,10 +3253,11 @@ class Core {
|
||||
db.beginTransaction();
|
||||
|
||||
long id = jargs.getLong(0);
|
||||
boolean browsed = jargs.optBoolean(1);
|
||||
if (id < 0) {
|
||||
EntityLog.log(context, "Executing deferred daily rules for message=" + message.id);
|
||||
List<EntityRule> rules = db.rule().getEnabledRules(message.folder, true);
|
||||
EntityRule.run(context, rules, message, null, null);
|
||||
EntityRule.run(context, rules, message, browsed, null, null);
|
||||
} else {
|
||||
EntityRule rule = db.rule().getRule(id);
|
||||
if (rule == null)
|
||||
@@ -3266,7 +3267,7 @@ class Core {
|
||||
throw new IllegalArgumentException("Message without content id=" + rule.id + ":" + rule.name);
|
||||
|
||||
rule.async = true;
|
||||
rule.execute(context, message, null);
|
||||
rule.execute(context, message, browsed, null);
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
@@ -3727,7 +3728,7 @@ class Core {
|
||||
attachment.id = db.attachment().insertAttachment(attachment);
|
||||
}
|
||||
|
||||
runRules(context, headers, body, account, folder, message, rules);
|
||||
runRules(context, headers, body, account, folder, message, false, rules);
|
||||
reportNewMessage(context, account, folder, message);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
@@ -5014,7 +5015,7 @@ class Core {
|
||||
attachment.id = db.attachment().insertAttachment(attachment);
|
||||
}
|
||||
|
||||
runRules(context, headers, body, account, folder, message, rules);
|
||||
runRules(context, headers, body, account, folder, message, browsed, rules);
|
||||
|
||||
if (message.blocklist != null && message.blocklist) {
|
||||
boolean use_blocklist = prefs.getBoolean("use_blocklist", false);
|
||||
@@ -5258,7 +5259,7 @@ class Core {
|
||||
db.message().updateMessage(message);
|
||||
|
||||
if (process)
|
||||
runRules(context, headers, body, account, folder, message, rules);
|
||||
runRules(context, headers, body, account, folder, message, browsed, rules);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
@@ -5458,7 +5459,7 @@ class Core {
|
||||
|
||||
private static void runRules(
|
||||
Context context, List<Header> headers, String html,
|
||||
EntityAccount account, EntityFolder folder, EntityMessage message,
|
||||
EntityAccount account, EntityFolder folder, EntityMessage message, boolean browsed,
|
||||
List<EntityRule> rules) {
|
||||
|
||||
if (EntityFolder.INBOX.equals(folder.type)) {
|
||||
@@ -5478,7 +5479,7 @@ class Core {
|
||||
try {
|
||||
boolean executed = false;
|
||||
if (pro) {
|
||||
int applied = EntityRule.run(context, rules, message, headers, html);
|
||||
int applied = EntityRule.run(context, rules, message, browsed, headers, html);
|
||||
executed = (applied > 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ public class EntityRule {
|
||||
}
|
||||
|
||||
static int run(Context context, List<EntityRule> rules,
|
||||
EntityMessage message, List<Header> headers, String html)
|
||||
EntityMessage message, boolean browsed, List<Header> headers, String html)
|
||||
throws JSONException, MessagingException, IOException {
|
||||
int applied = 0;
|
||||
|
||||
@@ -226,7 +226,7 @@ public class EntityRule {
|
||||
if (rule.group != null && stopped.contains(rule.group))
|
||||
continue;
|
||||
if (rule.matches(context, message, headers, html)) {
|
||||
if (rule.execute(context, message, html))
|
||||
if (rule.execute(context, message, browsed, html))
|
||||
applied++;
|
||||
if (rule.stop)
|
||||
if (rule.group == null)
|
||||
@@ -635,8 +635,8 @@ public class EntityRule {
|
||||
return matched;
|
||||
}
|
||||
|
||||
boolean execute(Context context, EntityMessage message, String html) throws JSONException, IOException {
|
||||
boolean executed = _execute(context, message, html);
|
||||
boolean execute(Context context, EntityMessage message, boolean browsed, String html) throws JSONException, IOException {
|
||||
boolean executed = _execute(context, message, browsed, html);
|
||||
if (this.id != null && executed) {
|
||||
DB db = DB.getInstance(context);
|
||||
db.rule().applyRule(id, new Date().getTime());
|
||||
@@ -644,7 +644,7 @@ public class EntityRule {
|
||||
return executed;
|
||||
}
|
||||
|
||||
private boolean _execute(Context context, EntityMessage message, String html) throws JSONException, IllegalArgumentException, IOException {
|
||||
private boolean _execute(Context context, EntityMessage message, boolean browsed, String html) throws JSONException, IllegalArgumentException, IOException {
|
||||
JSONObject jaction = new JSONObject(action);
|
||||
int type = jaction.getInt("type");
|
||||
EntityLog.log(context, EntityLog.Type.Rules, message,
|
||||
@@ -674,15 +674,15 @@ public class EntityRule {
|
||||
case TYPE_COPY:
|
||||
return onActionCopy(context, message, jaction);
|
||||
case TYPE_ANSWER:
|
||||
return onActionAnswer(context, message, jaction);
|
||||
return onActionAnswer(context, message, browsed, jaction);
|
||||
case TYPE_TTS:
|
||||
return onActionTts(context, message, jaction);
|
||||
return onActionTts(context, message, browsed, jaction);
|
||||
case TYPE_AUTOMATION:
|
||||
return onActionAutomation(context, message, jaction);
|
||||
case TYPE_DELETE:
|
||||
return onActionDelete(context, message, jaction);
|
||||
case TYPE_SOUND:
|
||||
return onActionSound(context, message, jaction);
|
||||
return onActionSound(context, message, browsed, jaction);
|
||||
case TYPE_LOCAL_ONLY:
|
||||
return onActionLocalOnly(context, message, jaction);
|
||||
case TYPE_NOTES:
|
||||
@@ -692,7 +692,7 @@ public class EntityRule {
|
||||
case TYPE_SILENT:
|
||||
return onActionSilent(context, message, jaction);
|
||||
case TYPE_SUMMARIZE:
|
||||
return onActionSummarize(context, message, jaction);
|
||||
return onActionSummarize(context, message, browsed, jaction);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown rule type=" + type + " name=" + name);
|
||||
}
|
||||
@@ -1017,7 +1017,7 @@ public class EntityRule {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean onActionAnswer(Context context, EntityMessage message, JSONObject jargs) {
|
||||
private boolean onActionAnswer(Context context, EntityMessage message, boolean browsed, JSONObject jargs) {
|
||||
DB db = DB.getInstance(context);
|
||||
String to = jargs.optString("to");
|
||||
boolean resend = jargs.optBoolean("resend");
|
||||
@@ -1068,7 +1068,7 @@ public class EntityRule {
|
||||
}
|
||||
|
||||
if (!complete && this.id != null) {
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, this.id);
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, this.id, browsed);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1286,15 +1286,15 @@ public class EntityRule {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean onActionTts(Context context, EntityMessage message, JSONObject jargs) {
|
||||
private boolean onActionTts(Context context, EntityMessage message, boolean browsed, JSONObject jargs) {
|
||||
DB db = DB.getInstance(context);
|
||||
|
||||
if (message.ui_seen)
|
||||
if (message.ui_seen || browsed)
|
||||
return false;
|
||||
|
||||
if (!message.content && this.id != null) {
|
||||
EntityOperation.queue(context, message, EntityOperation.BODY);
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, this.id);
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, this.id, browsed);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1439,13 +1439,16 @@ public class EntityRule {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean onActionSound(Context context, EntityMessage message, JSONObject jargs) throws JSONException {
|
||||
private boolean onActionSound(Context context, EntityMessage message, boolean browsed, JSONObject jargs) throws JSONException {
|
||||
Uri uri = (jargs.has("uri") ? Uri.parse(jargs.getString("uri")) : null);
|
||||
boolean loop = jargs.optBoolean("loop");
|
||||
boolean alarm = jargs.optBoolean("alarm");
|
||||
int duration = jargs.optInt("duration", MediaPlayerHelper.DEFAULT_ALARM_DURATION);
|
||||
Log.i("Sound uri=" + uri + " loop=" + loop + " alarm=" + alarm + " duration=" + duration);
|
||||
|
||||
if (browsed)
|
||||
return false;
|
||||
|
||||
DB db = DB.getInstance(context);
|
||||
|
||||
message.ui_silent = true;
|
||||
@@ -1600,14 +1603,14 @@ public class EntityRule {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean onActionSummarize(Context context, EntityMessage message, JSONObject jargs) throws JSONException, IOException {
|
||||
private boolean onActionSummarize(Context context, EntityMessage message, boolean browsed, JSONObject jargs) throws JSONException, IOException {
|
||||
DB db = DB.getInstance(context);
|
||||
|
||||
if (message.ui_hide)
|
||||
return false;
|
||||
|
||||
if (!this.async && this.id != null) {
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, this.id);
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, this.id, browsed);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ public class FragmentDialogRuleCheck extends FragmentDialogBase {
|
||||
continue;
|
||||
|
||||
if (rule.matches(context, message, null, null))
|
||||
if (rule.execute(context, message, null))
|
||||
if (rule.execute(context, message, false, null))
|
||||
applied++;
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
|
||||
@@ -1219,7 +1219,7 @@ public class FragmentFolders extends FragmentBase {
|
||||
continue;
|
||||
|
||||
EntityLog.log(context, "Executing rules message=" + message.id);
|
||||
applied = EntityRule.run(context, rules, message, null, null);
|
||||
applied = EntityRule.run(context, rules, message, false, null, null);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
|
||||
@@ -287,7 +287,7 @@ public class ServiceExternal extends ServiceBase {
|
||||
continue;
|
||||
|
||||
EntityLog.log(context, "Executing rules message=" + message.id);
|
||||
applied = EntityRule.run(context, rules, message, null, null);
|
||||
applied = EntityRule.run(context, rules, message, false, null, null);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
|
||||
@@ -109,10 +109,10 @@ public class WorkerDailyRules extends Worker {
|
||||
}
|
||||
|
||||
if (defer)
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, -1L);
|
||||
EntityOperation.queue(context, message, EntityOperation.RULE, -1L, false);
|
||||
else {
|
||||
EntityLog.log(context, "Executing daily rules message=" + message.id);
|
||||
EntityRule.run(context, rules, message, null, null);
|
||||
EntityRule.run(context, rules, message, false, null, null);
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
|
||||
Reference in New Issue
Block a user