diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetBookmarks.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetBookmarks.java new file mode 100644 index 000000000..fb1311225 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetBookmarks.java @@ -0,0 +1,52 @@ +package org.joinmastodon.android.api.requests.accounts; + +import androidx.annotation.NonNull; + +import com.google.gson.reflect.TypeToken; + +import org.joinmastodon.android.api.MastodonAPIRequest; +import org.joinmastodon.android.model.Status; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import okhttp3.Response; + +public class GetBookmarks extends MastodonAPIRequest>{ + private String maxId; + + public GetBookmarks(String maxID, String minID, int limit){ + super(HttpMethod.GET, "/bookmarks", new TypeToken<>(){}); + if(maxID!=null) + addQueryParameter("max_id", maxID); + if(minID!=null) + addQueryParameter("min_id", minID); + if(limit>0) + addQueryParameter("limit", ""+limit); + } + + @Override + public void validateAndPostprocessResponse(List respObj, Response httpResponse) throws IOException { + super.validateAndPostprocessResponse(respObj, httpResponse); + // ; rel="next", + // ; rel="prev" + String link=httpResponse.header("link"); + // parsing link header by hand; using a library would be cleaner + // (also, the functionality should be part of the max id logics and implemented in MastodonAPIRequest) + if(link==null) return; + String maxIdEq="max_id="; + for(String s : link.split(",")) { + if(s.contains("rel=\"next\"")) { + int start=s.indexOf(maxIdEq)+maxIdEq.length(); + int end=s.indexOf('>'); + if(start<0 || start>end) return; + this.maxId=s.substring(start, end); + } + } + } + + public String getMaxId() { + return maxId; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BookmarksListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BookmarksListFragment.java new file mode 100644 index 000000000..cd26bd980 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BookmarksListFragment.java @@ -0,0 +1,53 @@ +package org.joinmastodon.android.fragments; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.joinmastodon.android.R; +import org.joinmastodon.android.api.requests.accounts.GetBookmarks; +import org.joinmastodon.android.api.session.AccountSession; +import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.model.Account; +import org.joinmastodon.android.model.Status; + +import java.util.List; + +import me.grishka.appkit.api.SimpleCallback; + +public class BookmarksListFragment extends StatusListFragment{ + + private String accountID; + private Account self; + private String lastMaxId=null; + + @Override + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + accountID=getArguments().getString("account"); + AccountSession session=AccountSessionManager.getInstance().getAccount(accountID); + self=session.self; + setTitle(R.string.bookmarks); + } + + @Override + protected void onShown(){ + super.onShown(); + if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading) + loadData(); + } + + @Override + protected void doLoadData(int offset, int count) { + GetBookmarks b=new GetBookmarks(offset>0 ? lastMaxId : null, null, count); + currentRequest=b.setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(List result){ + onDataLoaded(result, b.getMaxId()!=null); + lastMaxId=b.getMaxId(); + } + }) + .exec(accountID); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 724396c61..d34e7b4de 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -516,7 +516,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList if(isOwnProfile){ for(int i=0;i + \ No newline at end of file diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 9f172dec6..ff37c0ee6 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -279,6 +279,7 @@ Favorite Share Bookmark + Bookmarks Media without description Add media Add a poll