summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2023-02-03 17:23:33 +0100
committerThomas <tschneider.ac@gmail.com>2023-02-03 17:23:33 +0100
commit2b300ceae459866555c024353780886c34a648d5 (patch)
tree9d093f8d944270aa5219c84737300941b764eaf2
parent6e4bb95dda8aa894023ec8795be05bcaa6ba7079 (diff)
record cache work
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java4
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java4
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java6
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/client/entities/app/BottomMenu.java4
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/client/entities/app/HomeFetchLog.java86
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/client/entities/app/Pinned.java5
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java1
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java30
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderBottomMenuAdapter.java3
-rw-r--r--app/src/main/java/app/fedilab/android/sqlite/Sqlite.java34
10 files changed, 166 insertions, 11 deletions
diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java
index b96ae47d1..675e386c2 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/activities/HashTagActivity.java
@@ -233,6 +233,10 @@ public class HashTagActivity extends BaseActivity {
tagTimeline.any.add(stripTag.trim());
pinnedTimeline.tagTimeline = tagTimeline;
pinned.pinnedTimelines.add(pinnedTimeline);
+ if (pinned.instance == null || pinned.user_id == null) {
+ pinned.instance = MainActivity.currentInstance;
+ pinned.user_id = MainActivity.currentUserID;
+ }
if (update) {
new Pinned(HashTagActivity.this).updatePinned(pinned);
} else {
diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java
index 346b7305e..403bf77c2 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java
@@ -836,6 +836,10 @@ public class ProfileActivity extends BaseActivity {
pinnedTimeline.type = Timeline.TimeLineEnum.REMOTE;
pinnedTimeline.position = pinned.pinnedTimelines.size();
pinned.pinnedTimelines.add(pinnedTimeline);
+ if (pinned.instance == null || pinned.user_id == null) {
+ pinned.instance = MainActivity.currentInstance;
+ pinned.user_id = MainActivity.currentUserID;
+ }
Pinned finalPinned = pinned;
boolean finalPresent = present;
new Thread(() -> {
diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java
index 6321af35a..e25557e3b 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ReorderTimelinesActivity.java
@@ -44,6 +44,7 @@ import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import app.fedilab.android.R;
+import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.databinding.ActivityReorderTabsBinding;
import app.fedilab.android.databinding.PopupSearchInstanceBinding;
import app.fedilab.android.mastodon.client.entities.app.BottomMenu;
@@ -261,7 +262,10 @@ public class ReorderTimelinesActivity extends BaseBarActivity implements OnStart
pinnedTimeline.type = Timeline.TimeLineEnum.REMOTE;
pinnedTimeline.position = pinned.pinnedTimelines.size();
pinned.pinnedTimelines.add(pinnedTimeline);
-
+ if (pinned.user_id == null || pinned.instance == null) {
+ pinned.user_id = MainActivity.currentUserID;
+ pinned.instance = MainActivity.currentInstance;
+ }
if (update) {
try {
new Pinned(ReorderTimelinesActivity.this).updatePinned(pinned);
diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/BottomMenu.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/BottomMenu.java
index fe7b755ed..17861797a 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/BottomMenu.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/BottomMenu.java
@@ -166,8 +166,8 @@ public class BottomMenu implements Serializable {
throw new DBException("db is null. Wrong initialization.");
}
ContentValues values = new ContentValues();
- values.put(Sqlite.COL_INSTANCE, BaseMainActivity.currentInstance);
- values.put(Sqlite.COL_USER_ID, BaseMainActivity.currentUserID);
+ values.put(Sqlite.COL_INSTANCE, bottomMenu.instance);
+ values.put(Sqlite.COL_USER_ID, bottomMenu.user_id);
values.put(Sqlite.COL_BOTTOM_MENU, menuItemListToStringStorage(bottomMenu.bottom_menu));
//Inserts bottom
try {
diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/HomeFetchLog.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/HomeFetchLog.java
new file mode 100644
index 000000000..dd6bfe37b
--- /dev/null
+++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/HomeFetchLog.java
@@ -0,0 +1,86 @@
+package app.fedilab.android.mastodon.client.entities.app;
+/* Copyright 2023 Thomas Schneider
+ *
+ * This file is a part of Fedilab
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+ * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Fedilab; if not,
+ * see <http://www.gnu.org/licenses>. */
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+
+import com.google.gson.annotations.SerializedName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import app.fedilab.android.mastodon.exception.DBException;
+import app.fedilab.android.mastodon.helper.Helper;
+import app.fedilab.android.sqlite.Sqlite;
+
+public class HomeFetchLog implements Serializable {
+
+ private final SQLiteDatabase db;
+ @SerializedName("id")
+ public long id = -1;
+ @SerializedName("instance")
+ public String instance;
+ @SerializedName("user_id")
+ public String user_id;
+ @SerializedName("fetched_count")
+ public int fetched_count;
+ @SerializedName("inserted")
+ public int inserted;
+ @SerializedName("updated")
+ public int updated;
+ @SerializedName("failed")
+ public int failed;
+ @SerializedName("frequency")
+ public int frequency;
+ @SerializedName("created_at")
+ public Date created_ad;
+ private Context context;
+
+ public HomeFetchLog() {
+ db = null;
+ }
+
+ public HomeFetchLog(Context context) {
+ //Creation of the DB with tables
+ this.context = context;
+ this.db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
+ }
+
+ public long insert(HomeFetchLog homeFetchLog) throws DBException {
+ if (db == null) {
+ throw new DBException("db is null. Wrong initialization.");
+ }
+ ContentValues values = new ContentValues();
+ values.put(Sqlite.COL_INSTANCE, homeFetchLog.instance);
+ values.put(Sqlite.COL_USER_ID, homeFetchLog.user_id);
+ values.put(Sqlite.COL_FETCHED_COUNT, homeFetchLog.fetched_count);
+ values.put(Sqlite.COL_FAILED, homeFetchLog.failed);
+ values.put(Sqlite.COL_INSERTED, homeFetchLog.inserted);
+ values.put(Sqlite.COL_UPDATED, homeFetchLog.updated);
+ values.put(Sqlite.COL_FREQUENCY, homeFetchLog.frequency);
+ values.put(Sqlite.COL_CREATED_AT, Helper.dateToString(new Date()));
+
+ //Inserts logs
+ try {
+ return db.insertOrThrow(Sqlite.TABLE_HOME_FETCH_LOGS, null, values);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return -1;
+ }
+ }
+
+}
diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/Pinned.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/Pinned.java
index 514bf389f..44ca1371c 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/Pinned.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/Pinned.java
@@ -28,7 +28,6 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.mastodon.exception.DBException;
import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.sqlite.Sqlite;
@@ -104,8 +103,8 @@ public class Pinned implements Serializable {
throw new DBException("db is null. Wrong initialization.");
}
ContentValues values = new ContentValues();
- values.put(Sqlite.COL_INSTANCE, BaseMainActivity.currentInstance);
- values.put(Sqlite.COL_USER_ID, BaseMainActivity.currentUserID);
+ values.put(Sqlite.COL_INSTANCE, pinned.instance);
+ values.put(Sqlite.COL_USER_ID, pinned.user_id);
values.put(Sqlite.COL_PINNED_TIMELINES, mastodonPinnedTimelinesToStringStorage(pinned.pinnedTimelines));
values.put(Sqlite.COL_CREATED_AT, Helper.dateToString(new Date()));
//Inserts pinned
diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java
index 6f0c3944a..df8563a67 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/helper/PinnedTimelineHelper.java
@@ -277,6 +277,7 @@ public class PinnedTimelineHelper {
pinnedTimeline.position = pinnedAll.pinnedTimelines.size();
pinnedTimeline.mastodonList = mastodonList;
pinnedAll.pinnedTimelines.add(pinnedTimeline);
+
try {
boolean exist = new Pinned(activity).pinnedExist(pinnedAll);
if (exist) {
diff --git a/app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java b/app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java
index c57fca9b4..148efed8e 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java
@@ -46,6 +46,7 @@ import app.fedilab.android.mastodon.client.entities.api.Pagination;
import app.fedilab.android.mastodon.client.entities.api.Status;
import app.fedilab.android.mastodon.client.entities.app.Account;
import app.fedilab.android.mastodon.client.entities.app.BaseAccount;
+import app.fedilab.android.mastodon.client.entities.app.HomeFetchLog;
import app.fedilab.android.mastodon.client.entities.app.StatusCache;
import app.fedilab.android.mastodon.client.entities.app.Timeline;
import app.fedilab.android.mastodon.exception.DBException;
@@ -163,6 +164,10 @@ public class FetchHomeWorker extends Worker {
int call = 0;
String max_id = null;
MastodonTimelinesService mastodonTimelinesService = init(account.instance);
+ int inserted = 0;
+ int updated = 0;
+ int failed = 0;
+ int count = 0;
while (canContinue && call < max_calls) {
Call<List<Status>> homeCall = mastodonTimelinesService.getHome(account.token, account.instance, max_id, null, status_per_page, null);
if (homeCall != null) {
@@ -170,6 +175,7 @@ public class FetchHomeWorker extends Worker {
if (homeResponse.isSuccessful()) {
List<Status> statusList = homeResponse.body();
if (statusList != null && statusList.size() > 0) {
+ count += statusList.size();
for (Status status : statusList) {
StatusCache statusCacheDAO = new StatusCache(getApplicationContext());
StatusCache statusCache = new StatusCache();
@@ -179,9 +185,16 @@ public class FetchHomeWorker extends Worker {
statusCache.type = Timeline.TimeLineEnum.HOME;
statusCache.status_id = status.id;
try {
- statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue());
+ int val = statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue());
+ if (val == 1) {
+ inserted++;
+ }
+ if (val == 0) {
+ updated++;
+ }
} catch (DBException e) {
e.printStackTrace();
+ failed++;
}
}
Pagination pagination = MastodonHelper.getPagination(homeResponse.headers());
@@ -205,7 +218,20 @@ public class FetchHomeWorker extends Worker {
}
call++;
}
-
+ HomeFetchLog homeFetchLog = new HomeFetchLog();
+ homeFetchLog.user_id = account.user_id;
+ homeFetchLog.instance = account.instance;
+ String frequency = prefs.getString(context.getString(R.string.SET_FETCH_HOME_DELAY_VALUE) + account.user_id + account.instance, "60");
+ homeFetchLog.frequency = Integer.parseInt(frequency);
+ homeFetchLog.fetched_count = count;
+ homeFetchLog.inserted = inserted;
+ homeFetchLog.updated = updated;
+ homeFetchLog.failed = failed;
+ try {
+ new HomeFetchLog(context).insert(homeFetchLog);
+ } catch (DBException e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderBottomMenuAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderBottomMenuAdapter.java
index 9cc09a32e..9f5415f4f 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderBottomMenuAdapter.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ReorderBottomMenuAdapter.java
@@ -28,6 +28,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import app.fedilab.android.R;
+import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.databinding.DrawerReorderBinding;
import app.fedilab.android.mastodon.activities.ReorderTimelinesActivity;
import app.fedilab.android.mastodon.client.entities.app.BottomMenu;
@@ -100,6 +101,8 @@ public class ReorderBottomMenuAdapter extends RecyclerView.Adapter<RecyclerView.
holder.binding.hide.setOnClickListener(v -> {
bottomMenu.bottom_menu.get(position).visible = !bottomMenu.bottom_menu.get(position).visible;
+ bottomMenu.user_id = MainActivity.currentUserID;
+ bottomMenu.instance = MainActivity.currentInstance;
if (bottomMenu.bottom_menu.get(position).visible) {
holder.binding.hide.setImageResource(R.drawable.ic_baseline_visibility_24);
} else {
diff --git a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java
index beb6a62b6..fcb096b30 100644
--- a/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java
+++ b/app/src/main/java/app/fedilab/android/sqlite/Sqlite.java
@@ -23,7 +23,7 @@ import android.database.sqlite.SQLiteOpenHelper;
public class Sqlite extends SQLiteOpenHelper {
- public static final int DB_VERSION = 9;
+ public static final int DB_VERSION = 10;
public static final String DB_NAME = "fedilab_db";
//Table of owned accounts
@@ -93,6 +93,15 @@ public class Sqlite extends SQLiteOpenHelper {
public static final String COL_ABOUT = "ABOUT";
public static final String COL_USER_INSTANCE = "USER_INSTANCE";
+ //Home fetch logs
+ public static final String TABLE_HOME_FETCH_LOGS = "TABLE_HOME_FETCH_LOGS";
+ public static final String COL_INSERTED = "INSERTED";
+ public static final String COL_UPDATED = "UPDATED";
+ public static final String COL_FAILED = "FAILED";
+ public static final String COL_FREQUENCY = "FREQUENCY";
+ public static final String COL_FETCHED_COUNT = "FETCHED_COUNT";
+
+
private static final String CREATE_TABLE_USER_ACCOUNT = "CREATE TABLE " + TABLE_USER_ACCOUNT + " ("
+ COL_USER_ID + " TEXT NOT NULL, "
+ COL_INSTANCE + " TEXT NOT NULL, "
@@ -192,8 +201,8 @@ public class Sqlite extends SQLiteOpenHelper {
+ COL_USER_ID + " TEXT NOT NULL, "
+ COL_TYPE + " TEXT NOT NULL, "
+ COL_MUTED_ACCOUNTS + " TEXT)";
- public static SQLiteDatabase db;
- private static Sqlite sInstance;
+
+
private final String CREATE_TABLE_STORED_INSTANCES = "CREATE TABLE "
+ TABLE_BOOKMARKED_INSTANCES + "("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
@@ -202,6 +211,22 @@ public class Sqlite extends SQLiteOpenHelper {
+ COL_ABOUT + " TEXT NOT NULL, "
+ COL_USER_INSTANCE + " TEXT NOT NULL)";
+
+ private static final String CREATE_TABLE_HOME_FETCH_LOGS = "CREATE TABLE IF NOT EXISTS " + TABLE_HOME_FETCH_LOGS + " ("
+ + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ + COL_INSTANCE + " TEXT NOT NULL, "
+ + COL_USER_ID + " TEXT NOT NULL, "
+ + COL_FETCHED_COUNT + " INTEGER NOT NULL DEFAULT 0, "
+ + COL_INSERTED + " INTEGER NOT NULL DEFAULT 0, "
+ + COL_UPDATED + " INTEGER NOT NULL DEFAULT 0, "
+ + COL_FAILED + " INTEGER NOT NULL DEFAULT 0, "
+ + COL_FREQUENCY + " INTEGER NOT NULL DEFAULT 0, "
+ + COL_CREATED_AT + " TEXT NOT NULL)";
+
+ public static SQLiteDatabase db;
+ private static Sqlite sInstance;
+
+
public Sqlite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@@ -229,6 +254,7 @@ public class Sqlite extends SQLiteOpenHelper {
db.execSQL(CREATE_DOMAINS_TRACKING);
db.execSQL(CREATE_TABLE_MUTED);
db.execSQL(CREATE_TABLE_STORED_INSTANCES);
+ db.execSQL(CREATE_TABLE_HOME_FETCH_LOGS);
}
@Override
@@ -257,6 +283,8 @@ public class Sqlite extends SQLiteOpenHelper {
db.execSQL(CREATE_TABLE_MUTED);
case 8:
db.execSQL(CREATE_TABLE_STORED_INSTANCES);
+ case 9:
+ db.execSQL(CREATE_TABLE_HOME_FETCH_LOGS);
default:
break;
}