mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2024-12-23 01:00:04 +02:00
Remove from cache deleted statuses
This commit is contained in:
parent
84d75b6939
commit
8e33d57a19
4 changed files with 149 additions and 0 deletions
|
@ -159,6 +159,73 @@ public class QuickLoad {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a status in quickload
|
||||||
|
*
|
||||||
|
* @param account {@link Account}
|
||||||
|
* @param id - String id of the status
|
||||||
|
* @throws DBException exception with database
|
||||||
|
*/
|
||||||
|
public void deleteStatus(Account account, String id) throws DBException {
|
||||||
|
if (db == null) {
|
||||||
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
|
}
|
||||||
|
|
||||||
|
QuickLoad homeQuickLoad = getSavedValue(account, Timeline.TimeLineEnum.HOME, null);
|
||||||
|
QuickLoad localQuickLoad = getSavedValue(account, Timeline.TimeLineEnum.LOCAL, null);
|
||||||
|
QuickLoad publicQuickLoad = getSavedValue(account, Timeline.TimeLineEnum.PUBLIC, null);
|
||||||
|
|
||||||
|
for (Status status : homeQuickLoad.statuses) {
|
||||||
|
if (status.id.equals(id)) {
|
||||||
|
homeQuickLoad.statuses.remove(status);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Status status : localQuickLoad.statuses) {
|
||||||
|
if (status.id.equals(id)) {
|
||||||
|
localQuickLoad.statuses.remove(status);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (Status status : publicQuickLoad.statuses) {
|
||||||
|
if (status.id.equals(id)) {
|
||||||
|
publicQuickLoad.statuses.remove(status);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ContentValues valuesHome = new ContentValues();
|
||||||
|
valuesHome.put(Sqlite.COL_STATUSES, StatusDraft.mastodonStatusListToStringStorage(homeQuickLoad.statuses));
|
||||||
|
//Inserts token
|
||||||
|
try {
|
||||||
|
db.update(Sqlite.TABLE_QUICK_LOAD,
|
||||||
|
valuesHome, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =? AND " + Sqlite.COL_SLUG + "=?",
|
||||||
|
new String[]{homeQuickLoad.user_id, homeQuickLoad.instance, homeQuickLoad.slug});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
ContentValues valuesLocal = new ContentValues();
|
||||||
|
valuesLocal.put(Sqlite.COL_STATUSES, StatusDraft.mastodonStatusListToStringStorage(homeQuickLoad.statuses));
|
||||||
|
//Inserts token
|
||||||
|
try {
|
||||||
|
db.update(Sqlite.TABLE_QUICK_LOAD,
|
||||||
|
valuesLocal, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =? AND " + Sqlite.COL_SLUG + "=?",
|
||||||
|
new String[]{homeQuickLoad.user_id, homeQuickLoad.instance, homeQuickLoad.slug});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
ContentValues valuesPublic = new ContentValues();
|
||||||
|
valuesPublic.put(Sqlite.COL_STATUSES, StatusDraft.mastodonStatusListToStringStorage(homeQuickLoad.statuses));
|
||||||
|
//Inserts token
|
||||||
|
try {
|
||||||
|
db.update(Sqlite.TABLE_QUICK_LOAD,
|
||||||
|
valuesPublic, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =? AND " + Sqlite.COL_SLUG + "=?",
|
||||||
|
new String[]{homeQuickLoad.user_id, homeQuickLoad.instance, homeQuickLoad.slug});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves saved values
|
* Retrieves saved values
|
||||||
*
|
*
|
||||||
|
@ -182,6 +249,29 @@ public class QuickLoad {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves saved values
|
||||||
|
*
|
||||||
|
* @param timeLineType - Timeline.TimeLineEnum
|
||||||
|
* @param ident - the name for pinned timeline
|
||||||
|
* @return SavedValues
|
||||||
|
*/
|
||||||
|
public QuickLoad getSavedValue(Account account, Timeline.TimeLineEnum timeLineType, String ident) {
|
||||||
|
if (cannotBeStored(timeLineType)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String key = timeLineType.getValue();
|
||||||
|
if (ident != null) {
|
||||||
|
key += "|" + ident;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return get(key, account);
|
||||||
|
} catch (DBException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Purge the list to avoid long list of Statuses in db
|
* Purge the list to avoid long list of Statuses in db
|
||||||
*
|
*
|
||||||
|
@ -240,6 +330,25 @@ public class QuickLoad {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get paginated statuses from db
|
||||||
|
*
|
||||||
|
* @return Statuses
|
||||||
|
* @throws DBException - throws a db exception
|
||||||
|
*/
|
||||||
|
private QuickLoad get(String slug, Account account) throws DBException {
|
||||||
|
if (db == null) {
|
||||||
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Cursor c = db.query(Sqlite.TABLE_QUICK_LOAD, null, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =? AND " + Sqlite.COL_SLUG + "=?",
|
||||||
|
new String[]{account.user_id, account.instance, slug}, null, null, null, "1");
|
||||||
|
return cursorToQuickLoad(c);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a cursor to QuickLoad
|
* Convert a cursor to QuickLoad
|
||||||
|
|
|
@ -193,6 +193,29 @@ public class StatusCache {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete a status in db
|
||||||
|
*
|
||||||
|
* @param instance - String instance
|
||||||
|
* @param id - String status id
|
||||||
|
* @return long - db id
|
||||||
|
* @throws DBException exception with database
|
||||||
|
*/
|
||||||
|
public long deleteStatus(String instance, String id) throws DBException {
|
||||||
|
if (db == null) {
|
||||||
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return db.delete(Sqlite.TABLE_STATUS_CACHE,
|
||||||
|
Sqlite.COL_STATUS_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =?",
|
||||||
|
new String[]{id, instance});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get paginated statuses from db
|
* Get paginated statuses from db
|
||||||
*
|
*
|
||||||
|
|
|
@ -1201,6 +1201,10 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
StatusDraft statusDraft = new StatusDraft();
|
StatusDraft statusDraft = new StatusDraft();
|
||||||
statusDraft.statusDraftList = new ArrayList<>();
|
statusDraft.statusDraftList = new ArrayList<>();
|
||||||
statusDraft.statusReplyList = new ArrayList<>();
|
statusDraft.statusReplyList = new ArrayList<>();
|
||||||
|
if (statusDeleted == null) {
|
||||||
|
Toasty.error(context, context.getString(R.string.toast_error), Toasty.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
statusDeleted.id = null;
|
statusDeleted.id = null;
|
||||||
statusDraft.statusDraftList.add(statusDeleted);
|
statusDraft.statusDraftList.add(statusDeleted);
|
||||||
intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft);
|
intent.putExtra(Helper.ARG_STATUS_DRAFT, statusDraft);
|
||||||
|
|
|
@ -31,6 +31,8 @@ import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import app.fedilab.android.R;
|
import app.fedilab.android.R;
|
||||||
|
import app.fedilab.android.client.entities.QuickLoad;
|
||||||
|
import app.fedilab.android.client.entities.StatusCache;
|
||||||
import app.fedilab.android.client.mastodon.MastodonStatusesService;
|
import app.fedilab.android.client.mastodon.MastodonStatusesService;
|
||||||
import app.fedilab.android.client.mastodon.entities.Account;
|
import app.fedilab.android.client.mastodon.entities.Account;
|
||||||
import app.fedilab.android.client.mastodon.entities.Accounts;
|
import app.fedilab.android.client.mastodon.entities.Accounts;
|
||||||
|
@ -41,6 +43,7 @@ import app.fedilab.android.client.mastodon.entities.Poll;
|
||||||
import app.fedilab.android.client.mastodon.entities.ScheduledStatus;
|
import app.fedilab.android.client.mastodon.entities.ScheduledStatus;
|
||||||
import app.fedilab.android.client.mastodon.entities.ScheduledStatuses;
|
import app.fedilab.android.client.mastodon.entities.ScheduledStatuses;
|
||||||
import app.fedilab.android.client.mastodon.entities.Status;
|
import app.fedilab.android.client.mastodon.entities.Status;
|
||||||
|
import app.fedilab.android.exception.DBException;
|
||||||
import app.fedilab.android.helper.Helper;
|
import app.fedilab.android.helper.Helper;
|
||||||
import app.fedilab.android.helper.MastodonHelper;
|
import app.fedilab.android.helper.MastodonHelper;
|
||||||
import app.fedilab.android.helper.SpannableHelper;
|
import app.fedilab.android.helper.SpannableHelper;
|
||||||
|
@ -312,6 +315,16 @@ public class StatusesVM extends AndroidViewModel {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//The status must also be deleted in cache
|
||||||
|
try {
|
||||||
|
app.fedilab.android.client.entities.Account account = new app.fedilab.android.client.entities.Account(getApplication().getApplicationContext()).getAccountByToken(token);
|
||||||
|
new StatusCache(getApplication().getApplicationContext()).deleteStatus(id, account.instance);
|
||||||
|
new QuickLoad(getApplication().getApplicationContext()).deleteStatus(account, id);
|
||||||
|
} catch (DBException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||||
Status finalStatus = status;
|
Status finalStatus = status;
|
||||||
Runnable myRunnable = () -> statusMutableLiveData.setValue(finalStatus);
|
Runnable myRunnable = () -> statusMutableLiveData.setValue(finalStatus);
|
||||||
|
|
Loading…
Reference in a new issue