summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2023-02-04 11:23:31 +0100
committerThomas <tschneider.ac@gmail.com>2023-02-04 11:23:31 +0100
commit8977990fea9dcbfe17db2a92208de7b9e50af3ff (patch)
treeac4890c3c7c855ccecde8bdb7331f815b28229bf
parentb64fd393e96c8feefd80409166feaf403d4de15e (diff)
Cache messages
-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/jobs/FetchHomeWorker.java50
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentHomeCacheSettings.java10
-rw-r--r--app/src/main/java/app/fedilab/android/sqlite/Sqlite.java16
4 files changed, 21 insertions, 141 deletions
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
deleted file mode 100644
index dd6bfe37b..000000000
--- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/app/HomeFetchLog.java
+++ /dev/null
@@ -1,86 +0,0 @@
-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/jobs/FetchHomeWorker.java b/app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java
index e17b6f5a3..5b2e899a6 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,7 +46,6 @@ 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;
@@ -77,12 +76,13 @@ public class FetchHomeWorker extends Worker {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
}
- public static void setRepeatHome(Context context, BaseAccount account) {
+ public static void setRepeatHome(Context context, BaseAccount account, Data inputData) {
WorkManager.getInstance(context).cancelAllWorkByTag(Helper.WORKER_REFRESH_HOME + account.user_id + account.instance);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String value = prefs.getString(context.getString(R.string.SET_FETCH_HOME_DELAY_VALUE) + account.user_id + account.instance, "60");
PeriodicWorkRequest notificationPeriodic = new PeriodicWorkRequest.Builder(FetchHomeWorker.class, Long.parseLong(value), TimeUnit.MINUTES)
- .addTag(Helper.WORKER_REFRESH_HOME)
+ .setInputData(inputData)
+ .addTag(Helper.WORKER_REFRESH_HOME + account.user_id + account.instance)
.build();
WorkManager.getInstance(context).enqueueUniquePeriodicWork(Helper.WORKER_REFRESH_HOME + account.user_id + account.instance, ExistingPeriodicWorkPolicy.REPLACE, notificationPeriodic);
}
@@ -135,10 +135,15 @@ public class FetchHomeWorker extends Worker {
@NonNull
@Override
public Result doWork() {
+
setForegroundAsync(createForegroundInfo());
+
+ String instance = getInputData().getString(Helper.ARG_INSTANCE);
+ String userId = getInputData().getString(Helper.ARG_USER_ID);
+
try {
- List<BaseAccount> accounts = new Account(getApplicationContext()).getCrossAccounts();
- for (BaseAccount account : accounts) {
+ BaseAccount account = new Account(getApplicationContext()).getUniqAccount(userId, instance);
+ if (account != null) {
try {
fetchHome(getApplicationContext(), account);
} catch (IOException e) {
@@ -164,18 +169,13 @@ 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);
+ Call<List<Status>> homeCall = mastodonTimelinesService.getHome(account.token, max_id, null, null, status_per_page, null);
if (homeCall != null) {
Response<List<Status>> homeResponse = homeCall.execute();
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();
@@ -185,16 +185,9 @@ public class FetchHomeWorker extends Worker {
statusCache.type = Timeline.TimeLineEnum.HOME;
statusCache.status_id = status.id;
try {
- int val = statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue());
- if (val == 1) {
- inserted++;
- }
- if (val == 0) {
- updated++;
- }
+ statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue());
} catch (DBException e) {
e.printStackTrace();
- failed = -1;
}
}
Pagination pagination = MastodonHelper.getPagination(homeResponse.headers());
@@ -202,18 +195,13 @@ public class FetchHomeWorker extends Worker {
max_id = pagination.max_id;
} else {
canContinue = false;
- failed = 4;
}
} else {
- failed = 3;
canContinue = false;
}
} else {
canContinue = false;
- failed = 2;
}
- } else {
- failed = 1;
}
//Pause between calls (1 second)
try {
@@ -223,20 +211,6 @@ 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/fragment/settings/FragmentHomeCacheSettings.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentHomeCacheSettings.java
index 78a889600..7cd2591b1 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentHomeCacheSettings.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentHomeCacheSettings.java
@@ -23,8 +23,10 @@ import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
+import androidx.work.Data;
import androidx.work.WorkManager;
+import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.R;
import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.mastodon.helper.Helper;
@@ -70,6 +72,10 @@ public class FragmentHomeCacheSettings extends PreferenceFragmentCompat implemen
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (getActivity() != null) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
+ Data inputData = new Data.Builder()
+ .putString(Helper.ARG_INSTANCE, BaseMainActivity.currentInstance)
+ .putString(Helper.ARG_USER_ID, BaseMainActivity.currentUserID)
+ .build();
if (key.compareToIgnoreCase(getString(R.string.SET_FETCH_HOME)) == 0) {
SharedPreferences.Editor editor = sharedpreferences.edit();
SwitchPreference SET_FETCH_HOME = findPreference(getString(R.string.SET_FETCH_HOME));
@@ -77,7 +83,7 @@ public class FragmentHomeCacheSettings extends PreferenceFragmentCompat implemen
editor.putBoolean(getString(R.string.SET_FETCH_HOME) + MainActivity.currentUserID + MainActivity.currentInstance, SET_FETCH_HOME.isChecked());
editor.commit();
if (SET_FETCH_HOME.isChecked()) {
- FetchHomeWorker.setRepeatHome(requireActivity(), MainActivity.currentAccount);
+ FetchHomeWorker.setRepeatHome(requireActivity(), MainActivity.currentAccount, inputData);
} else {
WorkManager.getInstance(requireActivity()).cancelAllWorkByTag(Helper.WORKER_REFRESH_HOME + MainActivity.currentUserID + MainActivity.currentInstance);
}
@@ -89,7 +95,7 @@ public class FragmentHomeCacheSettings extends PreferenceFragmentCompat implemen
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(getString(R.string.SET_FETCH_HOME_DELAY_VALUE) + MainActivity.currentUserID + MainActivity.currentInstance, SET_FETCH_HOME_DELAY_VALUE.getValue());
editor.commit();
- FetchHomeWorker.setRepeatHome(requireActivity(), MainActivity.currentAccount);
+ FetchHomeWorker.setRepeatHome(requireActivity(), MainActivity.currentAccount, inputData);
}
}
}
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 fcb096b30..4c158990f 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 = 10;
+ public static final int DB_VERSION = 9;
public static final String DB_NAME = "fedilab_db";
//Table of owned accounts
@@ -212,17 +212,6 @@ public class Sqlite extends SQLiteOpenHelper {
+ 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;
@@ -254,7 +243,6 @@ 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
@@ -283,8 +271,6 @@ 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;
}