Bookmark API support

This commit is contained in:
tom79 2019-11-14 18:58:58 +01:00
parent 8775f4fe5a
commit a1e0951cbf
5 changed files with 26 additions and 3 deletions

View File

@ -224,7 +224,9 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPostExecute(Void result) {
listener.onPostAction(statusCode, apiAction, targetedId, error);
if( listener != null) {
listener.onPostAction(statusCode, apiAction, targetedId, error);
}
}
}

View File

@ -141,6 +141,8 @@ public class API {
public enum StatusAction {
FAVOURITE,
UNFAVOURITE,
BOOKMARK,
UNBOOKMARK,
REBLOG,
UNREBLOG,
MUTE,
@ -2686,6 +2688,12 @@ public class API {
case UNFAVOURITE:
action = String.format("/statuses/%s/unfavourite", targetedId);
break;
case BOOKMARK:
action = String.format("/statuses/%s/bookmark", targetedId);
break;
case UNBOOKMARK:
action = String.format("/statuses/%s/unbookmark", targetedId);
break;
case REBLOG:
action = String.format("/statuses/%s/reblog", targetedId);
break;

View File

@ -4189,17 +4189,22 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
private void bookmark(Status status) {
if (type != RetrieveFeedsAsyncTask.Type.CACHE_BOOKMARKS) {
status.setBookmarked(!status.isBookmarked());
try {
final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
API.StatusAction doAction;
if (status.isBookmarked()) {
new StatusCacheDAO(context, db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, status);
doAction = API.StatusAction.BOOKMARK;
Toasty.success(context, context.getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show();
} else {
new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status);
doAction = API.StatusAction.UNBOOKMARK;
Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show();
}
new PostActionAsyncTask(context, doAction, status.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
notifyStatusChanged(status);
} catch (Exception e) {
e.printStackTrace();
@ -4213,6 +4218,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
statusListAdapter.notifyItemRemoved(position);
final SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, statustmp);
new PostActionAsyncTask(context, API.StatusAction.UNBOOKMARK, statustmp.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show();
break;
}

View File

@ -482,18 +482,21 @@ public class CrossActions {
public static void doCrossBookmark(final Context context, final Status status, StatusListAdapter statusListAdapter) {
List<Account> accounts = connectedAccounts(context, status, false);
API.StatusAction doAction;
if (accounts.size() == 1) {
status.setBookmarked(!status.isBookmarked());
try {
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
if (status.isBookmarked()) {
doAction = API.StatusAction.BOOKMARK;
new StatusCacheDAO(context, db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, status);
Toasty.success(context, context.getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show();
} else {
doAction = API.StatusAction.UNBOOKMARK;
new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status);
Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show();
}
new PostActionAsyncTask(context, accounts.get(0), status, doAction, null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
statusListAdapter.notifyStatusChanged(status);
} catch (Exception e) {
e.printStackTrace();
@ -546,13 +549,17 @@ public class CrossActions {
if (statuses != null && statuses.size() > 0) {
final SQLiteDatabase db = Sqlite.getInstance(contextReference.get(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
app.fedilab.android.client.Entities.Status statusBookmarked = new StatusCacheDAO(contextReference.get(), db).getStatus(StatusCacheDAO.BOOKMARK_CACHE, statuses.get(0).getId(), account.getId(), account.getInstance());
API.StatusAction doAction;
if (statusBookmarked == null) {
doAction = API.StatusAction.BOOKMARK;
new StatusCacheDAO(contextReference.get(), db).insertStatus(StatusCacheDAO.BOOKMARK_CACHE, statuses.get(0), account.getId(), account.getInstance());
Toasty.success(contextReference.get(), contextReference.get().getString(R.string.status_bookmarked), Toast.LENGTH_LONG).show();
} else {
doAction = API.StatusAction.UNBOOKMARK;
new StatusCacheDAO(contextReference.get(), db).remove(StatusCacheDAO.BOOKMARK_CACHE, statuses.get(0), account.getId(), account.getInstance());
Toasty.success(contextReference.get(), contextReference.get().getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show();
}
new PostActionAsyncTask(context, account, status, doAction, null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
statusListAdapter.notifyStatusChanged(statuses.get(0));
}
}

View File

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="m15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM1,10v2h8v-2zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"
android:pathData="m9.6992,12c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4c2.21,0 4,1.79 4,4s-1.79,4 -4,4zM22.3012,10v2.3752h-6.6017v-2.3752zM9.6992,14c2.67,0 8,1.34 8,4v2h-16v-2c0,-2.66 5.33,-4 8,-4z"
android:fillColor="#fff"/>
</vector>