mirror of
				https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
				synced 2025-11-04 10:49:09 +01:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			master
			...
			api-rewrit
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9667383e27 | 
@@ -5,7 +5,7 @@ import androidx.annotation.NonNull;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.DeleteCommentDTO;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.DeletePostDTO;
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
 | 
			
		||||
@@ -19,7 +19,7 @@ public class DeleteThing {
 | 
			
		||||
    public static void deletePost(Retrofit retrofit, int post_id, String accessToken, DeleteThingListener deleteThingListener) {
 | 
			
		||||
        Map<String, String> params = new HashMap<>();
 | 
			
		||||
        params.put(APIUtils.ID_KEY, String.valueOf(post_id));
 | 
			
		||||
        retrofit.create(LemmyAPI.class).postDelete(new DeletePostDTO(post_id, true, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
        retrofit.create(LemmyBetaAPI.class).postDelete(new DeletePostDTO(post_id, true, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
@@ -39,7 +39,7 @@ public class DeleteThing {
 | 
			
		||||
    public static void deleteComment(Retrofit retrofit, int comment_id, String accessToken, DeleteThingListener deleteThingListener) {
 | 
			
		||||
        Map<String, String> params = new HashMap<>();
 | 
			
		||||
        params.put(APIUtils.ID_KEY, String.valueOf(comment_id));
 | 
			
		||||
        retrofit.create(LemmyAPI.class).commentDelete(new DeleteCommentDTO(comment_id, true, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
        retrofit.create(LemmyBetaAPI.class).commentDelete(new DeleteCommentDTO(comment_id, true, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
 | 
			
		||||
@@ -19,7 +19,7 @@ public class FetchSubscribedThing {
 | 
			
		||||
                                            final ArrayList<SubscribedUserData> subscribedUserData,
 | 
			
		||||
                                            final ArrayList<SubredditData> subredditData,
 | 
			
		||||
                                            final FetchSubscribedThingListener fetchSubscribedThingListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> subredditDataCall = api.listCommunities("Subscribed",null,page,null,accessToken);
 | 
			
		||||
        subredditDataCall.enqueue(new Callback<String>() {
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ import dagger.Module;
 | 
			
		||||
import dagger.Provides;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.LemmyCommentAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.LemmyPostAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.privatemessage.LemmyPrivateMessageAPI;
 | 
			
		||||
@@ -58,6 +59,12 @@ abstract class NetworkModule {
 | 
			
		||||
        return new RetrofitHolder(okHttpClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Provides
 | 
			
		||||
    @Singleton
 | 
			
		||||
    static ApiHandlerProvider provideApiHandlerProvider(@Named("base") OkHttpClient okHttpClient) {
 | 
			
		||||
        return new ApiHandlerProvider(okHttpClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*@Provides
 | 
			
		||||
    @Named("base")
 | 
			
		||||
    @Singleton
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import javax.inject.Named;
 | 
			
		||||
import eu.toldi.infinityforlemmy.account.Account;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.InboxActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.ParseComment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
@@ -182,7 +182,7 @@ public class PullNotificationWorker extends Worker {
 | 
			
		||||
        if (retryCount < 0) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        Call<String> call = mRetrofit.getRetrofit().create(LemmyAPI.class).userReplies("New", 1, 25, true, account.getAccessToken());
 | 
			
		||||
        Call<String> call = mRetrofit.getRetrofit().create(LemmyBetaAPI.class).userReplies("New", 1, 25, true, account.getAccessToken());
 | 
			
		||||
        Response<String> response = call.execute();
 | 
			
		||||
 | 
			
		||||
        if (response.isSuccessful()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,53 +0,0 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.SaveCommentDTO;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
import retrofit2.Response;
 | 
			
		||||
import retrofit2.Retrofit;
 | 
			
		||||
 | 
			
		||||
public class SaveComment implements SaveThing {
 | 
			
		||||
    @Override
 | 
			
		||||
    public void saveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
 | 
			
		||||
 | 
			
		||||
        retrofit.create(LemmyAPI.class).commentSave(new SaveCommentDTO(id, true, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    saveThingListener.success();
 | 
			
		||||
                } else {
 | 
			
		||||
                    saveThingListener.failed();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                saveThingListener.failed();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void unsaveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
 | 
			
		||||
 | 
			
		||||
        retrofit.create(LemmyAPI.class).commentSave(new SaveCommentDTO(id, false, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    saveThingListener.success();
 | 
			
		||||
                } else {
 | 
			
		||||
                    saveThingListener.failed();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                saveThingListener.failed();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,55 +0,0 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.SavePostDTO;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
import retrofit2.Response;
 | 
			
		||||
import retrofit2.Retrofit;
 | 
			
		||||
 | 
			
		||||
public class SavePost implements SaveThing {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void saveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        retrofit.create(LemmyAPI.class).postSave(new SavePostDTO(id, true, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    saveThingListener.success();
 | 
			
		||||
                } else {
 | 
			
		||||
                    saveThingListener.failed();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                saveThingListener.failed();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void unsaveThing(Retrofit retrofit, String accessToken, int id, SaveThingListener saveThingListener) {
 | 
			
		||||
 | 
			
		||||
        retrofit.create(LemmyAPI.class).postSave(new SavePostDTO(id, false, accessToken)).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    saveThingListener.success();
 | 
			
		||||
                } else {
 | 
			
		||||
                    saveThingListener.failed();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                saveThingListener.failed();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,136 +0,0 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.CommentVoteDTO;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.PostVoteDTO;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
import retrofit2.Retrofit;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by alex on 3/14/18.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class VoteThing {
 | 
			
		||||
 | 
			
		||||
    public static void votePost(Context context, final Retrofit retrofit, String accessToken,
 | 
			
		||||
                                final VoteThingListener voteThingListener, final int postID,
 | 
			
		||||
                                final int point, final int position) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Call<String> voteThingCall = api.postLike(new PostVoteDTO(postID, point, accessToken));
 | 
			
		||||
        voteThingCall.enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    voteThingListener.onVoteThingSuccess(position);
 | 
			
		||||
                } else {
 | 
			
		||||
                    voteThingListener.onVoteThingFail(position);
 | 
			
		||||
                    Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                voteThingListener.onVoteThingFail(position);
 | 
			
		||||
                Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void votePost(Context context, final Retrofit retrofit, String accessToken,
 | 
			
		||||
                                final VoteThingWithoutPositionListener voteThingWithoutPositionListener,
 | 
			
		||||
                                final int postID, final int point) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Call<String> voteThingCall = api.postLike(new PostVoteDTO(postID, point, accessToken));
 | 
			
		||||
        voteThingCall.enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    voteThingWithoutPositionListener.onVoteThingSuccess();
 | 
			
		||||
                } else {
 | 
			
		||||
                    voteThingWithoutPositionListener.onVoteThingFail();
 | 
			
		||||
                    Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                voteThingWithoutPositionListener.onVoteThingFail();
 | 
			
		||||
                Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void voteComment(Context context, final Retrofit retrofit, String accessToken,
 | 
			
		||||
                                   final VoteThingListener voteThingListener, final int commentId,
 | 
			
		||||
                                   final int point, final int position) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Call<String> voteThingCall = api.commentLike(new CommentVoteDTO(commentId, point, accessToken));
 | 
			
		||||
        voteThingCall.enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    voteThingListener.onVoteThingSuccess(position);
 | 
			
		||||
                } else {
 | 
			
		||||
                    voteThingListener.onVoteThingFail(position);
 | 
			
		||||
                    Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                voteThingListener.onVoteThingFail(position);
 | 
			
		||||
                Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void voteComment(Context context, final Retrofit retrofit, String accessToken,
 | 
			
		||||
                                   final VoteThingWithoutPositionListener voteThingWithoutPositionListener,
 | 
			
		||||
                                   final int commentId, final int point) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Call<String> voteThingCall = api.commentLike(new CommentVoteDTO(commentId, point, accessToken));
 | 
			
		||||
        voteThingCall.enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
                    voteThingWithoutPositionListener.onVoteThingSuccess();
 | 
			
		||||
                } else {
 | 
			
		||||
                    voteThingWithoutPositionListener.onVoteThingFail();
 | 
			
		||||
                    Toast.makeText(context, "Code " + response.code() + " Body: " + response.body(), Toast.LENGTH_LONG).show();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
 | 
			
		||||
                voteThingWithoutPositionListener.onVoteThingFail();
 | 
			
		||||
                Toast.makeText(context, "Network error " + "Body: " + t.getMessage(), Toast.LENGTH_LONG).show();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public interface VoteThingListener {
 | 
			
		||||
        void onVoteThingSuccess(int position);
 | 
			
		||||
 | 
			
		||||
        void onVoteThingFail(int position);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public interface VoteThingWithoutPositionListener {
 | 
			
		||||
        void onVoteThingSuccess();
 | 
			
		||||
 | 
			
		||||
        void onVoteThingFail();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -7,7 +7,7 @@ import org.json.JSONObject;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData;
 | 
			
		||||
@@ -21,9 +21,9 @@ import retrofit2.Retrofit;
 | 
			
		||||
public class FetchBlockedThings {
 | 
			
		||||
 | 
			
		||||
    public static void fetchBlockedThings(Retrofit mRetrofit, String accessToken, String accountName, FetchBlockedThingsListener fetchBlockedThingsListener) {
 | 
			
		||||
        LemmyAPI lemmyAPI = mRetrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI lemmyBetaAPI = mRetrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> call = lemmyAPI.getSiteInfo(accessToken);
 | 
			
		||||
        Call<String> call = lemmyBetaAPI.getSiteInfo(accessToken);
 | 
			
		||||
        call.enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(Call<String> call, retrofit2.Response<String> response) {
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.UploadedImage;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
 | 
			
		||||
@@ -227,7 +227,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
 | 
			
		||||
 | 
			
		||||
            String content = contentEditText.getText().toString();
 | 
			
		||||
 | 
			
		||||
            retrofit.getRetrofit().create(LemmyAPI.class).commentEdit(new EditCommentDTO(mCommentId, content, null, null, mAccessToken))
 | 
			
		||||
            retrofit.getRetrofit().create(LemmyBetaAPI.class).commentEdit(new EditCommentDTO(mCommentId, content, null, null, mAccessToken))
 | 
			
		||||
                    .enqueue(new Callback<String>() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,7 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.UploadImageEnabledActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.UploadedImage;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.MarkdownBottomBarRecyclerViewAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UploadedImagesBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
 | 
			
		||||
@@ -308,7 +308,7 @@ public class EditPostActivity extends BaseActivity implements UploadImageEnabled
 | 
			
		||||
            isSubmitting = true;
 | 
			
		||||
 | 
			
		||||
            Snackbar.make(coordinatorLayout, R.string.posting, Snackbar.LENGTH_SHORT).show();
 | 
			
		||||
            mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), titleEditText.getText().toString(), (linkEditText.getText().toString().isEmpty()) ? null : linkEditText.getText().toString(), contentEditText.getText().toString(), mPost.isNSFW(), null, mAccessToken))
 | 
			
		||||
            mRetrofit.getRetrofit().create(LemmyBetaAPI.class).postUpdate(new EditPostDTO(mPost.getId(), titleEditText.getText().toString(), (linkEditText.getText().toString().isEmpty()) ? null : linkEditText.getText().toString(), contentEditText.getText().toString(), mPost.isNSFW(), null, mAccessToken))
 | 
			
		||||
                    .enqueue(new Callback<String>() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ import eu.toldi.infinityforlemmy.Infinity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.FetchComment;
 | 
			
		||||
@@ -87,6 +88,9 @@ public class LinkResolverActivity extends AppCompatActivity {
 | 
			
		||||
    @Named("no_oauth")
 | 
			
		||||
    RetrofitHolder mRetrofit;
 | 
			
		||||
 | 
			
		||||
    @Inject
 | 
			
		||||
    ApiHandlerProvider apiHandlerProvider;
 | 
			
		||||
 | 
			
		||||
    @Inject
 | 
			
		||||
    Executor mExecutor;
 | 
			
		||||
 | 
			
		||||
@@ -116,6 +120,7 @@ public class LinkResolverActivity extends AppCompatActivity {
 | 
			
		||||
            mRetrofit.setBaseURL(instance);
 | 
			
		||||
            if (mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true)) {
 | 
			
		||||
                mRetrofit.setAccessToken(mAccessToken);
 | 
			
		||||
                apiHandlerProvider.setAccessToken(mAccessToken);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.CustomArrayAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.ParseAndInsertNewAccount;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
 | 
			
		||||
@@ -196,7 +196,7 @@ public class LoginActivity extends BaseActivity {
 | 
			
		||||
            Log.i("LoginActivity", "Instance: " + instance);
 | 
			
		||||
            AccountLoginDTO accountLoginDTO = new AccountLoginDTO(username, password_input.getText().toString(), token_2fa_input.getText().toString());
 | 
			
		||||
            mRetrofit.setBaseURL(instance);
 | 
			
		||||
            LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
 | 
			
		||||
            LemmyBetaAPI api = mRetrofit.getRetrofit().create(LemmyBetaAPI.class);
 | 
			
		||||
            Call<String> accessTokenCall = api.userLogin(accountLoginDTO);
 | 
			
		||||
            String finalInstance = instance;
 | 
			
		||||
            accessTokenCall.enqueue(new Callback<String>() {
 | 
			
		||||
 
 | 
			
		||||
@@ -90,6 +90,7 @@ import eu.toldi.infinityforlemmy.account.AccountViewModel;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.SubredditAutocompleteRecyclerViewAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.navigationdrawer.NavigationDrawerRecyclerViewMergedAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.InsertSubscribedThings;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchToAnonymousMode;
 | 
			
		||||
@@ -183,6 +184,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
 | 
			
		||||
    @Named("no_oauth")
 | 
			
		||||
    RetrofitHolder mRetrofit;
 | 
			
		||||
    @Inject
 | 
			
		||||
    ApiHandlerProvider apiHandlerProvider;
 | 
			
		||||
    @Inject
 | 
			
		||||
    @Named("oauth")
 | 
			
		||||
    Retrofit mOauthRetrofit;
 | 
			
		||||
    @Inject
 | 
			
		||||
@@ -347,6 +350,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
 | 
			
		||||
 | 
			
		||||
        mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
 | 
			
		||||
        mRetrofit.setAccessToken(mAccessToken);
 | 
			
		||||
        apiHandlerProvider.setAccessToken(mAccessToken);
 | 
			
		||||
        mBearerTokenUsed = mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true);
 | 
			
		||||
 | 
			
		||||
        mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
 | 
			
		||||
@@ -354,6 +358,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
 | 
			
		||||
        String instance = (mAccessToken == null) ? mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI) : mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
 | 
			
		||||
        if (instance != null) {
 | 
			
		||||
            mRetrofit.setBaseURL(instance);
 | 
			
		||||
            apiHandlerProvider.setBaseUrl(instance);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (savedInstanceState != null) {
 | 
			
		||||
@@ -379,6 +384,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
 | 
			
		||||
            String instancePreference = mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI);
 | 
			
		||||
            if (!instancePreference.startsWith(mRetrofit.getBaseURL())) {
 | 
			
		||||
                mRetrofit.setBaseURL(instancePreference);
 | 
			
		||||
                apiHandlerProvider.setBaseUrl(instancePreference);
 | 
			
		||||
                this.recreate();
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -1162,10 +1168,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
 | 
			
		||||
                            int minorVersion = Integer.parseInt(version[1]);
 | 
			
		||||
                            if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
 | 
			
		||||
                                mRetrofit.setAccessToken(mAccessToken);
 | 
			
		||||
                                apiHandlerProvider.setAccessToken(mAccessToken);
 | 
			
		||||
                                mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
 | 
			
		||||
                                checkUserToken();
 | 
			
		||||
                            } else {
 | 
			
		||||
                                mRetrofit.setAccessToken(null);
 | 
			
		||||
                                apiHandlerProvider.setAccessToken(null);
 | 
			
		||||
                                mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, false).apply();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
@@ -1519,6 +1527,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
 | 
			
		||||
                    url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
 | 
			
		||||
                    mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
 | 
			
		||||
                    mRetrofit.setBaseURL(url);
 | 
			
		||||
                    apiHandlerProvider.setBaseUrl(url);
 | 
			
		||||
                    sectionsPagerAdapter.getCurrentFragment().refresh();
 | 
			
		||||
                } catch (MalformedURLException e) {
 | 
			
		||||
                    thingEditText.setError("Invalid URL");
 | 
			
		||||
@@ -1548,6 +1557,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
 | 
			
		||||
                        url = urlObj.getProtocol() + "://" + urlObj.getHost() + "/";
 | 
			
		||||
                        mSharedPreferences.edit().putString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, url).apply();
 | 
			
		||||
                        mRetrofit.setBaseURL(url);
 | 
			
		||||
                        apiHandlerProvider.setBaseUrl(url);
 | 
			
		||||
                        sectionsPagerAdapter.getCurrentFragment().refresh();
 | 
			
		||||
                    } catch (MalformedURLException e) {
 | 
			
		||||
                        thingEditText.setError("Invalid URL");
 | 
			
		||||
 
 | 
			
		||||
@@ -63,12 +63,12 @@ import eu.toldi.infinityforlemmy.LoadingMorePostsStatus;
 | 
			
		||||
import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveComment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortTypeSelectionCallback;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
@@ -139,6 +139,8 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
 | 
			
		||||
    @Named("oauth")
 | 
			
		||||
    Retrofit mOauthRetrofit;
 | 
			
		||||
    @Inject
 | 
			
		||||
    ApiHandlerProvider apiHandlerProvider;
 | 
			
		||||
    @Inject
 | 
			
		||||
    RedditDataRoomDatabase mRedditDataRoomDatabase;
 | 
			
		||||
    @Inject
 | 
			
		||||
    @Named("default")
 | 
			
		||||
@@ -456,10 +458,10 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void saveComment(@NonNull Comment comment, int position) {
 | 
			
		||||
        SaveComment saveComment = new SaveComment();
 | 
			
		||||
 | 
			
		||||
        if (comment.isSaved()) {
 | 
			
		||||
            comment.setSaved(false);
 | 
			
		||||
            saveComment.unsaveThing(mOauthRetrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
 | 
			
		||||
            apiHandlerProvider.getApiHandler().unsaveComment(comment.getId(),mAccessToken, new ApiHandler.SaveCommentListener() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void success() {
 | 
			
		||||
                    ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
 | 
			
		||||
@@ -470,7 +472,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                @Override
 | 
			
		||||
                public void failed() {
 | 
			
		||||
                public void onFailure() {
 | 
			
		||||
                    ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
 | 
			
		||||
                    if (fragment != null) {
 | 
			
		||||
                        fragment.saveComment(position, true);
 | 
			
		||||
@@ -480,7 +482,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
 | 
			
		||||
            });
 | 
			
		||||
        } else {
 | 
			
		||||
            comment.setSaved(true);
 | 
			
		||||
            saveComment.saveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
 | 
			
		||||
            apiHandlerProvider.getApiHandler().saveComment(comment.getId(), mAccessToken,new ApiHandler.SaveCommentListener() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void success() {
 | 
			
		||||
                    ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
 | 
			
		||||
@@ -491,7 +493,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                @Override
 | 
			
		||||
                public void failed() {
 | 
			
		||||
                public void onFailure() {
 | 
			
		||||
                    ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
 | 
			
		||||
                    if (fragment != null) {
 | 
			
		||||
                        fragment.saveComment(position, false);
 | 
			
		||||
@@ -537,7 +539,7 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
 | 
			
		||||
            int nextPage = posts.size() / 25 + 1;
 | 
			
		||||
 | 
			
		||||
            mExecutor.execute(() -> {
 | 
			
		||||
                LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
 | 
			
		||||
                LemmyBetaAPI api = mRetrofit.getRetrofit().create(LemmyBetaAPI.class);
 | 
			
		||||
                Call<String> call;
 | 
			
		||||
 | 
			
		||||
                switch (postType) {
 | 
			
		||||
 
 | 
			
		||||
@@ -33,21 +33,17 @@ import butterknife.BindView;
 | 
			
		||||
import butterknife.ButterKnife;
 | 
			
		||||
import eu.toldi.infinityforlemmy.NetworkState;
 | 
			
		||||
import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveComment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.VoteThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentMoreBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.CommentIndentationView;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.CustomMarkwonAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SpoilerOnClickTextView;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
 | 
			
		||||
import eu.toldi.infinityforlemmy.databinding.ItemCommentBinding;
 | 
			
		||||
@@ -80,6 +76,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
    };
 | 
			
		||||
    private BaseActivity mActivity;
 | 
			
		||||
    private Retrofit retrofit;
 | 
			
		||||
    private ApiHandler apiHandler;
 | 
			
		||||
    private Locale mLocale;
 | 
			
		||||
    private Markwon mMarkwon;
 | 
			
		||||
    private RecyclerView.RecycledViewPool recycledViewPool;
 | 
			
		||||
@@ -106,13 +103,14 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
    private NetworkState networkState;
 | 
			
		||||
    private RetryLoadingMoreCallback mRetryLoadingMoreCallback;
 | 
			
		||||
 | 
			
		||||
    public CommentsListingRecyclerViewAdapter(BaseActivity activity, Retrofit oauthRetrofit,
 | 
			
		||||
    public CommentsListingRecyclerViewAdapter(BaseActivity activity, Retrofit oauthRetrofit,ApiHandler apiHandler,
 | 
			
		||||
                                              CustomThemeWrapper customThemeWrapper, Locale locale,
 | 
			
		||||
                                              SharedPreferences sharedPreferences, String accessToken,
 | 
			
		||||
                                              String accountName, RetryLoadingMoreCallback retryLoadingMoreCallback) {
 | 
			
		||||
        super(DIFF_CALLBACK);
 | 
			
		||||
        mActivity = activity;
 | 
			
		||||
        retrofit = oauthRetrofit;
 | 
			
		||||
        this.apiHandler = apiHandler;
 | 
			
		||||
        mCommentColor = customThemeWrapper.getCommentColor();
 | 
			
		||||
        int commentSpoilerBackgroundColor = mCommentColor | 0xFF000000;
 | 
			
		||||
        mLocale = locale;
 | 
			
		||||
@@ -536,40 +534,39 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
                    scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                            comment.getScore() + comment.getVoteType()));
 | 
			
		||||
 | 
			
		||||
                    apiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void onVoteThingSuccess() {
 | 
			
		||||
                                    int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                                    if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                                        comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
 | 
			
		||||
                                        if (currentPosition == position) {
 | 
			
		||||
                                            upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
 | 
			
		||||
                                            upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
 | 
			
		||||
                                            scoreTextView.setTextColor(mUpvotedColor);
 | 
			
		||||
                                        }
 | 
			
		||||
                                    } else {
 | 
			
		||||
                                        comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
 | 
			
		||||
                                        if (currentPosition == position) {
 | 
			
		||||
                                            upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
 | 
			
		||||
                                            upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
 | 
			
		||||
                                            scoreTextView.setTextColor(mCommentIconAndInfoColor);
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.voteComment(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                                comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
 | 
			
		||||
                                if (currentPosition == position) {
 | 
			
		||||
                                    upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
 | 
			
		||||
                                    upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
 | 
			
		||||
                                    scoreTextView.setTextColor(mUpvotedColor);
 | 
			
		||||
                                    if (currentPosition == position) {
 | 
			
		||||
                                        downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
 | 
			
		||||
                                        downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
 | 
			
		||||
 | 
			
		||||
                                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                                                comment.getScore() + comment.getVoteType()));
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            } else {
 | 
			
		||||
                                comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
 | 
			
		||||
                                if (currentPosition == position) {
 | 
			
		||||
                                    upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
 | 
			
		||||
                                    upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
 | 
			
		||||
                                    scoreTextView.setTextColor(mCommentIconAndInfoColor);
 | 
			
		||||
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void onVoteThingFail() {
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (currentPosition == position) {
 | 
			
		||||
                                downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
 | 
			
		||||
                                downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
 | 
			
		||||
 | 
			
		||||
                                scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                                        comment.getScore() + comment.getVoteType()));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position) {
 | 
			
		||||
                        }
 | 
			
		||||
                    }, comment.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                            });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -616,9 +613,9 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
                            comment.getScore() + comment.getVoteType()));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    VoteThing.voteComment(mActivity, retrofit, mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    apiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
 | 
			
		||||
                                comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
 | 
			
		||||
@@ -645,9 +642,9 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                        }
 | 
			
		||||
                    }, comment.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -658,10 +655,10 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
                }
 | 
			
		||||
                Comment comment = getItem(position);
 | 
			
		||||
                if (comment != null) {
 | 
			
		||||
                    SaveComment saveComment = new SaveComment();
 | 
			
		||||
 | 
			
		||||
                    if (comment.isSaved()) {
 | 
			
		||||
                        comment.setSaved(false);
 | 
			
		||||
                        saveComment.unsaveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandler.unsaveComment(comment.getId(), mAccessToken, new ApiHandler.SaveCommentListener()  {
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void success() {
 | 
			
		||||
                                comment.setSaved(false);
 | 
			
		||||
@@ -672,7 +669,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void failed() {
 | 
			
		||||
                            public void onFailure() {
 | 
			
		||||
                                comment.setSaved(true);
 | 
			
		||||
                                if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                    saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
@@ -682,7 +679,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
                        });
 | 
			
		||||
                    } else {
 | 
			
		||||
                        comment.setSaved(true);
 | 
			
		||||
                        saveComment.saveThing(retrofit, mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandler.saveComment(comment.getId(), mAccessToken, new ApiHandler.SaveCommentListener() {
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void success() {
 | 
			
		||||
                                comment.setSaved(true);
 | 
			
		||||
@@ -693,7 +690,7 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void failed() {
 | 
			
		||||
                            public void onFailure() {
 | 
			
		||||
                                comment.setSaved(false);
 | 
			
		||||
                                if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                    saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
 
 | 
			
		||||
@@ -46,15 +46,13 @@ import butterknife.ButterKnife;
 | 
			
		||||
import eu.toldi.infinityforlemmy.DualBadgeDrawable;
 | 
			
		||||
import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveComment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.VoteThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.CommentActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.CommentMoreBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
@@ -62,9 +60,7 @@ import eu.toldi.infinityforlemmy.comment.FetchComment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.CommentIndentationView;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.CustomMarkwonAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SpoilerOnClickTextView;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
 | 
			
		||||
import eu.toldi.infinityforlemmy.databinding.ItemCommentBinding;
 | 
			
		||||
@@ -101,6 +97,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
    private ViewPostDetailFragment mFragment;
 | 
			
		||||
    private Executor mExecutor;
 | 
			
		||||
    private RetrofitHolder mRetrofit;
 | 
			
		||||
    private ApiHandler mApiHandler;
 | 
			
		||||
    private Retrofit mOauthRetrofit;
 | 
			
		||||
    private Markwon mCommentMarkwon;
 | 
			
		||||
    private String mAccessToken;
 | 
			
		||||
@@ -173,7 +170,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
 | 
			
		||||
    public CommentsRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
 | 
			
		||||
                                       CustomThemeWrapper customThemeWrapper,
 | 
			
		||||
                                       Executor executor, RetrofitHolder retrofit,
 | 
			
		||||
                                       Executor executor, RetrofitHolder retrofit, ApiHandler apiHandler,
 | 
			
		||||
                                       String accessToken, String accountName,
 | 
			
		||||
                                       Post post, Locale locale, Integer singleCommentId,
 | 
			
		||||
                                       boolean isSingleCommentThreadMode,
 | 
			
		||||
@@ -184,6 +181,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
        mFragment = fragment;
 | 
			
		||||
        mExecutor = executor;
 | 
			
		||||
        mRetrofit = retrofit;
 | 
			
		||||
        mApiHandler = apiHandler;
 | 
			
		||||
        mGlide = Glide.with(activity.getApplicationContext());
 | 
			
		||||
        mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor();
 | 
			
		||||
        mCommentTextColor = customThemeWrapper.getCommentColor();
 | 
			
		||||
@@ -1516,31 +1514,31 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                                        comment.getScore() + comment.getVoteType())));
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.voteComment(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    mApiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                                comment.setVoteType(Comment.VOTE_TYPE_UPVOTE);
 | 
			
		||||
                                if (currentPosition == position) {
 | 
			
		||||
                               // if (currentPosition == position) {
 | 
			
		||||
                                    upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
 | 
			
		||||
                                    upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
 | 
			
		||||
                                    scoreTextView.setTextColor(mUpvotedColor);
 | 
			
		||||
                                    topScoreTextView.setTextColor(mUpvotedColor);
 | 
			
		||||
                                    downvoteTextView.setTextColor(mCommentIconAndInfoColor);
 | 
			
		||||
                                }
 | 
			
		||||
                                //}
 | 
			
		||||
                            } else {
 | 
			
		||||
                                comment.setVoteType(Comment.VOTE_TYPE_NO_VOTE);
 | 
			
		||||
                                if (currentPosition == position) {
 | 
			
		||||
                              //  if (currentPosition == position) {
 | 
			
		||||
                                    upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
 | 
			
		||||
                                    upvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
 | 
			
		||||
                                    scoreTextView.setTextColor(mCommentIconAndInfoColor);
 | 
			
		||||
                                    topScoreTextView.setTextColor(mSecondaryTextColor);
 | 
			
		||||
                                    downvoteTextView.setTextColor(mCommentIconAndInfoColor);
 | 
			
		||||
                                }
 | 
			
		||||
                               // }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (currentPosition == position) {
 | 
			
		||||
                            //if (currentPosition == position) {
 | 
			
		||||
                                downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
 | 
			
		||||
                                downvoteButton.setIconTint(ColorStateList.valueOf(mCommentIconAndInfoColor));
 | 
			
		||||
                                if (!mHideTheNumberOfVotes) {
 | 
			
		||||
@@ -1559,13 +1557,13 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                                            Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                                                    comment.getScore() + comment.getVoteType())));
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                           // }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                        }
 | 
			
		||||
                    }, comment.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -1637,9 +1635,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    int position = getBindingAdapterPosition();
 | 
			
		||||
                    VoteThing.voteComment(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    mApiHandler.voteComment(comment.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
 | 
			
		||||
                                comment.setVoteType(Comment.VOTE_TYPE_DOWNVOTE);
 | 
			
		||||
@@ -1686,9 +1684,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                        }
 | 
			
		||||
                    }, comment.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -1696,10 +1694,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                Comment comment = getCurrentComment(this);
 | 
			
		||||
                if (comment != null) {
 | 
			
		||||
                    int position = getBindingAdapterPosition();
 | 
			
		||||
                    SaveComment saveComment = new SaveComment();
 | 
			
		||||
 | 
			
		||||
                    if (comment.isSaved()) {
 | 
			
		||||
                        comment.setSaved(false);
 | 
			
		||||
                        saveComment.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
 | 
			
		||||
                        mApiHandler.unsaveComment(comment.getId(),mAccessToken, new ApiHandler.SaveCommentListener() {
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void success() {
 | 
			
		||||
                                comment.setSaved(false);
 | 
			
		||||
@@ -1710,7 +1708,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void failed() {
 | 
			
		||||
                            public void onFailure() {
 | 
			
		||||
                                comment.setSaved(true);
 | 
			
		||||
                                if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                    saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
@@ -1720,7 +1718,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                        });
 | 
			
		||||
                    } else {
 | 
			
		||||
                        comment.setSaved(true);
 | 
			
		||||
                        saveComment.saveThing(mRetrofit.getRetrofit(), mAccessToken, comment.getId(), new SaveThing.SaveThingListener() {
 | 
			
		||||
                        mApiHandler.saveComment(comment.getId(),mAccessToken, new ApiHandler.SaveCommentListener() {
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void success() {
 | 
			
		||||
                                comment.setSaved(true);
 | 
			
		||||
@@ -1731,7 +1729,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void failed() {
 | 
			
		||||
                            public void onFailure() {
 | 
			
		||||
                                comment.setSaved(false);
 | 
			
		||||
                                if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                    saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
 
 | 
			
		||||
@@ -65,10 +65,7 @@ import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveMemoryCenterInisdeDownsampleStrategy;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SavePost;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.StreamableVideo;
 | 
			
		||||
import eu.toldi.infinityforlemmy.VoteThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.CommentActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.FilteredPostsActivity;
 | 
			
		||||
@@ -81,6 +78,7 @@ import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.CopyTextBottomSheetFragment;
 | 
			
		||||
@@ -89,8 +87,6 @@ import eu.toldi.infinityforlemmy.bottomsheetfragments.UrlMenuBottomSheetFragment
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.AspectRatioGifImageView;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockInterface;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.SwipeLockLinearLayoutManager;
 | 
			
		||||
import eu.toldi.infinityforlemmy.databinding.ItemPostDetailGalleryBinding;
 | 
			
		||||
import eu.toldi.infinityforlemmy.databinding.ItemPostDetailImageAndGifAutoplayBinding;
 | 
			
		||||
import eu.toldi.infinityforlemmy.databinding.ItemPostDetailLinkBinding;
 | 
			
		||||
@@ -140,6 +136,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
    private ViewPostDetailFragment mFragment;
 | 
			
		||||
    private Executor mExecutor;
 | 
			
		||||
    private RetrofitHolder mRetrofit;
 | 
			
		||||
    private ApiHandler apiHandler;
 | 
			
		||||
    private Retrofit mRedgifsRetrofit;
 | 
			
		||||
    private final Provider<StreamableAPI> mStreamableApiProvider;
 | 
			
		||||
    private RedditDataRoomDatabase mRedditDataRoomDatabase;
 | 
			
		||||
@@ -226,7 +223,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
 | 
			
		||||
    public PostDetailRecyclerViewAdapter(BaseActivity activity, ViewPostDetailFragment fragment,
 | 
			
		||||
                                         Executor executor, CustomThemeWrapper customThemeWrapper,
 | 
			
		||||
                                         RetrofitHolder retrofit,
 | 
			
		||||
                                         RetrofitHolder retrofit, ApiHandler apiHandler1,
 | 
			
		||||
                                         Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
 | 
			
		||||
                                         RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
 | 
			
		||||
                                         boolean separatePostAndComments, String accessToken,
 | 
			
		||||
@@ -241,6 +238,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
        mFragment = fragment;
 | 
			
		||||
        mExecutor = executor;
 | 
			
		||||
        mRetrofit = retrofit;
 | 
			
		||||
        apiHandler = apiHandler1;
 | 
			
		||||
        mRedgifsRetrofit = redgifsRetrofit;
 | 
			
		||||
        mStreamableApiProvider = streamableApiProvider;
 | 
			
		||||
        mRedditDataRoomDatabase = redditDataRoomDatabase;
 | 
			
		||||
@@ -1406,65 +1404,64 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
 | 
			
		||||
                apiHandler.votePost(mPost.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void onVoteThingSuccess() {
 | 
			
		||||
                                if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                                    mPost.setVoteType(1);
 | 
			
		||||
                                    upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
 | 
			
		||||
                                    upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
 | 
			
		||||
                                    scoreTextView.setTextColor(mUpvotedColor);
 | 
			
		||||
                                } else {
 | 
			
		||||
                                    mPost.setVoteType(0);
 | 
			
		||||
                                    upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
 | 
			
		||||
                                    upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
 | 
			
		||||
                                    scoreTextView.setTextColor(mPostIconAndInfoColor);
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onVoteThingSuccess() {
 | 
			
		||||
                        if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                            mPost.setVoteType(1);
 | 
			
		||||
                            upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp);
 | 
			
		||||
                            upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor));
 | 
			
		||||
                            scoreTextView.setTextColor(mUpvotedColor);
 | 
			
		||||
                        } else {
 | 
			
		||||
                            mPost.setVoteType(0);
 | 
			
		||||
                            upvoteButton.setIconResource(R.drawable.ic_upvote_24dp);
 | 
			
		||||
                            upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
 | 
			
		||||
                            scoreTextView.setTextColor(mPostIconAndInfoColor);
 | 
			
		||||
                        }
 | 
			
		||||
                                downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
 | 
			
		||||
                                downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
 | 
			
		||||
                                if (!mHideTheNumberOfVotes) {
 | 
			
		||||
                                    if (mSeperateUpvoteAndDownvote) {
 | 
			
		||||
                                        int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
 | 
			
		||||
                                        int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(), 0);
 | 
			
		||||
                                        ;
 | 
			
		||||
                                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
 | 
			
		||||
                                        mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
 | 
			
		||||
                                    } else {
 | 
			
		||||
                                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                                                mPost.getScore() + mPost.getVoteType()));
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                        downvoteButton.setIconResource(R.drawable.ic_downvote_24dp);
 | 
			
		||||
                        downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor));
 | 
			
		||||
                        if (!mHideTheNumberOfVotes) {
 | 
			
		||||
                            if (mSeperateUpvoteAndDownvote) {
 | 
			
		||||
                                int upvotes = (mPost.getVoteType() == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
 | 
			
		||||
                                int downvotes = (mPost.getVoteType() == -1) ? mPost.getDownvotes() + 1 : Math.max(mPost.getDownvotes(), 0);
 | 
			
		||||
                                ;
 | 
			
		||||
                                scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
 | 
			
		||||
                                mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
 | 
			
		||||
                            } else {
 | 
			
		||||
                                scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                                        mPost.getScore() + mPost.getVoteType()));
 | 
			
		||||
                                mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
 | 
			
		||||
                    }
 | 
			
		||||
                            @Override
 | 
			
		||||
                            public void onVoteThingFail() {
 | 
			
		||||
                                Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                                mPost.setVoteType(previousVoteType);
 | 
			
		||||
                                if (!mHideTheNumberOfVotes) {
 | 
			
		||||
                                    if (mSeperateUpvoteAndDownvote) {
 | 
			
		||||
                                        int upvotes = (previousVoteType == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
 | 
			
		||||
                                        int downvotes = (previousVoteType == -1) ? mPost.getDownvotes() - 1 : Math.max(mPost.getDownvotes(), 0);
 | 
			
		||||
                                        ;
 | 
			
		||||
                                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
 | 
			
		||||
                                        mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
 | 
			
		||||
                                    } else {
 | 
			
		||||
                                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                                                mPost.getScore() + previousVoteType));
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                upvoteButton.setIcon(previousUpvoteButtonDrawable);
 | 
			
		||||
                                upvoteButton.setIconTint(ColorStateList.valueOf(previousUpvoteButtonTextColor));
 | 
			
		||||
                                scoreTextView.setTextColor(previousScoreTextViewColor);
 | 
			
		||||
                                downvoteButton.setIcon(previousDownvoteButtonDrawable);
 | 
			
		||||
                                downvoteButton.setIconTint(ColorStateList.valueOf(previousDownvoteButtonTextColor));
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onVoteThingFail() {
 | 
			
		||||
                        Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                        mPost.setVoteType(previousVoteType);
 | 
			
		||||
                        if (!mHideTheNumberOfVotes) {
 | 
			
		||||
                            if (mSeperateUpvoteAndDownvote) {
 | 
			
		||||
                                int upvotes = (previousVoteType == 1) ? mPost.getUpvotes() + 1 : mPost.getUpvotes();
 | 
			
		||||
                                int downvotes = (previousVoteType == -1) ? mPost.getDownvotes() - 1 : Math.max(mPost.getDownvotes(), 0);
 | 
			
		||||
                                ;
 | 
			
		||||
                                scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, upvotes));
 | 
			
		||||
                                mDownvoteTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, downvotes));
 | 
			
		||||
                            } else {
 | 
			
		||||
                                scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes,
 | 
			
		||||
                                        mPost.getScore() + previousVoteType));
 | 
			
		||||
                                mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        upvoteButton.setIcon(previousUpvoteButtonDrawable);
 | 
			
		||||
                        upvoteButton.setIconTint(ColorStateList.valueOf(previousUpvoteButtonTextColor));
 | 
			
		||||
                        scoreTextView.setTextColor(previousScoreTextViewColor);
 | 
			
		||||
                        downvoteButton.setIcon(previousDownvoteButtonDrawable);
 | 
			
		||||
                        downvoteButton.setIconTint(ColorStateList.valueOf(previousDownvoteButtonTextColor));
 | 
			
		||||
 | 
			
		||||
                        mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
 | 
			
		||||
                    }
 | 
			
		||||
                }, mPost.getId(), newVoteType);
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            scoreTextView.setOnClickListener(view -> {
 | 
			
		||||
@@ -1528,8 +1525,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
 | 
			
		||||
 | 
			
		||||
                VoteThing.votePost(mActivity, mRetrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingWithoutPositionListener() {
 | 
			
		||||
                apiHandler.votePost(mPost.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onVoteThingSuccess() {
 | 
			
		||||
                        if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
 | 
			
		||||
@@ -1590,7 +1586,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
 | 
			
		||||
                        mPostDetailRecyclerViewAdapterCallback.updatePost(mPost);
 | 
			
		||||
                    }
 | 
			
		||||
                }, mPost.getId(), newVoteType);
 | 
			
		||||
                });
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            if (!mHideTheNumberOfComments) {
 | 
			
		||||
@@ -1628,11 +1624,11 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
                    Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                SavePost savePost = new SavePost();
 | 
			
		||||
 | 
			
		||||
                if (mPost.isSaved()) {
 | 
			
		||||
                    this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
                    savePost.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
 | 
			
		||||
                            new SaveThing.SaveThingListener() {
 | 
			
		||||
                    apiHandler.unsavePost(mPost.getId(),mAccessToken,
 | 
			
		||||
                            new ApiHandler.SavePostListener() {
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void success() {
 | 
			
		||||
                                    mPost.setSaved(false);
 | 
			
		||||
@@ -1642,7 +1638,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void failed() {
 | 
			
		||||
                                public void onFailure() {
 | 
			
		||||
                                    mPost.setSaved(true);
 | 
			
		||||
                                    PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
                                    Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
@@ -1651,8 +1647,10 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
                            });
 | 
			
		||||
                } else {
 | 
			
		||||
                    this.saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
                    savePost.saveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
 | 
			
		||||
                            new SaveThing.SaveThingListener() {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    apiHandler.savePost(mPost.getId(),mAccessToken,
 | 
			
		||||
                            new ApiHandler.SavePostListener() {
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void success() {
 | 
			
		||||
                                    mPost.setSaved(true);
 | 
			
		||||
@@ -1662,7 +1660,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void failed() {
 | 
			
		||||
                                public void onFailure() {
 | 
			
		||||
                                    mPost.setSaved(false);
 | 
			
		||||
                                    PostDetailBaseViewHolder.this.saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
                                    Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
 
 | 
			
		||||
@@ -74,10 +74,7 @@ import eu.toldi.infinityforlemmy.MarkPostAsReadInterface;
 | 
			
		||||
import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveMemoryCenterInisdeDownsampleStrategy;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SavePost;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.StreamableVideo;
 | 
			
		||||
import eu.toldi.infinityforlemmy.VoteThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.FilteredPostsActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.LinkResolverActivity;
 | 
			
		||||
@@ -89,6 +86,8 @@ import eu.toldi.infinityforlemmy.activities.ViewUserDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.ViewVideoActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.RedgifsAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.ShareLinkBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.AspectRatioGifImageView;
 | 
			
		||||
@@ -171,6 +170,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
    private SharedPreferences mCurrentAccountSharedPreferences;
 | 
			
		||||
    private Executor mExecutor;
 | 
			
		||||
    private RetrofitHolder retrofit;
 | 
			
		||||
    private ApiHandlerProvider apiHandlerProvider;
 | 
			
		||||
    private Retrofit mRedgifsRetrofit;
 | 
			
		||||
    private Provider<StreamableAPI> mStreamableApiProvider;
 | 
			
		||||
    private String mAccessToken;
 | 
			
		||||
@@ -267,7 +267,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
    private boolean canPlayVideo = true;
 | 
			
		||||
    private RecyclerView.RecycledViewPool mGalleryRecycledViewPool;
 | 
			
		||||
 | 
			
		||||
    public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, RetrofitHolder retrofit,
 | 
			
		||||
    public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, RetrofitHolder retrofit, ApiHandlerProvider apiHandler,
 | 
			
		||||
                                   Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider,
 | 
			
		||||
                                   CustomThemeWrapper customThemeWrapper, Locale locale,
 | 
			
		||||
                                   String accessToken, String accountName, int postType, int postLayout, boolean displaySubredditName,
 | 
			
		||||
@@ -283,6 +283,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
            mCurrentAccountSharedPreferences = currentAccountSharedPreferences;
 | 
			
		||||
            mExecutor = executor;
 | 
			
		||||
            this.retrofit = retrofit;
 | 
			
		||||
            this.apiHandlerProvider = apiHandler;
 | 
			
		||||
            mRedgifsRetrofit = redgifsRetrofit;
 | 
			
		||||
            mStreamableApiProvider = streamableApiProvider;
 | 
			
		||||
            mAccessToken = accessToken;
 | 
			
		||||
@@ -3212,10 +3213,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                            scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                                post.setVoteType(1);
 | 
			
		||||
@@ -3252,7 +3252,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                            Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                            post.setVoteType(previousVoteType);
 | 
			
		||||
                            if (getBindingAdapterPosition() == position) {
 | 
			
		||||
@@ -3268,7 +3268,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
 | 
			
		||||
                            EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
 | 
			
		||||
                        }
 | 
			
		||||
                    }, post.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -3342,9 +3342,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
 | 
			
		||||
                                post.setVoteType(-1);
 | 
			
		||||
@@ -3386,7 +3386,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                            Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                            post.setVoteType(previousVoteType);
 | 
			
		||||
                            if (getBindingAdapterPosition() == position) {
 | 
			
		||||
@@ -3402,7 +3402,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
 | 
			
		||||
                            EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
 | 
			
		||||
                        }
 | 
			
		||||
                    }, post.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -3419,11 +3419,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    SavePost savePost = new SavePost();
 | 
			
		||||
 | 
			
		||||
                    if (post.isSaved()) {
 | 
			
		||||
                        saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
                        savePost.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
 | 
			
		||||
                                new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandlerProvider.getApiHandler().unsavePost(post.getId(),mAccessToken,
 | 
			
		||||
                                new ApiHandler.SavePostListener() {
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void success() {
 | 
			
		||||
                                        post.setSaved(false);
 | 
			
		||||
@@ -3435,7 +3435,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void failed() {
 | 
			
		||||
                                    public void onFailure() {
 | 
			
		||||
                                        post.setSaved(true);
 | 
			
		||||
                                        if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                            saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
@@ -3446,8 +3446,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                });
 | 
			
		||||
                    } else {
 | 
			
		||||
                        saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
                        savePost.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
 | 
			
		||||
                                new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandlerProvider.getApiHandler().savePost(post.getId(),mAccessToken,
 | 
			
		||||
                                new ApiHandler.SavePostListener() {
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void success() {
 | 
			
		||||
                                        post.setSaved(true);
 | 
			
		||||
@@ -3459,7 +3459,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void failed() {
 | 
			
		||||
                                    public void onFailure() {
 | 
			
		||||
                                        post.setSaved(false);
 | 
			
		||||
                                        if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                            saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
@@ -4641,9 +4641,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                                post.setVoteType(1);
 | 
			
		||||
@@ -4673,7 +4673,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                            Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                            post.setVoteType(previousVoteType);
 | 
			
		||||
                            if (getBindingAdapterPosition() == position) {
 | 
			
		||||
@@ -4689,7 +4689,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
 | 
			
		||||
                            EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
 | 
			
		||||
                        }
 | 
			
		||||
                    }, post.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -4756,9 +4756,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
 | 
			
		||||
                                post.setVoteType(-1);
 | 
			
		||||
@@ -4798,7 +4798,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                            Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                            post.setVoteType(previousVoteType);
 | 
			
		||||
                            if (getBindingAdapterPosition() == position) {
 | 
			
		||||
@@ -4814,7 +4814,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
 | 
			
		||||
                            EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
 | 
			
		||||
                        }
 | 
			
		||||
                    }, post.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -4832,11 +4832,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                }
 | 
			
		||||
                Post post = getItem(position);
 | 
			
		||||
                if (post != null) {
 | 
			
		||||
                    SavePost postSave = new SavePost();
 | 
			
		||||
 | 
			
		||||
                    if (post.isSaved()) {
 | 
			
		||||
                        saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
                        postSave.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
 | 
			
		||||
                                new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandlerProvider.getApiHandler().unsavePost(post.getId(),mAccessToken,
 | 
			
		||||
                                new ApiHandler.SavePostListener() {
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void success() {
 | 
			
		||||
                                        post.setSaved(false);
 | 
			
		||||
@@ -4848,7 +4848,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void failed() {
 | 
			
		||||
                                    public void onFailure() {
 | 
			
		||||
                                        post.setSaved(true);
 | 
			
		||||
                                        if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                            saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
@@ -4859,8 +4859,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                });
 | 
			
		||||
                    } else {
 | 
			
		||||
                        saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
                        postSave.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
 | 
			
		||||
                                new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandlerProvider.getApiHandler().savePost( post.getId(),mAccessToken,
 | 
			
		||||
                                new ApiHandler.SavePostListener() {
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void success() {
 | 
			
		||||
                                        post.setSaved(true);
 | 
			
		||||
@@ -4872,7 +4872,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void failed() {
 | 
			
		||||
                                    public void onFailure() {
 | 
			
		||||
                                        post.setSaved(false);
 | 
			
		||||
                                        if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                            saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
@@ -6122,9 +6122,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_UPVOTE)) {
 | 
			
		||||
                                post.setVoteType(1);
 | 
			
		||||
@@ -6154,7 +6154,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                            Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                            post.setVoteType(previousVoteType);
 | 
			
		||||
                            if (getBindingAdapterPosition() == position) {
 | 
			
		||||
@@ -6170,7 +6170,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
 | 
			
		||||
                            EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
 | 
			
		||||
                        }
 | 
			
		||||
                    }, post.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -6226,10 +6226,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                    if (!mHideTheNumberOfVotes) {
 | 
			
		||||
                        scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType()));
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    VoteThing.votePost(mActivity, retrofit.getRetrofit(), mAccessToken, new VoteThing.VoteThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().votePost(post.getId(), newVoteType, mAccessToken, new ApiHandler.VoteListener() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingSuccess(int position1) {
 | 
			
		||||
                        public void onVoteThingSuccess() {
 | 
			
		||||
                            int currentPosition = getBindingAdapterPosition();
 | 
			
		||||
                            if (newVoteType == Integer.parseInt(APIUtils.DIR_DOWNVOTE)) {
 | 
			
		||||
                                post.setVoteType(-1);
 | 
			
		||||
@@ -6260,7 +6259,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void onVoteThingFail(int position1) {
 | 
			
		||||
                        public void onVoteThingFail() {
 | 
			
		||||
                            Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                            post.setVoteType(previousVoteType);
 | 
			
		||||
                            if (getBindingAdapterPosition() == position) {
 | 
			
		||||
@@ -6276,7 +6275,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
 | 
			
		||||
                            EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post));
 | 
			
		||||
                        }
 | 
			
		||||
                    }, post.getId(), newVoteType, getBindingAdapterPosition());
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
@@ -6293,11 +6292,11 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                        Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    SavePost savePost = new SavePost();
 | 
			
		||||
 | 
			
		||||
                    if (post.isSaved()) {
 | 
			
		||||
                        saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
                        savePost.unsaveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
 | 
			
		||||
                                new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandlerProvider.getApiHandler().unsavePost(post.getId(),mAccessToken,
 | 
			
		||||
                                new ApiHandler.SavePostListener() {
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void success() {
 | 
			
		||||
                                        post.setSaved(false);
 | 
			
		||||
@@ -6309,7 +6308,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void failed() {
 | 
			
		||||
                                    public void onFailure() {
 | 
			
		||||
                                        post.setSaved(true);
 | 
			
		||||
                                        if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                            saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
@@ -6320,8 +6319,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                });
 | 
			
		||||
                    } else {
 | 
			
		||||
                        saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp);
 | 
			
		||||
                        savePost.saveThing(retrofit.getRetrofit(), mAccessToken, post.getId(),
 | 
			
		||||
                                new SaveThing.SaveThingListener() {
 | 
			
		||||
                        apiHandlerProvider.getApiHandler().savePost(post.getId(),mAccessToken,
 | 
			
		||||
                                new ApiHandler.SavePostListener() {
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void success() {
 | 
			
		||||
                                        post.setSaved(true);
 | 
			
		||||
@@ -6333,7 +6332,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                                    @Override
 | 
			
		||||
                                    public void failed() {
 | 
			
		||||
                                    public void onFailure() {
 | 
			
		||||
                                        post.setSaved(false);
 | 
			
		||||
                                        if (getBindingAdapterPosition() == position) {
 | 
			
		||||
                                            saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp);
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ import retrofit2.http.PUT;
 | 
			
		||||
import retrofit2.http.Part;
 | 
			
		||||
import retrofit2.http.Query;
 | 
			
		||||
 | 
			
		||||
public interface LemmyAPI {
 | 
			
		||||
public interface LemmyBetaAPI {
 | 
			
		||||
    @Headers("Content-Type: application/json")
 | 
			
		||||
    @POST("api/v3/user/login")
 | 
			
		||||
    Call<String> userLogin(@Body AccountLoginDTO params);
 | 
			
		||||
@@ -0,0 +1,351 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.apis.apihandler
 | 
			
		||||
 | 
			
		||||
import android.os.Handler
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType
 | 
			
		||||
import eu.toldi.infinityforlemmy.blockedcommunity.BlockedCommunityData
 | 
			
		||||
import eu.toldi.infinityforlemmy.blockedinstances.BlockedInstanceData
 | 
			
		||||
import eu.toldi.infinityforlemmy.blockeduser.BlockedUserData
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment
 | 
			
		||||
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.Post
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher
 | 
			
		||||
import eu.toldi.infinityforlemmy.site.SiteInfo
 | 
			
		||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData
 | 
			
		||||
import eu.toldi.infinityforlemmy.user.MyUserInfo
 | 
			
		||||
import eu.toldi.infinityforlemmy.user.UserData
 | 
			
		||||
import retrofit2.Retrofit
 | 
			
		||||
import java.util.concurrent.Executor
 | 
			
		||||
 | 
			
		||||
interface ApiHandler {
 | 
			
		||||
    // Community-related
 | 
			
		||||
    fun blockCommunity(
 | 
			
		||||
        communityId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: BlockCommunityListener
 | 
			
		||||
    )
 | 
			
		||||
    fun unblockCommunity(
 | 
			
		||||
        communityId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: BlockCommunityListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Instance-related
 | 
			
		||||
    fun blockInstance(
 | 
			
		||||
        instanceId: Int,
 | 
			
		||||
        block: Boolean,
 | 
			
		||||
        listener: BlockInstanceListener
 | 
			
		||||
    )
 | 
			
		||||
    fun unblockInstance(
 | 
			
		||||
        instanceId: Int,
 | 
			
		||||
        listener: BlockInstanceListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // User-related
 | 
			
		||||
    fun blockUser(
 | 
			
		||||
        userId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: BlockUserListener
 | 
			
		||||
    )
 | 
			
		||||
    fun unblockUser(
 | 
			
		||||
        userId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: BlockUserListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Post-related
 | 
			
		||||
    fun reportPost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        reason: String,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ReportPostListener
 | 
			
		||||
    )
 | 
			
		||||
    fun savePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: SavePostListener
 | 
			
		||||
    )
 | 
			
		||||
    fun unsavePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: SavePostListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Comment-related
 | 
			
		||||
    fun reportComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        reason: String,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ReportCommentListener
 | 
			
		||||
    )
 | 
			
		||||
    fun saveComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: SaveCommentListener
 | 
			
		||||
    )
 | 
			
		||||
    fun unsaveComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: SaveCommentListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Post-related (submit, edit, delete)
 | 
			
		||||
    fun submitPost(
 | 
			
		||||
        executor: Executor,
 | 
			
		||||
        handler: Handler,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        communityId: Int,
 | 
			
		||||
        title: String,
 | 
			
		||||
        content: String,
 | 
			
		||||
        isNSFW: Boolean,
 | 
			
		||||
        receivePostReplyNotifications: Boolean,
 | 
			
		||||
        kind: String,
 | 
			
		||||
        posterUrl: String?,
 | 
			
		||||
        postEnricher: PostEnricher,
 | 
			
		||||
        submitPostListener: SubmitPostListener
 | 
			
		||||
    )
 | 
			
		||||
    fun editPost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        title: String,
 | 
			
		||||
        content: String,
 | 
			
		||||
        posterUrl: String,
 | 
			
		||||
        isNSFW: Boolean,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.EditPostListener
 | 
			
		||||
    )
 | 
			
		||||
    fun deletePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: DeletePostListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Comment-related (submit, edit, delete)
 | 
			
		||||
    fun submitComment(
 | 
			
		||||
        executor:Executor,
 | 
			
		||||
        handler: Handler,
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        content: String,
 | 
			
		||||
        parentId: Int?,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: SubmitCommentListener
 | 
			
		||||
    )
 | 
			
		||||
    fun editComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        content: String,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: EditCommentListener
 | 
			
		||||
    )
 | 
			
		||||
    fun deleteComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: DeleteCommentListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Fetch-related
 | 
			
		||||
    fun fetchComments(
 | 
			
		||||
        executor: Executor,
 | 
			
		||||
        handler: Handler,
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        accessToken: String?,
 | 
			
		||||
        article: Int,
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        sortType: SortType.Type,
 | 
			
		||||
        expandChildren: Boolean,
 | 
			
		||||
        page: Int,
 | 
			
		||||
        commentFilter: CommentFilter,
 | 
			
		||||
        listener: FetchCommentListListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    fun fetchSubscribedThings(
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        accountName: String,
 | 
			
		||||
        listener: FetchSubscribedThingsListener
 | 
			
		||||
    )
 | 
			
		||||
    fun fetchCommunityData(
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        subredditName: String,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: FetchCommunityDataListener
 | 
			
		||||
    )
 | 
			
		||||
    fun fetchPost(
 | 
			
		||||
        executor: Executor,
 | 
			
		||||
        handler: Handler,
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        postEnricher: PostEnricher,
 | 
			
		||||
        listener: ApiHandler.FetchPostListener
 | 
			
		||||
    )
 | 
			
		||||
    fun fetchUser(
 | 
			
		||||
        redditDataRoomDatabase: RedditDataRoomDatabase,
 | 
			
		||||
        username: String,
 | 
			
		||||
        auth: String?,
 | 
			
		||||
        listener: ApiHandler.FetchUserListener
 | 
			
		||||
    )
 | 
			
		||||
    fun fetchSiteInfo(
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: FetchSiteInfoListener
 | 
			
		||||
    )
 | 
			
		||||
    fun fetchComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: FetchCommentListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Other operations
 | 
			
		||||
    fun markPostAsRead(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        isRead: Boolean,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: MarkPostAsReadListener
 | 
			
		||||
    )
 | 
			
		||||
    fun markCommentAsRead(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        isRead: Boolean,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: MarkCommentAsReadListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    //Voting
 | 
			
		||||
    fun votePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        point: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: VoteListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    fun voteComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        point: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: VoteListener
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    interface BlockCommunityListener {
 | 
			
		||||
        fun onSuccess()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface BlockInstanceListener {
 | 
			
		||||
        fun onResponse()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface BlockUserListener {
 | 
			
		||||
        fun success()
 | 
			
		||||
        fun failed()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface ReportPostListener {
 | 
			
		||||
        fun success()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface SavePostListener {
 | 
			
		||||
        fun success()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface SaveCommentListener {
 | 
			
		||||
        fun success()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface SubmitPostListener {
 | 
			
		||||
        fun success(post: Post)
 | 
			
		||||
        fun onFailure(error: String?)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface SubmitCommentListener {
 | 
			
		||||
        fun success(comment: Comment)
 | 
			
		||||
        fun onFailure(error: String?)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface EditPostListener {
 | 
			
		||||
        fun success()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface EditCommentListener {
 | 
			
		||||
        fun success(comment: Comment)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface DeletePostListener {
 | 
			
		||||
        fun success()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface DeleteCommentListener {
 | 
			
		||||
        fun success()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchCommentsListener {
 | 
			
		||||
        fun onSuccess(comments: List<Comment>)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchSubscribedThingsListener {
 | 
			
		||||
        fun onSuccess(blockedUsers: List<BlockedUserData>, blockedCommunities: List<BlockedCommunityData>, blockedInstances: List<BlockedInstanceData>)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchCommunityDataListener {
 | 
			
		||||
        fun onSuccess(subredditData: SubredditData)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchPostListener {
 | 
			
		||||
        fun onSuccess(post: Post)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchUserListener {
 | 
			
		||||
        fun onSuccess(userData: UserData)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchSiteInfoListener {
 | 
			
		||||
        fun onSuccess(siteInfo: SiteInfo, myUserInfo: MyUserInfo)
 | 
			
		||||
        fun onFailure(parseFailed: Boolean)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchCommentListListener {
 | 
			
		||||
        fun onSuccess(topLevelComments: ArrayList<Comment>,
 | 
			
		||||
                      expandedComments: ArrayList<Comment>,
 | 
			
		||||
                      parentId: Int, moreChildrenIds: ArrayList<Int>)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface FetchCommentListener {
 | 
			
		||||
        fun onSuccess(comment: Comment)
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface MarkPostAsReadListener {
 | 
			
		||||
        fun onSuccess()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface MarkCommentAsReadListener {
 | 
			
		||||
        fun onSuccess()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface VoteListener {
 | 
			
		||||
        fun onVoteThingSuccess()
 | 
			
		||||
        fun onVoteThingFail()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    interface ReportCommentListener {
 | 
			
		||||
        fun onSuccess()
 | 
			
		||||
        fun onFailure()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,972 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.apis.apihandler
 | 
			
		||||
 | 
			
		||||
import android.os.Handler
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler.SubmitPostListener
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.ParseComment
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.ParseComment.ParseCommentListener
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.ParseComment.ParseSentCommentListener
 | 
			
		||||
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.*
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.ParsePost
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.ParsePost.ParsePostListener
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.Post
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher
 | 
			
		||||
import eu.toldi.infinityforlemmy.site.SiteInfo
 | 
			
		||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData
 | 
			
		||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData.ParseSubredditDataListener
 | 
			
		||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData
 | 
			
		||||
import eu.toldi.infinityforlemmy.user.MyUserInfo
 | 
			
		||||
import eu.toldi.infinityforlemmy.user.ParseUserData
 | 
			
		||||
import eu.toldi.infinityforlemmy.user.ParseUserData.ParseUserDataListener
 | 
			
		||||
import eu.toldi.infinityforlemmy.user.UserData
 | 
			
		||||
import org.json.JSONException
 | 
			
		||||
import org.json.JSONObject
 | 
			
		||||
import retrofit2.Call
 | 
			
		||||
import retrofit2.Callback
 | 
			
		||||
import retrofit2.Response
 | 
			
		||||
import retrofit2.Retrofit
 | 
			
		||||
import java.io.IOException
 | 
			
		||||
import java.util.concurrent.Executor
 | 
			
		||||
 | 
			
		||||
class LemmyBetaApiHandler(private val retrofit: Retrofit) : ApiHandler {
 | 
			
		||||
 | 
			
		||||
    private val api: LemmyBetaAPI = retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
 | 
			
		||||
    // Community Block
 | 
			
		||||
    override fun blockCommunity(
 | 
			
		||||
        communityId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.BlockCommunityListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.communityBlock(BlockCommunityDTO(communityId, true, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.onSuccess()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun unblockCommunity(
 | 
			
		||||
        communityId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.BlockCommunityListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.communityBlock(BlockCommunityDTO(communityId, false, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.onSuccess()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Instance Block
 | 
			
		||||
    override fun blockInstance(
 | 
			
		||||
        instanceId: Int,
 | 
			
		||||
        block: Boolean,
 | 
			
		||||
        listener: ApiHandler.BlockInstanceListener
 | 
			
		||||
    ) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        api.blockInstance(BlockInstanceDTO(instanceId, block))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.onResponse()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun unblockInstance(
 | 
			
		||||
        instanceId: Int,
 | 
			
		||||
        listener: ApiHandler.BlockInstanceListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.blockInstance(BlockInstanceDTO(instanceId, false))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.onResponse()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // User Block
 | 
			
		||||
    override fun blockUser(
 | 
			
		||||
        userId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.BlockUserListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.userBlock(UserBlockDTO(userId, true, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.failed()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.failed()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun unblockUser(
 | 
			
		||||
        userId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.BlockUserListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.userBlock(UserBlockDTO(userId, false, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.failed()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.failed()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Report Post
 | 
			
		||||
    override fun reportPost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        reason: String,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.ReportPostListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postReport(ReportPostDTO(postId, reason, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Save Post
 | 
			
		||||
    override fun savePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.SavePostListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postSave(SavePostDTO(postId, true, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun unsavePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.SavePostListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postSave(SavePostDTO(postId, false, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun reportComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        reason: String,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.ReportCommentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        TODO("Not yet implemented")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Save Comment
 | 
			
		||||
    override fun saveComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.SaveCommentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.commentSave(SaveCommentDTO(commentId, true, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun unsaveComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.SaveCommentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.commentSave(SaveCommentDTO(commentId, false, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(call: Call<String>, t: Throwable) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Submit Post
 | 
			
		||||
    override fun submitPost(executor:Executor,
 | 
			
		||||
                            handler: Handler, accessToken: String,
 | 
			
		||||
                            communityId: Int, title: String, content: String,
 | 
			
		||||
                            isNSFW: Boolean,
 | 
			
		||||
                            receivePostReplyNotifications: Boolean, kind: String,
 | 
			
		||||
                            posterUrl: String?, postEnricher: PostEnricher,
 | 
			
		||||
                            submitPostListener: SubmitPostListener
 | 
			
		||||
    ){
 | 
			
		||||
        val submitPostCall = api.postCreate(
 | 
			
		||||
            SubmitPostDTO(
 | 
			
		||||
                title,
 | 
			
		||||
                communityId,
 | 
			
		||||
                posterUrl,
 | 
			
		||||
                content,
 | 
			
		||||
                null,
 | 
			
		||||
                isNSFW,
 | 
			
		||||
                null,
 | 
			
		||||
                accessToken
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            val response = submitPostCall.execute()
 | 
			
		||||
            if (response.isSuccessful) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                ParsePost.parsePost(
 | 
			
		||||
                    executor,
 | 
			
		||||
                    handler,
 | 
			
		||||
                    postEnricher,
 | 
			
		||||
                    response.body(),
 | 
			
		||||
                    object : ParsePostListener {
 | 
			
		||||
                        override fun onParsePostSuccess(post: Post) {
 | 
			
		||||
                            submitPostListener.success(post)
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        override fun onParsePostFail() {
 | 
			
		||||
                            submitPostListener.onFailure(null)
 | 
			
		||||
                        }
 | 
			
		||||
                    })
 | 
			
		||||
            } else {
 | 
			
		||||
                submitPostListener.onFailure(response.message())
 | 
			
		||||
            }
 | 
			
		||||
        } catch (e: IOException) {
 | 
			
		||||
            e.printStackTrace()
 | 
			
		||||
            submitPostListener.onFailure(e.message)
 | 
			
		||||
        } catch (e: JSONException) {
 | 
			
		||||
            e.printStackTrace()
 | 
			
		||||
            submitPostListener.onFailure(e.message)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Submit Comment
 | 
			
		||||
    override fun submitComment(
 | 
			
		||||
        executor:Executor,
 | 
			
		||||
        handler: Handler,
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        content: String,
 | 
			
		||||
        parentId: Int?,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.SubmitCommentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postComment(
 | 
			
		||||
            CommentDTO(content, postId, parentId, null, null,  auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        ParseComment.parseSentComment(
 | 
			
		||||
                            executor,
 | 
			
		||||
                            handler,
 | 
			
		||||
                            response.body(),
 | 
			
		||||
                            object : ParseSentCommentListener {
 | 
			
		||||
                                override fun onParseSentCommentSuccess(comment: Comment) {
 | 
			
		||||
                                    listener.success(comment)
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                override fun onParseSentCommentFailed(errorMessage: String?) {
 | 
			
		||||
                                    listener.onFailure(errorMessage)
 | 
			
		||||
                                }
 | 
			
		||||
                            })
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure(null)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure(null)
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun editComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        content: String,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.EditCommentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        TODO("Not yet implemented")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Edit Post
 | 
			
		||||
    override fun editPost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        title: String,
 | 
			
		||||
        content: String,
 | 
			
		||||
        posterUrl: String,
 | 
			
		||||
        isNSFW: Boolean,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.EditPostListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postUpdate(
 | 
			
		||||
            EditPostDTO(postId, title, content,posterUrl, isNSFW,null, auth)
 | 
			
		||||
        )
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                       listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Delete Post
 | 
			
		||||
    override fun deletePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.DeletePostListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postDelete(DeletePostDTO(postId,true, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Delete Comment
 | 
			
		||||
    override fun deleteComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.DeleteCommentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.commentDelete(DeleteCommentDTO(commentId,true, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.success()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch Comments
 | 
			
		||||
    override fun fetchComments(
 | 
			
		||||
        executor: Executor,
 | 
			
		||||
        handler: Handler,
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        accessToken: String?,
 | 
			
		||||
        article: Int,
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        sortType: SortType.Type,
 | 
			
		||||
        expandChildren: Boolean,
 | 
			
		||||
        page: Int,
 | 
			
		||||
        commentFilter: CommentFilter,
 | 
			
		||||
        listener: ApiHandler.FetchCommentListListener
 | 
			
		||||
    ) {
 | 
			
		||||
        val comments = api.getComments(
 | 
			
		||||
            "All",
 | 
			
		||||
            sortType.value,
 | 
			
		||||
            8,
 | 
			
		||||
            page,
 | 
			
		||||
            25,
 | 
			
		||||
            null,
 | 
			
		||||
            null,
 | 
			
		||||
            article,
 | 
			
		||||
            commentId,
 | 
			
		||||
            false,
 | 
			
		||||
            accessToken
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        comments.enqueue(object : Callback<String?> {
 | 
			
		||||
            override fun onResponse(call: Call<String?>, response: Response<String?>) {
 | 
			
		||||
                if (response.isSuccessful) {
 | 
			
		||||
                    ParseComment.parseComments(
 | 
			
		||||
                        executor, handler, response.body(), commentId,
 | 
			
		||||
                        expandChildren, commentFilter,
 | 
			
		||||
                        object : ParseCommentListener {
 | 
			
		||||
                            override fun onParseCommentSuccess(
 | 
			
		||||
                                topLevelComments: ArrayList<Comment>,
 | 
			
		||||
                                expandedComments: ArrayList<Comment>,
 | 
			
		||||
                                parentId: Int, moreChildrenIds: ArrayList<Int>
 | 
			
		||||
                            ) {
 | 
			
		||||
                                listener.onSuccess( topLevelComments, expandedComments, parentId, moreChildrenIds)
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            override fun onParseCommentFailed() {
 | 
			
		||||
                                listener.onFailure()
 | 
			
		||||
                            }
 | 
			
		||||
                        })
 | 
			
		||||
                } else {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            override fun onFailure(call: Call<String?>, t: Throwable) {
 | 
			
		||||
                listener.onFailure()
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch Subscribed Things
 | 
			
		||||
    override fun fetchSubscribedThings(
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        accountName: String,
 | 
			
		||||
        listener: ApiHandler.FetchSubscribedThingsListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.listCommunities("Subscribed", null, 1, null, accessToken)
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        // Parse and return the data
 | 
			
		||||
                        listener.onSuccess(listOf(), listOf(), listOf())
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch Subreddit Data
 | 
			
		||||
    override fun fetchCommunityData(
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        subredditName: String,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: ApiHandler.FetchCommunityDataListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.communityInfo(subredditName, accessToken)
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        ParseSubredditData.parseSubredditData(
 | 
			
		||||
                            response.body(),
 | 
			
		||||
                            object : ParseSubredditDataListener {
 | 
			
		||||
                                override fun onParseSubredditDataSuccess(
 | 
			
		||||
                                    subredditData: SubredditData,
 | 
			
		||||
                                    nCurrentOnlineSubscribers: Int
 | 
			
		||||
                                ) {
 | 
			
		||||
                                    listener.onSuccess(
 | 
			
		||||
                                        subredditData
 | 
			
		||||
                                    )
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                override fun onParseSubredditDataFail() {
 | 
			
		||||
                                    listener.onFailure()
 | 
			
		||||
                                }
 | 
			
		||||
                            })
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch Post
 | 
			
		||||
    override fun fetchPost(
 | 
			
		||||
        executor: Executor,
 | 
			
		||||
        handler: Handler,
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        postEnricher: PostEnricher,
 | 
			
		||||
        listener: ApiHandler.FetchPostListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postInfo(postId, null, accessToken)
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        ParsePost.parsePost(
 | 
			
		||||
                            executor,
 | 
			
		||||
                            handler,
 | 
			
		||||
                            postEnricher,
 | 
			
		||||
                            response.body(),
 | 
			
		||||
                            object : ParsePostListener {
 | 
			
		||||
                                override fun onParsePostSuccess(post: Post) {
 | 
			
		||||
                                    listener.onSuccess(post)
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                override fun onParsePostFail() {
 | 
			
		||||
                                    listener.onFailure()
 | 
			
		||||
                                }
 | 
			
		||||
                            })
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch User
 | 
			
		||||
    override fun fetchUser(
 | 
			
		||||
        redditDataRoomDatabase: RedditDataRoomDatabase,
 | 
			
		||||
        username: String,
 | 
			
		||||
        auth: String?,
 | 
			
		||||
        listener: ApiHandler.FetchUserListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.userInfo(username,auth)
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        ParseUserData.parseUserData(
 | 
			
		||||
                            redditDataRoomDatabase,
 | 
			
		||||
                            response.body(),
 | 
			
		||||
                            object : ParseUserDataListener {
 | 
			
		||||
                                override fun onParseUserDataSuccess(
 | 
			
		||||
                                    userData: UserData,
 | 
			
		||||
                                    inboxCount: Int
 | 
			
		||||
                                ) {
 | 
			
		||||
                                    listener.onSuccess(
 | 
			
		||||
                                        userData
 | 
			
		||||
                                    )
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                override fun onParseUserDataFailed() {
 | 
			
		||||
                                    listener.onFailure()
 | 
			
		||||
                                }
 | 
			
		||||
                            })
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch Site Info
 | 
			
		||||
    override fun fetchSiteInfo(
 | 
			
		||||
        retrofit: Retrofit,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: ApiHandler.FetchSiteInfoListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.getSiteInfo(accessToken)
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        try {
 | 
			
		||||
                            val siteInfoJson = response.body()
 | 
			
		||||
                            val siteInfo = SiteInfo.parseSiteInfo(siteInfoJson)
 | 
			
		||||
                            val myUserInfo = MyUserInfo.parseFromSiteInfo(siteInfoJson)
 | 
			
		||||
                            listener.onSuccess(siteInfo, myUserInfo)
 | 
			
		||||
                        } catch (e: JSONException) {
 | 
			
		||||
                            listener.onFailure(true)
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure(false)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure(false)
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Fetch Comment
 | 
			
		||||
    override fun fetchComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: ApiHandler.FetchCommentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.getComment(commentId, accessToken)
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        try {
 | 
			
		||||
                            val comment = ParseComment.parseSingleComment(
 | 
			
		||||
                                response.body()
 | 
			
		||||
                                    ?.let { JSONObject(it).getJSONObject("comment_view") }
 | 
			
		||||
                            )
 | 
			
		||||
                            listener.onSuccess(comment)
 | 
			
		||||
                        } catch (e: JSONException) {
 | 
			
		||||
                            listener.onFailure()
 | 
			
		||||
                        }
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Mark Post as Read
 | 
			
		||||
    override fun markPostAsRead(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        isRead: Boolean,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.MarkPostAsReadListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.postRead(ReadPostDTO(postId, isRead, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.onSuccess()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Mark Comment as Read
 | 
			
		||||
    override fun markCommentAsRead(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        isRead: Boolean,
 | 
			
		||||
        auth: String,
 | 
			
		||||
        listener: ApiHandler.MarkCommentAsReadListener
 | 
			
		||||
    ) {
 | 
			
		||||
        api.commentMarkAsRead(ReadCommentDTO(commentId, isRead, auth))
 | 
			
		||||
            .enqueue(object : Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    response: Response<String>
 | 
			
		||||
                ) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
                        listener.onSuccess()
 | 
			
		||||
                    } else {
 | 
			
		||||
                        listener.onFailure()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                override fun onFailure(
 | 
			
		||||
                    call: Call<String>,
 | 
			
		||||
                    t: Throwable
 | 
			
		||||
                ) {
 | 
			
		||||
                    listener.onFailure()
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun votePost(
 | 
			
		||||
        postId: Int,
 | 
			
		||||
        point: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: ApiHandler.VoteListener
 | 
			
		||||
    ) {
 | 
			
		||||
        val voteThingCall = api.postLike(PostVoteDTO(postId, point, accessToken))
 | 
			
		||||
        voteThingCall.enqueue(object : Callback<String> {
 | 
			
		||||
            override fun onResponse(call: Call<String>, response: Response<String>) {
 | 
			
		||||
                if (response.isSuccessful) {
 | 
			
		||||
                    listener.onVoteThingSuccess()
 | 
			
		||||
                } else {
 | 
			
		||||
                    listener.onVoteThingFail()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            override fun onFailure(call: Call<String>, t: Throwable) {
 | 
			
		||||
                listener.onVoteThingFail()
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    override fun voteComment(
 | 
			
		||||
        commentId: Int,
 | 
			
		||||
        point: Int,
 | 
			
		||||
        accessToken: String,
 | 
			
		||||
        listener: ApiHandler.VoteListener
 | 
			
		||||
    ) {
 | 
			
		||||
        val voteThingCall = api.commentLike(CommentVoteDTO(commentId, point, accessToken))
 | 
			
		||||
        voteThingCall.enqueue(object : Callback<String> {
 | 
			
		||||
            override fun onResponse(call: Call<String>, response: Response<String>) {
 | 
			
		||||
                if (response.isSuccessful) {
 | 
			
		||||
                    listener.onVoteThingSuccess()
 | 
			
		||||
                } else {
 | 
			
		||||
                    listener.onVoteThingFail()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            override fun onFailure(call: Call<String>, t: Throwable) {
 | 
			
		||||
                listener.onVoteThingFail()
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,66 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.apis.provider
 | 
			
		||||
 | 
			
		||||
import android.util.Log
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.LemmyBetaApiHandler
 | 
			
		||||
import eu.toldi.infinityforlemmy.network.SortTypeConverterFactory
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.APIUtils
 | 
			
		||||
import okhttp3.Interceptor
 | 
			
		||||
import okhttp3.OkHttpClient
 | 
			
		||||
import retrofit2.Retrofit
 | 
			
		||||
import retrofit2.adapter.guava.GuavaCallAdapterFactory
 | 
			
		||||
import retrofit2.converter.gson.GsonConverterFactory
 | 
			
		||||
import retrofit2.converter.scalars.ScalarsConverterFactory
 | 
			
		||||
 | 
			
		||||
class ApiHandlerProvider(private val okHttpClientBase: OkHttpClient) {
 | 
			
		||||
 | 
			
		||||
    private var _baseURL = APIUtils.API_BASE_URI
 | 
			
		||||
    private var retrofit = createRetrofit(okHttpClientBase,_baseURL)
 | 
			
		||||
    private var _accessToken: String? = null;
 | 
			
		||||
    private var oAuthInterceptor: Interceptor? = null
 | 
			
		||||
    private var okHttpClient = okHttpClientBase
 | 
			
		||||
    private var _apiHandler : ApiHandler = LemmyBetaApiHandler(retrofit)
 | 
			
		||||
    var baseUrl: String
 | 
			
		||||
        get() {
 | 
			
		||||
            var result: String = _baseURL
 | 
			
		||||
            if (_baseURL.endsWith("/")) {
 | 
			
		||||
                result = _baseURL.substring(0, _baseURL.length - 1)
 | 
			
		||||
            }
 | 
			
		||||
            return result
 | 
			
		||||
        }
 | 
			
		||||
        set(value) {
 | 
			
		||||
            _baseURL = value
 | 
			
		||||
            retrofit = createRetrofit(okHttpClientBase,_baseURL)
 | 
			
		||||
            _apiHandler = LemmyBetaApiHandler(retrofit)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    var accessToken: String?
 | 
			
		||||
        get() = _accessToken
 | 
			
		||||
        set(value) {
 | 
			
		||||
            _accessToken = value
 | 
			
		||||
            val builder = okHttpClientBase.newBuilder()
 | 
			
		||||
            Log.d("ApiHandlerProvider", "Access token changed")
 | 
			
		||||
            if (accessToken != null && accessToken != "") {
 | 
			
		||||
                Log.i("ApiHandlerProvider", "Setting access token interceptor")
 | 
			
		||||
                oAuthInterceptor = APIUtils.getOAuthInterceptor(accessToken)
 | 
			
		||||
                builder.addInterceptor(oAuthInterceptor!!)
 | 
			
		||||
            }
 | 
			
		||||
            okHttpClient = builder.build()
 | 
			
		||||
            retrofit = createRetrofit(okHttpClient, baseUrl)
 | 
			
		||||
            _apiHandler = LemmyBetaApiHandler(retrofit)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    val apiHandler: ApiHandler
 | 
			
		||||
        get() = _apiHandler
 | 
			
		||||
 | 
			
		||||
    private fun createRetrofit(okHttpClient: OkHttpClient, baseUrl: String): Retrofit {
 | 
			
		||||
        return Retrofit.Builder()
 | 
			
		||||
            .baseUrl(baseUrl)
 | 
			
		||||
            .client(okHttpClient)
 | 
			
		||||
            .addConverterFactory(ScalarsConverterFactory.create())
 | 
			
		||||
            .addConverterFactory(SortTypeConverterFactory.create())
 | 
			
		||||
            .addCallAdapterFactory(GuavaCallAdapterFactory.create())
 | 
			
		||||
            .addConverterFactory(GsonConverterFactory.create())
 | 
			
		||||
            .build()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -16,7 +16,7 @@ import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.NetworkState;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
import retrofit2.Response;
 | 
			
		||||
@@ -73,7 +73,7 @@ public class CommentDataSource extends PageKeyedDataSource<Integer, Comment> {
 | 
			
		||||
    @Override
 | 
			
		||||
public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull LoadInitialCallback<Integer, Comment> callback) {
 | 
			
		||||
    updateNetworkState(initialLoadStateLiveData, NetworkState.LOADING);
 | 
			
		||||
    LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
    LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
    if (query != null && !query.isEmpty()) {
 | 
			
		||||
        fetchComments(api.search(query, null, null, null,"Comments", sortType.getType().value,"All",1, 25, accessToken), callback, true);
 | 
			
		||||
    } else {
 | 
			
		||||
@@ -85,7 +85,7 @@ public void loadInitial(@NonNull LoadInitialParams<Integer> params, @NonNull Loa
 | 
			
		||||
public void loadAfter(@NonNull LoadParams<Integer> params, @NonNull LoadCallback<Integer, Comment> callback) {
 | 
			
		||||
    this.params = params;
 | 
			
		||||
    updateNetworkState(paginationNetworkStateLiveData, NetworkState.LOADING);
 | 
			
		||||
    LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
    LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
    if (query != null && !query.isEmpty()) {
 | 
			
		||||
        fetchComments(api.search(query, null, null, null,"Comments", sortType.getType().value,"All",params.key, 25, accessToken), callback, false);
 | 
			
		||||
    } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,8 @@ import java.util.ArrayList;
 | 
			
		||||
import java.util.concurrent.Executor;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.commentfilter.CommentFilter;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
@@ -24,7 +25,7 @@ public class FetchComment {
 | 
			
		||||
                                     @Nullable String accessToken, Integer article,
 | 
			
		||||
                                     Integer commentId, SortType.Type sortType, boolean expandChildren,
 | 
			
		||||
                                     Integer page, CommentFilter commentFilter, FetchCommentListener fetchCommentListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
        Call<String> comments;
 | 
			
		||||
 | 
			
		||||
        comments = api.getComments("All", sortType.value, 8, page, 25, null, null, article, commentId, false, accessToken);
 | 
			
		||||
@@ -66,7 +67,7 @@ public class FetchComment {
 | 
			
		||||
                                        @Nullable String accessToken, int article,
 | 
			
		||||
                                        int commentId, SortType.Type sortType, boolean expandChildren,
 | 
			
		||||
                                        Integer page, FetchMoreCommentListener fetchMoreCommentListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
        Call<String> moreComments;
 | 
			
		||||
 | 
			
		||||
        moreComments = api.getComments("All", sortType.value, 8, page, 25, null, null, article, commentId, false, accessToken);
 | 
			
		||||
@@ -105,7 +106,7 @@ public class FetchComment {
 | 
			
		||||
 | 
			
		||||
    public static void fetchSingleComment(Retrofit retrofit, @Nullable String accessToken, int commentId,
 | 
			
		||||
                                          FetchCommentListener fetchCommentListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
        Call<String> comment = api.getComment(commentId, accessToken);
 | 
			
		||||
        comment.enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -201,7 +201,7 @@ public class ParseComment {
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static void parseSentComment(Executor executor, Handler handler, String response,
 | 
			
		||||
    public static void parseSentComment(Executor executor, Handler handler, String response,
 | 
			
		||||
                                 ParseSentCommentListener parseSentCommentListener) {
 | 
			
		||||
        executor.execute(() -> {
 | 
			
		||||
            try {
 | 
			
		||||
@@ -432,7 +432,7 @@ public class ParseComment {
 | 
			
		||||
        void onParseCommentFailed();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface ParseSentCommentListener {
 | 
			
		||||
    public interface ParseSentCommentListener {
 | 
			
		||||
        void onParseSentCommentSuccess(Comment comment);
 | 
			
		||||
 | 
			
		||||
        void onParseSentCommentFailed(@Nullable String errorMessage);
 | 
			
		||||
 
 | 
			
		||||
@@ -5,15 +5,11 @@ import android.os.Handler;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.concurrent.Executor;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.account.Account;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.CommentDTO;
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
import retrofit2.Response;
 | 
			
		||||
@@ -27,7 +23,7 @@ public class SendComment {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        retrofit.create(LemmyAPI.class).postComment(new CommentDTO(commentMarkdown, post_id,parent_id, null,null,account.getAccessToken())).enqueue(new Callback<String>() {
 | 
			
		||||
        retrofit.create(LemmyBetaAPI.class).postComment(new CommentDTO(commentMarkdown, post_id,parent_id, null,null,account.getAccessToken())).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,7 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.CommentsListingRecyclerViewAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.CommentViewModel;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
 | 
			
		||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
 | 
			
		||||
@@ -99,6 +100,8 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
 | 
			
		||||
    CustomThemeWrapper customThemeWrapper;
 | 
			
		||||
    @Inject
 | 
			
		||||
    Executor mExecutor;
 | 
			
		||||
    @Inject
 | 
			
		||||
    ApiHandlerProvider apiHandlerProvider;
 | 
			
		||||
    private String mAccessToken;
 | 
			
		||||
    private RequestManager mGlide;
 | 
			
		||||
    private BaseActivity mActivity;
 | 
			
		||||
@@ -261,7 +264,7 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni
 | 
			
		||||
            mLinearLayoutManager = new LinearLayoutManagerBugFixed(mActivity);
 | 
			
		||||
            mCommentRecyclerView.setLayoutManager(mLinearLayoutManager);
 | 
			
		||||
 | 
			
		||||
            mAdapter = new CommentsListingRecyclerViewAdapter(mActivity, mRetrofit.getRetrofit(), customThemeWrapper,
 | 
			
		||||
            mAdapter = new CommentsListingRecyclerViewAdapter(mActivity, mRetrofit.getRetrofit(), apiHandlerProvider.getApiHandler(), customThemeWrapper,
 | 
			
		||||
                    getResources().getConfiguration().locale, mSharedPreferences,
 | 
			
		||||
                    getArguments().getString(EXTRA_ACCESS_TOKEN), getArguments().getString(EXTRA_ACCOUNT_NAME),
 | 
			
		||||
                    () -> mCommentViewModel.retryLoadingMore());
 | 
			
		||||
 
 | 
			
		||||
@@ -84,6 +84,7 @@ import eu.toldi.infinityforlemmy.activities.ViewSubredditDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.Paging3LoadingStateAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.PostRecyclerViewAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.LoadSubredditIcon;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
 | 
			
		||||
@@ -184,6 +185,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
    @Named("no_oauth")
 | 
			
		||||
    RetrofitHolder mRetrofit;
 | 
			
		||||
    @Inject
 | 
			
		||||
    ApiHandlerProvider apiHandlerProvider;
 | 
			
		||||
    @Inject
 | 
			
		||||
    @Named("oauth")
 | 
			
		||||
    Retrofit mOauthRetrofit;
 | 
			
		||||
    @Inject
 | 
			
		||||
@@ -465,7 +468,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
            sortType = new SortType(st == null ? SortType.Type.TOP_ALL : st,sortTime != null ? SortType.Time.valueOf(sortTime) : null);
 | 
			
		||||
            postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST, defaultPostLayout);
 | 
			
		||||
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
 | 
			
		||||
                    accessToken, accountName, postType, postLayout, true,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
 | 
			
		||||
@@ -540,7 +543,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
            postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SUBREDDIT_POST_BASE + subredditName, defaultPostLayout);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,apiHandlerProvider,
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
 | 
			
		||||
                    accessToken, accountName, postType, postLayout, displaySubredditName,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
 | 
			
		||||
@@ -609,7 +612,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
                    defaultPostLayout);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
 | 
			
		||||
                    accessToken, accountName, postType, postLayout, true,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
 | 
			
		||||
@@ -675,7 +678,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
 | 
			
		||||
            postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE + username, defaultPostLayout);
 | 
			
		||||
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
 | 
			
		||||
                    accessToken, accountName, postType, postLayout, true,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
 | 
			
		||||
@@ -737,7 +740,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
 | 
			
		||||
            postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
 | 
			
		||||
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
 | 
			
		||||
                    accessToken, accountName, postType, postLayout, true,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
 | 
			
		||||
@@ -796,7 +799,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
 | 
			
		||||
            postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE + multiRedditPath, defaultPostLayout);
 | 
			
		||||
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
 | 
			
		||||
                    accessToken, accountName, postType, postLayout, true,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
 | 
			
		||||
@@ -852,7 +855,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
 | 
			
		||||
            sortType = newSortType(sort, sortTime);
 | 
			
		||||
            postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
 | 
			
		||||
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit,
 | 
			
		||||
            mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mRetrofit, apiHandlerProvider,
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale,
 | 
			
		||||
                    accessToken, accountName, postType, postLayout, true,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
 | 
			
		||||
 
 | 
			
		||||
@@ -77,8 +77,6 @@ import eu.toldi.infinityforlemmy.Infinity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.R;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SavePost;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SaveThing;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.CommentActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.EditPostActivity;
 | 
			
		||||
@@ -87,8 +85,10 @@ import eu.toldi.infinityforlemmy.activities.SubmitCrosspostActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.activities.ViewPostDetailActivity;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.CommentsRecyclerViewAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.adapters.PostDetailRecyclerViewAdapter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.StreamableAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.apihandler.ApiHandler;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.provider.ApiHandlerProvider;
 | 
			
		||||
import eu.toldi.infinityforlemmy.asynctasks.LoadUserData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.PostCommentSortTypeBottomSheetFragment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
@@ -161,6 +161,8 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
    @Named("no_oauth")
 | 
			
		||||
    RetrofitHolder mRetrofit;
 | 
			
		||||
    @Inject
 | 
			
		||||
    ApiHandlerProvider apiHandlerProvider;
 | 
			
		||||
    @Inject
 | 
			
		||||
    @Named("pushshift")
 | 
			
		||||
    Retrofit pushshiftRetrofit;
 | 
			
		||||
    @Inject
 | 
			
		||||
@@ -619,13 +621,13 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
            setupMenu();
 | 
			
		||||
 | 
			
		||||
            mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
 | 
			
		||||
                    this, mExecutor, mCustomThemeWrapper, mRetrofit,
 | 
			
		||||
                    this, mExecutor, mCustomThemeWrapper, mRetrofit, apiHandlerProvider.getApiHandler(),
 | 
			
		||||
                    mRedgifsRetrofit, mStreamableApiProvider, mRedditDataRoomDatabase, mGlide,
 | 
			
		||||
                    mSeparatePostAndComments, mAccessToken, mAccountName, mPost, mLocale,
 | 
			
		||||
                    mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostDetailsSharedPreferences,
 | 
			
		||||
                    mExoCreator, post -> EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition)));
 | 
			
		||||
            mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
 | 
			
		||||
                    this, mCustomThemeWrapper, mExecutor, mRetrofit,
 | 
			
		||||
                    this, mCustomThemeWrapper, mExecutor, mRetrofit, apiHandlerProvider.getApiHandler(),
 | 
			
		||||
                    mAccessToken, mAccountQualifiedName, mPost, mLocale, mSingleCommentId
 | 
			
		||||
                    , isSingleCommentThreadMode, mSharedPreferences, mCurrentAccountSharedPreferences,
 | 
			
		||||
                    new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
 | 
			
		||||
@@ -959,11 +961,10 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
            return true;
 | 
			
		||||
        } else if (itemId == R.id.action_save_view_post_detail_fragment) {
 | 
			
		||||
            if (mPost != null && mAccessToken != null) {
 | 
			
		||||
                SavePost savePost = new SavePost();
 | 
			
		||||
                if (mPost.isSaved()) {
 | 
			
		||||
                    item.setIcon(mUnsavedIcon);
 | 
			
		||||
                    savePost.unsaveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
 | 
			
		||||
                            new SaveThing.SaveThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().unsavePost(mPost.getId(),mAccessToken,
 | 
			
		||||
                            new ApiHandler.SavePostListener() {
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void success() {
 | 
			
		||||
                                    if (isAdded()) {
 | 
			
		||||
@@ -975,7 +976,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void failed() {
 | 
			
		||||
                                public void onFailure() {
 | 
			
		||||
                                    if (isAdded()) {
 | 
			
		||||
                                        mPost.setSaved(true);
 | 
			
		||||
                                        item.setIcon(mSavedIcon);
 | 
			
		||||
@@ -986,8 +987,8 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
                            });
 | 
			
		||||
                } else {
 | 
			
		||||
                    item.setIcon(mSavedIcon);
 | 
			
		||||
                    savePost.saveThing(mRetrofit.getRetrofit(), mAccessToken, mPost.getId(),
 | 
			
		||||
                            new SaveThing.SaveThingListener() {
 | 
			
		||||
                    apiHandlerProvider.getApiHandler().savePost(mPost.getId(),mAccessToken,
 | 
			
		||||
                            new ApiHandler.SavePostListener() {
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void success() {
 | 
			
		||||
                                    if (isAdded()) {
 | 
			
		||||
@@ -999,7 +1000,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public void failed() {
 | 
			
		||||
                                public void onFailure() {
 | 
			
		||||
                                    if (isAdded()) {
 | 
			
		||||
                                        mPost.setSaved(false);
 | 
			
		||||
                                        item.setIcon(mUnsavedIcon);
 | 
			
		||||
@@ -1355,7 +1356,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
                        mPost = post;
 | 
			
		||||
                        mPostAdapter = new PostDetailRecyclerViewAdapter(activity,
 | 
			
		||||
                                ViewPostDetailFragment.this, mExecutor, mCustomThemeWrapper,
 | 
			
		||||
                                mRetrofit, mRedgifsRetrofit,
 | 
			
		||||
                                mRetrofit, apiHandlerProvider.getApiHandler(),mRedgifsRetrofit,
 | 
			
		||||
                                mStreamableApiProvider, mRedditDataRoomDatabase, mGlide, mSeparatePostAndComments,
 | 
			
		||||
                                mAccessToken, mAccountName, mPost, mLocale, mSharedPreferences,
 | 
			
		||||
                                mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences,
 | 
			
		||||
@@ -1368,7 +1369,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
                                pages_loaded++;
 | 
			
		||||
                                mCommentsAdapter = new CommentsRecyclerViewAdapter(activity,
 | 
			
		||||
                                        ViewPostDetailFragment.this, mCustomThemeWrapper, mExecutor,
 | 
			
		||||
                                        mRetrofit, mAccessToken, mAccountQualifiedName, mPost, mLocale,
 | 
			
		||||
                                        mRetrofit, apiHandlerProvider.getApiHandler(), mAccessToken, mAccountQualifiedName, mPost, mLocale,
 | 
			
		||||
                                        mSingleCommentId, isSingleCommentThreadMode, mSharedPreferences, mCurrentAccountSharedPreferences,
 | 
			
		||||
                                        new CommentsRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
 | 
			
		||||
                                            @Override
 | 
			
		||||
@@ -1613,7 +1614,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
 | 
			
		||||
        Map<String, String> params = new HashMap<>();
 | 
			
		||||
        params.put(APIUtils.ID_KEY, mPost.getFullName());
 | 
			
		||||
        mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), true, null, mAccessToken))
 | 
			
		||||
        mRetrofit.getRetrofit().create(LemmyBetaAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), true, null, mAccessToken))
 | 
			
		||||
                .enqueue(new Callback<String>() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
@@ -1651,7 +1652,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
 | 
			
		||||
 | 
			
		||||
        Map<String, String> params = new HashMap<>();
 | 
			
		||||
        params.put(APIUtils.ID_KEY, mPost.getFullName());
 | 
			
		||||
        mRetrofit.getRetrofit().create(LemmyAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), false, null, mAccessToken))
 | 
			
		||||
        mRetrofit.getRetrofit().create(LemmyBetaAPI.class).postUpdate(new EditPostDTO(mPost.getId(), mPost.getTitle(), mPost.getUrl(), mPost.getSelfText(), false, null, mAccessToken))
 | 
			
		||||
                .enqueue(new Callback<String>() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import org.json.JSONObject;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.ParseComment;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
@@ -17,7 +17,7 @@ import retrofit2.Retrofit;
 | 
			
		||||
 | 
			
		||||
public class FetchCommentInteractions {
 | 
			
		||||
    public static void fetchReplies(Retrofit retrofit, Integer page, boolean unreadOnly, String auth, FetchCommentInteractionsListener fetchMessagesListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        api.userReplies("New", page, 25, unreadOnly, auth).enqueue(
 | 
			
		||||
                new Callback<String>() {
 | 
			
		||||
@@ -55,7 +55,7 @@ public class FetchCommentInteractions {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static void fetchMentions(Retrofit retrofit, Integer page, boolean unreadOnly, String auth, FetchCommentInteractionsListener fetchMessagesListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        api.userMentions("New", page, 25, unreadOnly, auth).enqueue(
 | 
			
		||||
                new Callback<String>() {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ package eu.toldi.infinityforlemmy.message;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.AuthDTO;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.ReadCommentDTO;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
@@ -13,7 +13,7 @@ import retrofit2.Retrofit;
 | 
			
		||||
public class ReadMessage {
 | 
			
		||||
    public static void readMessage(Retrofit oauthRetrofit, String accessToken, int messageId,
 | 
			
		||||
                                   ReadMessageListener readMessageListener) {
 | 
			
		||||
        oauthRetrofit.create(LemmyAPI.class).commentMarkAsRead(new ReadCommentDTO(messageId, true, accessToken))
 | 
			
		||||
        oauthRetrofit.create(LemmyBetaAPI.class).commentMarkAsRead(new ReadCommentDTO(messageId, true, accessToken))
 | 
			
		||||
                .enqueue(new Callback<String>() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
@@ -33,7 +33,7 @@ public class ReadMessage {
 | 
			
		||||
 | 
			
		||||
    public static void readAllMessages(Retrofit retrofit, String accessToken,
 | 
			
		||||
                                       ReadMessageListener readMessageListener) {
 | 
			
		||||
        retrofit.create(LemmyAPI.class).userMarkAllAsRead(new AuthDTO(accessToken))
 | 
			
		||||
        retrofit.create(LemmyBetaAPI.class).userMarkAllAsRead(new AuthDTO(accessToken))
 | 
			
		||||
                .enqueue(new Callback<String>() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import java.util.concurrent.Executor;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
@@ -19,7 +19,7 @@ public class FetchPost {
 | 
			
		||||
                                 PostEnricher postEnricher, FetchPostListener fetchPostListener) {
 | 
			
		||||
        Call<String> postCall;
 | 
			
		||||
        // Use LemmyAPI.postInfo() instead of RedditAPI.getPost()
 | 
			
		||||
        postCall = retrofit.create(LemmyAPI.class).postInfo(Integer.parseInt(id), null, accessToken);
 | 
			
		||||
        postCall = retrofit.create(LemmyBetaAPI.class).postInfo(Integer.parseInt(id), null, accessToken);
 | 
			
		||||
 | 
			
		||||
        postCall.enqueue(new Callback<>() {
 | 
			
		||||
            @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.post;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.ReadPostDTO;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
@@ -15,9 +15,9 @@ public class MarkPostAsRead {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void setPostAsRead(int post_id, boolean markAsRead, String auth, MarkPostAsReadListener markPostAsReadListener) {
 | 
			
		||||
        LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI lemmyBetaAPI = retrofitHolder.getRetrofit().create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        lemmyAPI.postRead(new ReadPostDTO(post_id, markAsRead, auth)).enqueue(new Callback<String>() {
 | 
			
		||||
        lemmyBetaAPI.postRead(new ReadPostDTO(post_id, markAsRead, auth)).enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(Call<String> call, Response<String> response) {
 | 
			
		||||
                if (response.isSuccessful()
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import org.json.JSONObject;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.Comment;
 | 
			
		||||
import eu.toldi.infinityforlemmy.comment.ParseComment;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
@@ -22,9 +22,9 @@ public class ObjectResolver {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void resolvePost(String query, String auth, ObjectResolverListener objectResolverListener) {
 | 
			
		||||
        LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI lemmyBetaAPI = retrofitHolder.getRetrofit().create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> response = lemmyAPI.resolveObject(query, auth);
 | 
			
		||||
        Call<String> response = lemmyBetaAPI.resolveObject(query, auth);
 | 
			
		||||
        response.enqueue(new Callback<String>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(Call<String> call, Response<String> response) {
 | 
			
		||||
@@ -52,9 +52,9 @@ public class ObjectResolver {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void resolveComment(String query, String auth, ObjectResolverListener objectResolverListener) {
 | 
			
		||||
        LemmyAPI lemmyAPI = retrofitHolder.getRetrofit().create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI lemmyBetaAPI = retrofitHolder.getRetrofit().create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> response = lemmyAPI.resolveObject(query, auth);
 | 
			
		||||
        Call<String> response = lemmyBetaAPI.resolveObject(query, auth);
 | 
			
		||||
        response.enqueue(
 | 
			
		||||
                new Callback<String>() {
 | 
			
		||||
                    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
 | 
			
		||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.MultiCommunityUtils;
 | 
			
		||||
@@ -169,7 +169,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
    @NonNull
 | 
			
		||||
    @Override
 | 
			
		||||
    public ListenableFuture<LoadResult<Integer, Post>> loadFuture(@NonNull LoadParams<Integer> loadParams) {
 | 
			
		||||
        LemmyAPI api = retrofit.getRetrofit().create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.getRetrofit().create(LemmyBetaAPI.class);
 | 
			
		||||
        switch (postType) {
 | 
			
		||||
 | 
			
		||||
            case TYPE_FRONT_PAGE:
 | 
			
		||||
@@ -220,7 +220,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
 | 
			
		||||
        ListenableFuture<Response<String>> bestPost;
 | 
			
		||||
        Integer page;
 | 
			
		||||
        if (loadParams.getKey() == null) {
 | 
			
		||||
@@ -249,7 +249,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
                IOException.class, LoadResult.Error::new, executor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
 | 
			
		||||
        ListenableFuture<Response<String>> subredditPost;
 | 
			
		||||
 | 
			
		||||
        subredditPost = api.getPostsListenableFuture(null, sortType.getType().value, loadParams.getKey(), 25, null, subredditOrUserName, false, accessToken);
 | 
			
		||||
@@ -265,7 +265,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
                IOException.class, LoadResult.Error::new, executor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadUserPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadUserPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
 | 
			
		||||
        ListenableFuture<Response<String>> userPosts;
 | 
			
		||||
        userPosts = api.getUserPostsListenableFuture(subredditOrUserName, sortType.getType().value, loadParams.getKey(), 25, userWhere.equals(USER_WHERE_SAVED), accessToken);
 | 
			
		||||
 | 
			
		||||
@@ -280,7 +280,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
                IOException.class, LoadResult.Error::new, executor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadSearchPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadSearchPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
 | 
			
		||||
        ListenableFuture<Response<String>> searchPosts;
 | 
			
		||||
 | 
			
		||||
        searchPosts = api.searchLive(query, null, subredditOrUserName, null, "Posts", sortType.getType().value, "All", loadParams.getKey(), 25, accessToken);
 | 
			
		||||
@@ -298,7 +298,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
 | 
			
		||||
    Map<String, List<Post>> undisplayedPosts = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadMultipleSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api, List<String> communities) {
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadMultipleSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api, List<String> communities) {
 | 
			
		||||
        List<ListenableFuture<LoadResult<Integer, Post>>> futures = new ArrayList<>();
 | 
			
		||||
        List<Post> combinedPostsFromCache = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
@@ -352,7 +352,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
                }, executor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> fetchPostsFromCommunity(LemmyAPI api, LoadParams<Integer> loadParams, String community) {
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> fetchPostsFromCommunity(LemmyBetaAPI api, LoadParams<Integer> loadParams, String community) {
 | 
			
		||||
 | 
			
		||||
        ListenableFuture<Response<String>> subredditPost;
 | 
			
		||||
 | 
			
		||||
@@ -390,7 +390,7 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
 | 
			
		||||
                IOException.class, LoadResult.Error::new, executor);
 | 
			
		||||
    }*/
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadAnonymousHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
 | 
			
		||||
    private ListenableFuture<LoadResult<Integer, Post>> loadAnonymousHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyBetaAPI api) {
 | 
			
		||||
        if (subredditOrUserName == null) {
 | 
			
		||||
            // Return empty list
 | 
			
		||||
            return Futures.immediateFuture(new LoadResult.Page<>(new ArrayList<>(), null, null));
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.multicommunity.MulticommunityPagingSource;
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
 | 
			
		||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
 | 
			
		||||
@@ -252,7 +252,7 @@ public class PostViewModel extends ViewModel {
 | 
			
		||||
            case PostPagingSource.TYPE_MULTI_REDDIT:
 | 
			
		||||
            case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
 | 
			
		||||
                String[] communities = (name != null) ? name.split(Pattern.quote(",")) : new String[0];
 | 
			
		||||
                paging3PagingSource = new MulticommunityPagingSource(retrofit.getRetrofit().create(LemmyAPI.class), List.of(communities), accessToken,
 | 
			
		||||
                paging3PagingSource = new MulticommunityPagingSource(retrofit.getRetrofit().create(LemmyBetaAPI.class), List.of(communities), accessToken,
 | 
			
		||||
                        sortType, executor, postFilter, (readPostList != null) ? readPostList : new ArrayList<>(), postEnricher);
 | 
			
		||||
                break;
 | 
			
		||||
            case PostPagingSource.TYPE_SEARCH:
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ import java.util.concurrent.Executor;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.Flair;
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.SubmitPostDTO;
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
 | 
			
		||||
@@ -68,7 +68,7 @@ public class SubmitPost {
 | 
			
		||||
                                   boolean receivePostReplyNotifications, String kind,
 | 
			
		||||
                                   @Nullable String posterUrl, PostEnricher postEnricher,
 | 
			
		||||
                                   SubmitPostListener submitPostListener) {
 | 
			
		||||
        LemmyAPI api = oauthRetrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = oauthRetrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Call<String> submitPostCall = api.postCreate(new SubmitPostDTO(title, communityId, posterUrl, content, null, isNSFW, null, accessToken));
 | 
			
		||||
 
 | 
			
		||||
@@ -2,14 +2,14 @@ package eu.toldi.infinityforlemmy.site;
 | 
			
		||||
 | 
			
		||||
import org.json.JSONException;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.user.MyUserInfo;
 | 
			
		||||
import retrofit2.Retrofit;
 | 
			
		||||
 | 
			
		||||
public class FetchSiteInfo {
 | 
			
		||||
 | 
			
		||||
    public static void fetchSiteInfo(Retrofit retrofit, String accesToken, FetchSiteInfoListener fetchSiteInfoListener) {
 | 
			
		||||
        retrofit.create(LemmyAPI.class).getSiteInfo(accesToken).enqueue(
 | 
			
		||||
        retrofit.create(LemmyBetaAPI.class).getSiteInfo(accesToken).enqueue(
 | 
			
		||||
                new retrofit2.Callback<String>() {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onResponse(retrofit2.Call<String> call, retrofit2.Response<String> response) {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import java.util.concurrent.Executor;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.account.Account;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.FollowCommunityDTO;
 | 
			
		||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
 | 
			
		||||
@@ -63,7 +63,7 @@ public class CommunitySubscription {
 | 
			
		||||
                                              String accountName, String action,
 | 
			
		||||
                                              RedditDataRoomDatabase redditDataRoomDatabase,
 | 
			
		||||
                                              SubredditSubscriptionListener subredditSubscriptionListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Call<String> subredditSubscriptionCall = api.communityFollow(new FollowCommunityDTO(communityId, action.equals("sub"), accessToken));
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ import androidx.annotation.NonNull;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
import retrofit2.Response;
 | 
			
		||||
@@ -13,7 +13,7 @@ import retrofit2.Retrofit;
 | 
			
		||||
 | 
			
		||||
public class FetchSubredditData {
 | 
			
		||||
    public static void fetchSubredditData(Retrofit retrofit, String subredditName, String accessToken, final FetchSubredditDataListener fetchSubredditDataListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> subredditData;
 | 
			
		||||
        subredditData = api.communityInfo(subredditName, accessToken);
 | 
			
		||||
@@ -47,7 +47,7 @@ public class FetchSubredditData {
 | 
			
		||||
 | 
			
		||||
    static void fetchSubredditListingData(Retrofit retrofit, String query, Integer page, SortType.Type sortType, String accessToken,
 | 
			
		||||
                                          boolean nsfw, final FetchSubredditListingDataListener fetchSubredditListingDataListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Call<String> subredditDataCall = api.search(query, null, null, null, "Communities", sortType.value, "All", page, 25, accessToken);
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,7 @@ public class ParseSubredditData {
 | 
			
		||||
        return new SubredditData(id, name, title, description, removed, published, updated, deleted, isNSFW, actorId, local, iconUrl, bannerImageUrl, hidden, postingRestrictedToMods, instanceId, subscribers, blocked, stats);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface ParseSubredditDataListener {
 | 
			
		||||
    public interface ParseSubredditDataListener {
 | 
			
		||||
        void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers);
 | 
			
		||||
 | 
			
		||||
        void onParseSubredditDataFail();
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ package eu.toldi.infinityforlemmy.user;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.UserBlockDTO;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
@@ -17,7 +17,7 @@ public class BlockUser {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void blockUser(Retrofit retrofit, String accessToken, int userID, boolean block, BlockUserListener blockUserListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
        api.userBlock(new UserBlockDTO(userID, block, accessToken)).enqueue(new Callback<>() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.message.MessageCount;
 | 
			
		||||
import retrofit2.Call;
 | 
			
		||||
import retrofit2.Callback;
 | 
			
		||||
@@ -19,7 +19,7 @@ public class FetchUserData {
 | 
			
		||||
 | 
			
		||||
    public static void fetchUserData(RedditDataRoomDatabase redditDataRoomDatabase, Retrofit retrofit,
 | 
			
		||||
                                     String accessToken, String userName, FetchUserDataListener fetchUserDataListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> userInfo;
 | 
			
		||||
        if (redditDataRoomDatabase == null) {
 | 
			
		||||
@@ -56,7 +56,7 @@ public class FetchUserData {
 | 
			
		||||
 | 
			
		||||
    public static void fetchUserListingData(Retrofit retrofit, String query, Integer page, SortType.Type sortType, boolean nsfw,
 | 
			
		||||
                                            FetchUserListingDataListener fetchUserListingDataListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> userInfo = api.search(query, null, null, null, "Users", sortType.value, "All", page, 25, null);
 | 
			
		||||
        userInfo.enqueue(new Callback<>() {
 | 
			
		||||
@@ -87,7 +87,7 @@ public class FetchUserData {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void fetchUnreadCount(Retrofit retrofit, String accessToken, FetchUserUnreadCountListener fetchUserUnreadCountListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<MessageCount> userUnreadCount = api.userUnreadCount(accessToken);
 | 
			
		||||
        userUnreadCount.enqueue(new Callback<>() {
 | 
			
		||||
@@ -108,7 +108,7 @@ public class FetchUserData {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void validateAuthToken(Retrofit retrofit, ValidateAuthTokenListener validateAuthTokenListener) {
 | 
			
		||||
        LemmyAPI api = retrofit.create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = retrofit.create(LemmyBetaAPI.class);
 | 
			
		||||
 | 
			
		||||
        Call<String> validateAuthToken = api.userValidateAuth();
 | 
			
		||||
        validateAuthToken.enqueue(new Callback<>() {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
 | 
			
		||||
 | 
			
		||||
public class ParseUserData {
 | 
			
		||||
    static void parseUserData(RedditDataRoomDatabase redditDataRoomDatabase, String response,
 | 
			
		||||
    public static void parseUserData(RedditDataRoomDatabase redditDataRoomDatabase, String response,
 | 
			
		||||
                              ParseUserDataListener parseUserDataListener) {
 | 
			
		||||
        new ParseUserDataAsyncTask(redditDataRoomDatabase, response, parseUserDataListener).execute();
 | 
			
		||||
    }
 | 
			
		||||
@@ -69,7 +69,7 @@ public class ParseUserData {
 | 
			
		||||
        return new UserData(account_id, userName, title, iconImageUrl, isBanned, cakeday, actor_id, isLocal, isDeleted, isAdmin, isBot, instance_id, userStats);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface ParseUserDataListener {
 | 
			
		||||
    public interface ParseUserDataListener {
 | 
			
		||||
        void onParseUserDataSuccess(UserData userData, int inboxCount);
 | 
			
		||||
 | 
			
		||||
        void onParseUserDataFailed();
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI;
 | 
			
		||||
import okhttp3.MediaType;
 | 
			
		||||
import okhttp3.MultipartBody;
 | 
			
		||||
import okhttp3.RequestBody;
 | 
			
		||||
@@ -43,7 +43,7 @@ public class UploadImageUtils {
 | 
			
		||||
        RequestBody fileBody = RequestBody.create(byteArray, MediaType.parse("application/octet-stream"));
 | 
			
		||||
        MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("images[]", "post_image.jpg", fileBody);
 | 
			
		||||
 | 
			
		||||
        LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class);
 | 
			
		||||
        LemmyBetaAPI api = mRetrofit.getRetrofit().create(LemmyBetaAPI.class);
 | 
			
		||||
        Call<String> uploadMedia = api.uploadImage("jwt=" + accessToken, fileToUpload);
 | 
			
		||||
        Response<String> uploadMediaResponse = uploadMedia.execute();
 | 
			
		||||
        if (uploadMediaResponse.isSuccessful()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.comment
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.ReportCommentDTO
 | 
			
		||||
import retrofit2.Call
 | 
			
		||||
import retrofit2.Callback
 | 
			
		||||
@@ -9,7 +9,7 @@ import retrofit2.Callback
 | 
			
		||||
class LemmyCommentAPI(val retrofitHolder: RetrofitHolder) {
 | 
			
		||||
 | 
			
		||||
    fun reportComment(id: Int, reason: String, auth: String, callback: ReportCommentCallback) {
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
        api.commentReport(ReportCommentDTO(id, reason, auth)).enqueue(object : Callback<String> {
 | 
			
		||||
            override fun onResponse(
 | 
			
		||||
                call: retrofit2.Call<String>,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.community
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.BlockCommunityDTO
 | 
			
		||||
import retrofit2.Call
 | 
			
		||||
import retrofit2.Callback
 | 
			
		||||
@@ -15,7 +15,7 @@ object BlockCommunity {
 | 
			
		||||
        auth: String,
 | 
			
		||||
        blockCommunityListener: BlockCommunityListener
 | 
			
		||||
    ) {
 | 
			
		||||
        val api = retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val api = retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
        api.communityBlock(BlockCommunityDTO(communityId, true, auth))?.enqueue(
 | 
			
		||||
            object : Callback<String> {
 | 
			
		||||
                override fun onResponse(call: Call<String>, response: Response<String>) {
 | 
			
		||||
@@ -39,7 +39,7 @@ object BlockCommunity {
 | 
			
		||||
        auth: String,
 | 
			
		||||
        blockCommunityListener: BlockCommunityListener
 | 
			
		||||
    ) {
 | 
			
		||||
        val api = retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val api = retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
        api.communityBlock(BlockCommunityDTO(communityId, false, auth))?.enqueue(
 | 
			
		||||
            object : Callback<String> {
 | 
			
		||||
                override fun onResponse(call: Call<String>, response: Response<String>) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import com.google.common.base.Function
 | 
			
		||||
import com.google.common.util.concurrent.Futures
 | 
			
		||||
import com.google.common.util.concurrent.ListenableFuture
 | 
			
		||||
import eu.toldi.infinityforlemmy.SortType
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.ParsePost
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.Post
 | 
			
		||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher
 | 
			
		||||
@@ -21,7 +21,7 @@ import java.util.concurrent.Executor
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MulticommunityPagingSource(
 | 
			
		||||
    private val api: LemmyAPI,
 | 
			
		||||
    private val api: LemmyBetaAPI,
 | 
			
		||||
    private val communities: List<String>,
 | 
			
		||||
    private val accessToken: String?,
 | 
			
		||||
    private val sortType: SortType,
 | 
			
		||||
@@ -133,7 +133,7 @@ class MulticommunityPagingSource(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun fetchPostsFromCommunity(
 | 
			
		||||
        api: LemmyAPI,
 | 
			
		||||
        api: LemmyBetaAPI,
 | 
			
		||||
        pageNumber: Int,
 | 
			
		||||
        community: String
 | 
			
		||||
    ): ListenableFuture<LoadResult<Int, Post>> {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.post
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.ReportPostDTO
 | 
			
		||||
import retrofit2.Call
 | 
			
		||||
import retrofit2.Callback
 | 
			
		||||
@@ -9,7 +9,7 @@ import retrofit2.Callback
 | 
			
		||||
class LemmyPostAPI(val retrofitHolder: RetrofitHolder) {
 | 
			
		||||
 | 
			
		||||
    fun reportPost(postId: Int, reason: String, auth: String, callback: ReportPostCallback) {
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
        api.postReport(ReportPostDTO(postId, reason, auth)).enqueue(object : Callback<String> {
 | 
			
		||||
            override fun onResponse(
 | 
			
		||||
                call: retrofit2.Call<String>,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.privatemessage
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.RetrofitHolder
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.PrivateMessageDTO
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.PrivateMessageReadDTO
 | 
			
		||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils
 | 
			
		||||
@@ -17,7 +17,7 @@ class LemmyPrivateMessageAPI(val retrofitHolder: RetrofitHolder) {
 | 
			
		||||
        limit: Int = 25,
 | 
			
		||||
        unreadOnly: Boolean = false
 | 
			
		||||
    ) {
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
        api.privateMessagesList(page, limit, unreadOnly, auth).enqueue(
 | 
			
		||||
            object : retrofit2.Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
@@ -51,7 +51,7 @@ class LemmyPrivateMessageAPI(val retrofitHolder: RetrofitHolder) {
 | 
			
		||||
        privateMessageId: Int,
 | 
			
		||||
        listener: PrivateMessageMarkedAsReadListener
 | 
			
		||||
    ) {
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
        api.privateMessageMarkAsRead(PrivateMessageReadDTO(privateMessageId, auth, true)).enqueue(
 | 
			
		||||
            object : retrofit2.Callback<String> {
 | 
			
		||||
                override fun onResponse(
 | 
			
		||||
@@ -78,7 +78,7 @@ class LemmyPrivateMessageAPI(val retrofitHolder: RetrofitHolder) {
 | 
			
		||||
        content: String,
 | 
			
		||||
        listener: PrivateMessageSentListener
 | 
			
		||||
    ) {
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val api = retrofitHolder.retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
 | 
			
		||||
        api.privateMessageSend(PrivateMessageDTO(recipientId, content, auth)).enqueue(
 | 
			
		||||
            object : retrofit2.Callback<String> {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
package eu.toldi.infinityforlemmy.site
 | 
			
		||||
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.apis.LemmyBetaAPI
 | 
			
		||||
import eu.toldi.infinityforlemmy.dto.BlockInstanceDTO
 | 
			
		||||
import retrofit2.Retrofit
 | 
			
		||||
 | 
			
		||||
object BlockInstance {
 | 
			
		||||
    fun blockInstance(retrofit: Retrofit, instance_id: Int, block: Boolean, blockInstanceResponse: BlockInstanceResponse) {
 | 
			
		||||
        val LemmyAPI = retrofit.create(LemmyAPI::class.java)
 | 
			
		||||
        val response = LemmyAPI.blockInstance(BlockInstanceDTO(instance_id,block)).enqueue(
 | 
			
		||||
        val LemmyBetaAPI = retrofit.create(LemmyBetaAPI::class.java)
 | 
			
		||||
        val response = LemmyBetaAPI.blockInstance(BlockInstanceDTO(instance_id,block)).enqueue(
 | 
			
		||||
            object : retrofit2.Callback<String> {
 | 
			
		||||
                override fun onResponse(call: retrofit2.Call<String>, response: retrofit2.Response<String>) {
 | 
			
		||||
                    if (response.isSuccessful) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user