Default search for flagged/unseen messages

This commit is contained in:
M66B 2022-12-14 09:11:29 +01:00
parent ea2fc9f09d
commit bd3ac84d77
5 changed files with 2886 additions and 5 deletions

File diff suppressed because it is too large Load Diff

View File

@ -130,7 +130,7 @@ public class AdapterNavSearch extends RecyclerView.Adapter<AdapterNavSearch.View
try {
JSONObject json = new JSONObject(search.data);
BoundaryCallbackMessages.SearchCriteria criteria =
BoundaryCallbackMessages.SearchCriteria.fromJSON(json);
BoundaryCallbackMessages.SearchCriteria.fromJsonData(json);
criteria.id = search.id;
criteria.name = search.name;
criteria.order = search.order;

View File

@ -1249,7 +1249,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
return false;
}
JSONObject toJson() throws JSONException {
JSONObject toJsonData() throws JSONException {
JSONObject json = new JSONObject();
json.put("query", query);
json.put("fts", fts);
@ -1296,7 +1296,7 @@ public class BoundaryCallbackMessages extends PagedList.BoundaryCallback<TupleMe
return json;
}
public static SearchCriteria fromJSON(JSONObject json) throws JSONException {
public static SearchCriteria fromJsonData(JSONObject json) throws JSONException {
SearchCriteria criteria = new SearchCriteria();
criteria.query = json.optString("query");
criteria.fts = json.optBoolean("fts");

View File

@ -67,7 +67,7 @@ import javax.mail.internet.InternetAddress;
// https://developer.android.com/topic/libraries/architecture/room.html
@Database(
version = 257,
version = 258,
entities = {
EntityIdentity.class,
EntityAccount.class,
@ -408,6 +408,11 @@ public abstract class DB extends RoomDatabase {
.setTransactionExecutor(Helper.getParallelExecutor())
.setJournalMode(wal ? JournalMode.WRITE_AHEAD_LOGGING : JournalMode.TRUNCATE) // using the latest sqlite
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
defaultSearches(db, context);
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
Map<String, String> crumb = new HashMap<>();
@ -2598,6 +2603,18 @@ public abstract class DB extends RoomDatabase {
db.execSQL("ALTER TABLE `search` ADD COLUMN `account_uuid` TEXT");
db.execSQL("ALTER TABLE `search` ADD COLUMN `folder_name` TEXT");
}
}).addMigrations(new Migration(257, 258) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
logMigration(startVersion, endVersion);
defaultSearches(db, context);
}
}).addMigrations(new Migration(258, 257) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
logMigration(startVersion, endVersion);
defaultSearches(db, context);
}
}).addMigrations(new Migration(998, 999) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase db) {
@ -2611,6 +2628,33 @@ public abstract class DB extends RoomDatabase {
});
}
public static void defaultSearches(SupportSQLiteDatabase db, Context context) {
try {
BoundaryCallbackMessages.SearchCriteria criteria;
criteria = new BoundaryCallbackMessages.SearchCriteria();
criteria.with_flagged = true;
db.execSQL("INSERT INTO `search` (`name`, `order`, `data`) VALUES (?, ?, ?)",
new Object[]{
context.getString(R.string.title_search_with_flagged),
0,
criteria.toJsonData().toString()
});
criteria = new BoundaryCallbackMessages.SearchCriteria();
criteria.with_unseen = true;
db.execSQL("INSERT INTO `search` (`name`, `order`, `data`) VALUES (?, ?, ?)",
new Object[]{
context.getString(R.string.title_search_with_unseen),
0,
criteria.toJsonData().toString()
});
} catch (Throwable ex) {
Log.e(ex);
}
}
public static void checkpoint(Context context) {
// https://www.sqlite.org/pragma.html#pragma_wal_checkpoint
DB db = getInstance(context);

View File

@ -6006,7 +6006,7 @@ public class FragmentMessages extends FragmentBase
search.name = args.getString("name");
search.order = (order < 0 ? null : order);
search.color = args.getInt("color", Color.TRANSPARENT);
search.data = criteria.toJson().toString();
search.data = criteria.toJsonData().toString();
if (search.color == Color.TRANSPARENT)
search.color = null;