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 dd6bfe37..00000000 --- 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 . */ - -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 e17b6f5a..5b2e899a 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 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> homeCall = mastodonTimelinesService.getHome(account.token, account.instance, max_id, null, status_per_page, null); + Call> homeCall = mastodonTimelinesService.getHome(account.token, max_id, null, null, status_per_page, null); if (homeCall != null) { Response> homeResponse = homeCall.execute(); if (homeResponse.isSuccessful()) { List 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 78a88960..7cd2591b 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 fcb096b3..4c158990 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; }