mirror of https://github.com/KokaKiwi/BarInsta
139 lines
5.0 KiB
Java
139 lines
5.0 KiB
Java
package awais.instagrabber.webservices;
|
|
|
|
import android.util.Log;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.google.common.collect.ImmutableMap;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import awais.instagrabber.repositories.TagsRepository;
|
|
import awais.instagrabber.repositories.responses.Hashtag;
|
|
import awais.instagrabber.repositories.responses.PostsFetchResponse;
|
|
import awais.instagrabber.repositories.responses.TagFeedResponse;
|
|
import awais.instagrabber.utils.TextUtils;
|
|
import awais.instagrabber.utils.Utils;
|
|
import retrofit2.Call;
|
|
import retrofit2.Callback;
|
|
import retrofit2.Response;
|
|
|
|
public class TagsService {
|
|
|
|
private static final String TAG = "TagsService";
|
|
|
|
private static TagsService instance;
|
|
|
|
private final TagsRepository repository;
|
|
|
|
private TagsService() {
|
|
repository = RetrofitFactory.INSTANCE
|
|
.getRetrofit()
|
|
.create(TagsRepository.class);
|
|
}
|
|
|
|
public static TagsService getInstance() {
|
|
if (instance == null) {
|
|
instance = new TagsService();
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
public void fetch(@NonNull final String tag,
|
|
final ServiceCallback<Hashtag> callback) {
|
|
final Call<Hashtag> request = repository.fetch(tag);
|
|
request.enqueue(new Callback<Hashtag>() {
|
|
@Override
|
|
public void onResponse(@NonNull final Call<Hashtag> call, @NonNull final Response<Hashtag> response) {
|
|
if (callback == null) {
|
|
return;
|
|
}
|
|
callback.onSuccess(response.body());
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(@NonNull final Call<Hashtag> call, @NonNull final Throwable t) {
|
|
if (callback != null) {
|
|
callback.onFailure(t);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
public void changeFollow(@NonNull final String action,
|
|
@NonNull final String tag,
|
|
@NonNull final String csrfToken,
|
|
@NonNull final long userId,
|
|
@NonNull final String deviceUuid,
|
|
final ServiceCallback<Boolean> callback) {
|
|
final Map<String, Object> form = new HashMap<>(3);
|
|
form.put("_csrftoken", csrfToken);
|
|
form.put("_uid", userId);
|
|
form.put("_uuid", deviceUuid);
|
|
final Map<String, String> signedForm = Utils.sign(form);
|
|
final Call<String> request = repository.changeFollow(signedForm, action, tag);
|
|
request.enqueue(new Callback<String>() {
|
|
@Override
|
|
public void onResponse(@NonNull final Call<String> call, @NonNull final Response<String> response) {
|
|
final String body = response.body();
|
|
if (body == null) {
|
|
callback.onFailure(new RuntimeException("body is null"));
|
|
return;
|
|
}
|
|
try {
|
|
final JSONObject jsonObject = new JSONObject(body);
|
|
final String status = jsonObject.optString("status");
|
|
callback.onSuccess(status.equals("ok"));
|
|
} catch (JSONException e) {
|
|
Log.e(TAG, "onResponse: ", e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(@NonNull final Call<String> call, @NonNull final Throwable t) {
|
|
// Log.e(TAG, "onFailure: ", t);
|
|
callback.onFailure(t);
|
|
}
|
|
});
|
|
}
|
|
|
|
public void fetchPosts(@NonNull final String tag,
|
|
final String maxId,
|
|
final ServiceCallback<PostsFetchResponse> callback) {
|
|
final ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
|
|
if (!TextUtils.isEmpty(maxId)) {
|
|
builder.put("max_id", maxId);
|
|
}
|
|
final Call<TagFeedResponse> request = repository.fetchPosts(tag, builder.build());
|
|
request.enqueue(new Callback<TagFeedResponse>() {
|
|
@Override
|
|
public void onResponse(@NonNull final Call<TagFeedResponse> call, @NonNull final Response<TagFeedResponse> response) {
|
|
if (callback == null) {
|
|
return;
|
|
}
|
|
final TagFeedResponse body = response.body();
|
|
if (body == null) {
|
|
callback.onSuccess(null);
|
|
return;
|
|
}
|
|
callback.onSuccess(new PostsFetchResponse(
|
|
body.getItems(),
|
|
body.getMoreAvailable(),
|
|
body.getNextMaxId()
|
|
));
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(@NonNull final Call<TagFeedResponse> call, @NonNull final Throwable t) {
|
|
if (callback != null) {
|
|
callback.onFailure(t);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|