bookmarks

This commit is contained in:
tom79 2019-11-15 13:58:06 +01:00
parent 528d7b20d2
commit af79b1b1cd
4 changed files with 21 additions and 47 deletions

View File

@ -5017,6 +5017,11 @@ public class API {
} catch (Exception e) { } catch (Exception e) {
status.setFavourited(false); status.setFavourited(false);
} }
if( resobj.has("bookmarked") && !resobj.isNull("bookmarked")){
status.setBookmarked(true);
}else{
status.setBookmarked(false);
}
try { try {
if (resobj.getJSONObject("renoteId") != null && !resobj.getJSONObject("renoteId").toString().equals("null")) if (resobj.getJSONObject("renoteId") != null && !resobj.getJSONObject("renoteId").toString().equals("null"))
status.setReblog(parseStatuses(context, resobj.getJSONObject("renote"))); status.setReblog(parseStatuses(context, resobj.getJSONObject("renote")));

View File

@ -1668,6 +1668,9 @@ public class Status implements Parcelable {
} }
public boolean isBookmarked() { public boolean isBookmarked() {
if( this.getReblog() != null && this.getReblog().isBookmarked()){
bookmarked = true;
}
return bookmarked; return bookmarked;
} }

View File

@ -1459,12 +1459,12 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}); });
holder.custom_feature_bookmark.setOnClickListener(view -> { holder.custom_feature_bookmark.setOnClickListener(view -> {
bookmark(status); CrossActions.doCrossBookmark(context, status, statusListAdapter, true);
status.setCustomFeaturesDisplayed(false); status.setCustomFeaturesDisplayed(false);
notifyStatusChanged(status); notifyStatusChanged(status);
}); });
holder.custom_feature_bookmark.setOnLongClickListener(view -> { holder.custom_feature_bookmark.setOnLongClickListener(view -> {
CrossActions.doCrossBookmark(context, status, statusListAdapter); CrossActions.doCrossBookmark(context, status, statusListAdapter, false);
status.setCustomFeaturesDisplayed(false); status.setCustomFeaturesDisplayed(false);
notifyStatusChanged(status); notifyStatusChanged(status);
return false; return false;
@ -3095,7 +3095,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
itemBookmark.getActionView().setOnLongClickListener(new View.OnLongClickListener() { itemBookmark.getActionView().setOnLongClickListener(new View.OnLongClickListener() {
@Override @Override
public boolean onLongClick(View v) { public boolean onLongClick(View v) {
CrossActions.doCrossBookmark(context, status, statusListAdapter); CrossActions.doCrossBookmark(context, status, statusListAdapter, true);
return true; return true;
} }
}); });
@ -4188,45 +4188,6 @@ 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();
Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show();
}
} else {
int position = 0;
for (Status statustmp : statuses) {
if (statustmp.getId().equals(status.getId())) {
statuses.remove(status);
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;
}
position++;
}
}
}
@Override @Override
public void onRetrieveFeeds(APIResponse apiResponse) { public void onRetrieveFeeds(APIResponse apiResponse) {

View File

@ -480,10 +480,14 @@ public class CrossActions {
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} }
public static void doCrossBookmark(final Context context, final Status status, StatusListAdapter statusListAdapter) { public static void doCrossBookmark(final Context context, Status status, StatusListAdapter statusListAdapter, boolean limitedToOwner) {
List<Account> accounts = connectedAccounts(context, status, false); List<Account> accounts = connectedAccounts(context, status, false);
API.StatusAction doAction; API.StatusAction doAction;
if (accounts.size() == 1) { //Only bookmark the initial status
if( status.getReblog() != null){
status = status.getReblog();
}
if (accounts.size() == 1 || limitedToOwner) {
status.setBookmarked(!status.isBookmarked()); status.setBookmarked(!status.isBookmarked());
try { try {
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
@ -496,7 +500,7 @@ public class CrossActions {
new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status); new StatusCacheDAO(context, db).remove(StatusCacheDAO.BOOKMARK_CACHE, status);
Toasty.success(context, context.getString(R.string.status_unbookmarked), Toast.LENGTH_LONG).show(); 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); new PostActionAsyncTask(context, doAction, status.getId(), null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
statusListAdapter.notifyStatusChanged(status); statusListAdapter.notifyStatusChanged(status);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -518,6 +522,7 @@ public class CrossActions {
dialog.dismiss(); dialog.dismiss();
} }
}); });
Status finalStatus = status;
builderSingle.setAdapter(accountsSearchAdapter, new DialogInterface.OnClickListener() { builderSingle.setAdapter(accountsSearchAdapter, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(final DialogInterface dialog, int which) { public void onClick(final DialogInterface dialog, int which) {
@ -534,7 +539,7 @@ public class CrossActions {
@Override @Override
protected Void doInBackground(Void... voids) { protected Void doInBackground(Void... voids) {
API api = new API(contextReference.get(), account.getInstance(), account.getToken()); API api = new API(contextReference.get(), account.getInstance(), account.getToken());
APIResponse apiResponse = api.search(status.getUrl()); APIResponse apiResponse = api.search(finalStatus.getUrl());
response = apiResponse.getResults(); response = apiResponse.getResults();
return null; return null;
} }
@ -559,7 +564,7 @@ public class CrossActions {
new StatusCacheDAO(contextReference.get(), db).remove(StatusCacheDAO.BOOKMARK_CACHE, statuses.get(0), account.getId(), account.getInstance()); 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(); 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); new PostActionAsyncTask(context, account, finalStatus, doAction, null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
statusListAdapter.notifyStatusChanged(statuses.get(0)); statusListAdapter.notifyStatusChanged(statuses.get(0));
} }
} }