package com.fastaccess.data.service; import android.support.annotation.NonNull; import android.support.annotation.StringDef; import com.fastaccess.data.dao.Pageable; import com.fastaccess.data.dao.RepoSubscriptionModel; import com.fastaccess.data.dao.model.Comment; import com.fastaccess.data.dao.model.Notification; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import retrofit2.Response; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Headers; import retrofit2.http.PATCH; import retrofit2.http.POST; import retrofit2.http.Path; import retrofit2.http.Query; import retrofit2.http.Url; import rx.Observable; /** * Created by Kosh on 19 Feb 2017, 6:34 PM */ public interface NotificationService { String SUBSCRIPTION_URL = "https://github.com/notifications/thread"; String ISSUE_THREAD_CLASS = "Issue"; String PULL_REQUEST_THREAD_CLASS = "PullRequest"; String SUBSCRIBE = "subscribe"; String MUTE = "mute"; String UTF8 = "✓"; @StringDef({ ISSUE_THREAD_CLASS, PULL_REQUEST_THREAD_CLASS }) @Retention(RetentionPolicy.SOURCE) @interface ThreadClass {} @StringDef({ SUBSCRIBE, MUTE }) @Retention(RetentionPolicy.SOURCE) @interface ThreadId {} @GET("notifications") Observable<Pageable<Notification>> getNotifications(@Query("since") String date); @GET("notifications?all=true&per_page=200") Observable<Pageable<Notification>> getAllNotifications(); @PATCH("notifications/threads/{id}") Observable<Response<Boolean>> markAsRead(@Path("id") String id); @GET() Observable<Comment> getComment(@Url @NonNull String commentUrl); @GET("notifications/threads/{id}/subscription") Observable<RepoSubscriptionModel> isSubscribed(@Path("id") long id); @DELETE("notifications/threads/{id}/subscription") Observable<Response<Boolean>> unSubscribe(@Path("id") long id); @POST @FormUrlEncoded @Headers("Accept-Charset: UTF-8") Observable<Response<Boolean>> subscribe(@NonNull @Url String url, @Field("repository_id") long repoId, @Field("thread_id") long issueId, @NonNull @Field("thread_class") @ThreadClass String threadClass, @NonNull @Field("id") @ThreadId String id, @NonNull @Field("authenticity_token") String token, @NonNull @Field("utf8") String utf8); }