mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2025-01-07 00:20:08 +02:00
Improve cache clear
This commit is contained in:
parent
13f180e6f3
commit
f66fda968e
5 changed files with 82 additions and 8 deletions
|
@ -133,7 +133,17 @@ public class CacheActivity extends BaseActivity {
|
||||||
size = size / 1000000.0f;
|
size = size / 1000000.0f;
|
||||||
}
|
}
|
||||||
binding.fileCacheSize.setText(String.format("%s %s", String.format(Locale.getDefault(), "%.2f", size), getString(R.string.cache_units)));
|
binding.fileCacheSize.setText(String.format("%s %s", String.format(Locale.getDefault(), "%.2f", size), getString(R.string.cache_units)));
|
||||||
cacheAdapter.notifyDataSetChanged();
|
AlertDialog.Builder restartBuilder = new AlertDialog.Builder(CacheActivity.this, Helper.dialogStyle());
|
||||||
|
restartBuilder.setMessage(getString(R.string.restart_the_app));
|
||||||
|
restartBuilder.setNegativeButton(R.string.no, (dialogRestart, whichRestart) -> {
|
||||||
|
recreate();
|
||||||
|
dialogRestart.dismiss();
|
||||||
|
});
|
||||||
|
restartBuilder.setPositiveButton(R.string.restart, (dialogRestart, whichRestart) -> {
|
||||||
|
dialogRestart.dismiss();
|
||||||
|
Helper.restart(CacheActivity.this);
|
||||||
|
});
|
||||||
|
restartBuilder.create().show();
|
||||||
}));
|
}));
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
});
|
});
|
||||||
|
|
|
@ -224,9 +224,10 @@ public class StatusCache {
|
||||||
throw new DBException("db is null. Wrong initialization.");
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
}
|
}
|
||||||
Cursor mCount = db.rawQuery("select count(*) from " + Sqlite.TABLE_STATUS_CACHE
|
Cursor mCount = db.rawQuery("select count(*) from " + Sqlite.TABLE_STATUS_CACHE
|
||||||
+ " where " + Sqlite.COL_TYPE + " = '" + Timeline.TimeLineEnum.HOME.getValue() + "'"
|
+ " where " + Sqlite.COL_TYPE + " = ?"
|
||||||
+ " AND " + Sqlite.COL_INSTANCE + " = '" + baseAccount.instance + "'"
|
+ " AND " + Sqlite.COL_INSTANCE + " = ?"
|
||||||
+ " AND " + Sqlite.COL_USER_ID + "= '" + baseAccount.user_id + "'", null);
|
+ " AND " + Sqlite.COL_USER_ID + "= ?",
|
||||||
|
new String[]{Timeline.TimeLineEnum.HOME.getValue(), baseAccount.instance, baseAccount.user_id});
|
||||||
mCount.moveToFirst();
|
mCount.moveToFirst();
|
||||||
int count = mCount.getInt(0);
|
int count = mCount.getInt(0);
|
||||||
mCount.close();
|
mCount.close();
|
||||||
|
@ -457,14 +458,35 @@ public class StatusCache {
|
||||||
* @return long - db id
|
* @return long - db id
|
||||||
* @throws DBException exception with database
|
* @throws DBException exception with database
|
||||||
*/
|
*/
|
||||||
public long deleteForAccount(BaseAccount account) throws DBException {
|
public long deleteHomeForAccount(BaseAccount account) throws DBException {
|
||||||
if (db == null) {
|
if (db == null) {
|
||||||
throw new DBException("db is null. Wrong initialization.");
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return db.delete(Sqlite.TABLE_STATUS_CACHE,
|
return db.delete(Sqlite.TABLE_STATUS_CACHE,
|
||||||
Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =?",
|
Sqlite.COL_TYPE + " = ? AND " + Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =?",
|
||||||
new String[]{account.user_id, account.instance});
|
new String[]{Timeline.TimeLineEnum.HOME.getValue(), account.user_id, account.instance});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete all cache for an account
|
||||||
|
*
|
||||||
|
* @param account - Account
|
||||||
|
* @return long - db id
|
||||||
|
* @throws DBException exception with database
|
||||||
|
*/
|
||||||
|
public long deleteOthersForAccount(BaseAccount account) throws DBException {
|
||||||
|
if (db == null) {
|
||||||
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return db.delete(Sqlite.TABLE_STATUS_CACHE,
|
||||||
|
Sqlite.COL_TYPE + " != ? AND " + Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =?",
|
||||||
|
new String[]{Timeline.TimeLineEnum.HOME.getValue(), account.user_id, account.instance});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -15,18 +15,24 @@ package app.fedilab.android.helper;
|
||||||
* see <http://www.gnu.org/licenses>. */
|
* see <http://www.gnu.org/licenses>. */
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import app.fedilab.android.R;
|
||||||
import app.fedilab.android.client.entities.app.BaseAccount;
|
import app.fedilab.android.client.entities.app.BaseAccount;
|
||||||
import app.fedilab.android.client.entities.app.CacheAccount;
|
import app.fedilab.android.client.entities.app.CacheAccount;
|
||||||
import app.fedilab.android.client.entities.app.StatusCache;
|
import app.fedilab.android.client.entities.app.StatusCache;
|
||||||
import app.fedilab.android.client.entities.app.StatusDraft;
|
import app.fedilab.android.client.entities.app.StatusDraft;
|
||||||
|
import app.fedilab.android.client.entities.app.Timeline;
|
||||||
import app.fedilab.android.exception.DBException;
|
import app.fedilab.android.exception.DBException;
|
||||||
|
|
||||||
public class CacheHelper {
|
public class CacheHelper {
|
||||||
|
@ -112,10 +118,29 @@ public class CacheHelper {
|
||||||
deleteDir(dir);
|
deleteDir(dir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||||
for (CacheAccount cacheAccount : cacheAccounts) {
|
for (CacheAccount cacheAccount : cacheAccounts) {
|
||||||
if (cacheAccount.clear_home) {
|
if (cacheAccount.clear_home) {
|
||||||
try {
|
try {
|
||||||
new StatusCache(context).deleteForAccount(cacheAccount.account);
|
new StatusCache(context).deleteHomeForAccount(cacheAccount.account);
|
||||||
|
editor.putString(context.getString(R.string.SET_INNER_MARKER) + cacheAccount.account.user_id + cacheAccount.account.instance + Timeline.TimeLineEnum.HOME.getValue(), null);
|
||||||
|
editor.apply();
|
||||||
|
} catch (DBException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cacheAccount.clear_other) {
|
||||||
|
try {
|
||||||
|
new StatusCache(context).deleteOthersForAccount(cacheAccount.account);
|
||||||
|
Map<String, ?> keys = sharedpreferences.getAll();
|
||||||
|
|
||||||
|
for (Map.Entry<String, ?> entry : keys.entrySet()) {
|
||||||
|
if (entry.getKey().startsWith(context.getString(R.string.SET_INNER_MARKER) + cacheAccount.account.user_id + cacheAccount.account.instance) && !entry.getKey().endsWith(Timeline.TimeLineEnum.HOME.getValue())) {
|
||||||
|
editor.putString(entry.getKey(), null);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (DBException e) {
|
} catch (DBException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
@ -1894,6 +1895,20 @@ public class Helper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restart the app
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
*/
|
||||||
|
public static void restart(Context context) {
|
||||||
|
Context ctx = context.getApplicationContext();
|
||||||
|
PackageManager pm = ctx.getPackageManager();
|
||||||
|
Intent intent = pm.getLaunchIntentForPackage(ctx.getPackageName());
|
||||||
|
Intent mainIntent = Intent.makeRestartActivityTask(intent.getComponent());
|
||||||
|
ctx.startActivity(mainIntent);
|
||||||
|
Runtime.getRuntime().exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
//Enum that described actions to replace inside a toot content
|
//Enum that described actions to replace inside a toot content
|
||||||
public enum PatternType {
|
public enum PatternType {
|
||||||
MENTION,
|
MENTION,
|
||||||
|
|
|
@ -1597,4 +1597,6 @@
|
||||||
<string name="account_silenced">Account silenced</string>
|
<string name="account_silenced">Account silenced</string>
|
||||||
<string name="report">Report</string>
|
<string name="report">Report</string>
|
||||||
<string name="state">State</string>
|
<string name="state">State</string>
|
||||||
|
<string name="restart_the_app">Restart the app?</string>
|
||||||
|
<string name="restart">Restart</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue