From 2b6423c01d1cde8bda3916dd7797ee9b8de0f801 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 19 May 2024 22:28:17 +0200 Subject: [PATCH] Added summarize rule action --- .../java/eu/faircode/email/AdapterRule.java | 2 ++ app/src/main/java/eu/faircode/email/Core.java | 2 ++ .../java/eu/faircode/email/EntityRule.java | 25 +++++++++++++++++++ .../java/eu/faircode/email/FragmentRule.java | 2 ++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 32 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/AdapterRule.java b/app/src/main/java/eu/faircode/email/AdapterRule.java index 2d90e171aa..78ea228a45 100644 --- a/app/src/main/java/eu/faircode/email/AdapterRule.java +++ b/app/src/main/java/eu/faircode/email/AdapterRule.java @@ -616,6 +616,8 @@ public class AdapterRule extends RecyclerView.Adapter { return R.string.title_rule_url; case EntityRule.TYPE_SILENT: return R.string.title_rule_silent; + case EntityRule.TYPE_SUMMARIZE: + return R.string.title_rule_summarize; default: throw new IllegalArgumentException("Unknown action type=" + type); } diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 372c40d0fd..79f8ec4043 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -64,6 +64,7 @@ import com.sun.mail.pop3.POP3Store; import org.json.JSONArray; import org.json.JSONException; +import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -3136,6 +3137,7 @@ class Core { if (!message.content) throw new IllegalArgumentException("Message without content id=" + rule.id + ":" + rule.name); + rule.async = true; rule.execute(context, message, null); } diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index b137586bd4..8dc0d60095 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -38,6 +38,7 @@ import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; import androidx.room.Entity; import androidx.room.ForeignKey; +import androidx.room.Ignore; import androidx.room.Index; import androidx.room.PrimaryKey; @@ -118,6 +119,9 @@ public class EntityRule { public Integer applied = 0; public Long last_applied; + @Ignore + public boolean async; + static final int TYPE_SEEN = 1; static final int TYPE_UNSEEN = 2; static final int TYPE_MOVE = 3; @@ -138,6 +142,7 @@ public class EntityRule { static final int TYPE_NOTES = 18; static final int TYPE_URL = 19; static final int TYPE_SILENT = 20; + static final int TYPE_SUMMARIZE = 21; static final String ACTION_AUTOMATION = BuildConfig.APPLICATION_ID + ".AUTOMATION"; static final String EXTRA_RULE = "rule"; @@ -679,6 +684,8 @@ public class EntityRule { return onActionUrl(context, message, jaction, html); case TYPE_SILENT: return onActionSilent(context, message, jaction); + case TYPE_SUMMARIZE: + return onActionSummarize(context, message, jaction); default: throw new IllegalArgumentException("Unknown rule type=" + type + " name=" + name); } @@ -781,6 +788,8 @@ public class EntityRule { return; case TYPE_SILENT: return; + case TYPE_SUMMARIZE: + return; default: throw new IllegalArgumentException("Unknown rule type=" + type); } @@ -1554,6 +1563,22 @@ public class EntityRule { return true; } + private boolean onActionSummarize(Context context, EntityMessage message, JSONObject jargs) throws JSONException, IOException { + DB db = DB.getInstance(context); + + if (!this.async && this.id != null) { + EntityOperation.queue(context, message, EntityOperation.RULE, this.id); + return true; + } + + message.preview = AI.getSummaryText(context, message); + + db.message().setMessageContent(message.id, message.content, message.language, message.plain_only, message.preview, message.warning); + db.message().setMessageNotifying(message.id, 0); + + return true; + } + private static Calendar getRelativeCalendar(boolean all, int minutes, long reference) { int d = minutes / (24 * 60); int h = minutes / 60 % 24; diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index aa145a9f74..854db364dd 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -670,6 +670,8 @@ public class FragmentRule extends FragmentBase { actions.add(new Action(EntityRule.TYPE_COPY, getString(R.string.title_rule_copy))); actions.add(new Action(EntityRule.TYPE_DELETE, getString(R.string.title_rule_delete))); actions.add(new Action(EntityRule.TYPE_ANSWER, getString(R.string.title_rule_answer))); + if (AI.isAvailable(getContext())) + actions.add(new Action(EntityRule.TYPE_SUMMARIZE, getString(R.string.title_rule_summarize))); actions.add(new Action(EntityRule.TYPE_TTS, getString(R.string.title_rule_tts))); actions.add(new Action(EntityRule.TYPE_SOUND, getString(R.string.title_rule_sound))); actions.add(new Action(EntityRule.TYPE_AUTOMATION, getString(R.string.title_rule_automation))); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 199b6b04fa..5515a53117 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2035,6 +2035,7 @@ Delete permanently Play sound Silent notification + Summarize Edit rule Rule applies to