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) {
status.setFavourited(false);
}
if( resobj.has("bookmarked") && !resobj.isNull("bookmarked")){
status.setBookmarked(true);
}else{
status.setBookmarked(false);
}
try {
if (resobj.getJSONObject("renoteId") != null && !resobj.getJSONObject("renoteId").toString().equals("null"))
status.setReblog(parseStatuses(context, resobj.getJSONObject("renote")));

View File

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

View File

@ -1459,12 +1459,12 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
});
holder.custom_feature_bookmark.setOnClickListener(view -> {
bookmark(status);
CrossActions.doCrossBookmark(context, status, statusListAdapter, true);
status.setCustomFeaturesDisplayed(false);
notifyStatusChanged(status);
});
holder.custom_feature_bookmark.setOnLongClickListener(view -> {
CrossActions.doCrossBookmark(context, status, statusListAdapter);
CrossActions.doCrossBookmark(context, status, statusListAdapter, false);
status.setCustomFeaturesDisplayed(false);
notifyStatusChanged(status);
return false;
@ -3095,7 +3095,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
itemBookmark.getActionView().setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
CrossActions.doCrossBookmark(context, status, statusListAdapter);
CrossActions.doCrossBookmark(context, status, statusListAdapter, 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
public void onRetrieveFeeds(APIResponse apiResponse) {

View File

@ -480,10 +480,14 @@ public class CrossActions {
}.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);
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());
try {
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);
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);
} catch (Exception e) {
e.printStackTrace();
@ -518,6 +522,7 @@ public class CrossActions {
dialog.dismiss();
}
});
Status finalStatus = status;
builderSingle.setAdapter(accountsSearchAdapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, int which) {
@ -534,7 +539,7 @@ public class CrossActions {
@Override
protected Void doInBackground(Void... voids) {
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();
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());
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));
}
}