replace all retrofit post call bodies with @field

This commit is contained in:
Owen LeJeune
2023-07-25 22:26:09 -04:00
parent 8abd40a0c2
commit 1dd6462311
23 changed files with 72 additions and 122 deletions

View File

@@ -1,6 +1,7 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3 package com.owenlejeune.tvtime.api.tmdb.api.v3
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.* import com.owenlejeune.tvtime.api.tmdb.api.v3.model.*
import com.owenlejeune.tvtime.utils.types.MediaViewType
import retrofit2.Response import retrofit2.Response
import retrofit2.http.* import retrofit2.http.*
@@ -9,16 +10,22 @@ interface AccountApi {
@GET("account") @GET("account")
suspend fun getAccountDetails(): Response<AccountDetails> suspend fun getAccountDetails(): Response<AccountDetails>
@FormUrlEncoded
@POST("account/{id}/favorite") @POST("account/{id}/favorite")
suspend fun markAsFavorite( suspend fun markAsFavorite(
@Path("id") id: Int, @Path("id") id: Int,
@Body body: MarkAsFavoriteBody @Field("media_type") mediaType: MediaViewType,
@Field("media_id") mediaId: Int,
@Field("favorite") isFavorite: Boolean
): Response<StatusResponse> ): Response<StatusResponse>
@FormUrlEncoded
@POST("account/{id}/watchlist") @POST("account/{id}/watchlist")
suspend fun addToWatchlist( suspend fun addToWatchlist(
@Path("id") id: Int, @Path("id") id: Int,
@Body body: WatchlistBody @Field("media_type") mediaType: MediaViewType,
@Field("media_id") mediaId: Int,
@Field("watchlist") onWatchlist: Boolean
): Response<StatusResponse> ): Response<StatusResponse>
} }

View File

@@ -2,8 +2,7 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3
import android.util.Log import android.util.Log
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.AccountDetails import com.owenlejeune.tvtime.api.tmdb.api.v3.model.AccountDetails
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.MarkAsFavoriteBody import com.owenlejeune.tvtime.utils.types.MediaViewType
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchlistBody
import org.koin.core.component.KoinComponent import org.koin.core.component.KoinComponent
import org.koin.core.component.inject import org.koin.core.component.inject
import retrofit2.Response import retrofit2.Response
@@ -18,8 +17,13 @@ class AccountService: KoinComponent {
return accountService.getAccountDetails() return accountService.getAccountDetails()
} }
suspend fun markAsFavorite(accountId: Int, body: MarkAsFavoriteBody) { suspend fun markAsFavorite(
val response = accountService.markAsFavorite(accountId, body) accountId: Int,
mediaType: MediaViewType,
mediaId: Int,
isFavorite: Boolean
) {
val response = accountService.markAsFavorite(accountId, mediaType, mediaId, isFavorite)
if (response.isSuccessful) { if (response.isSuccessful) {
Log.d(TAG, "Successfully marked as favourite") Log.d(TAG, "Successfully marked as favourite")
} else { } else {
@@ -27,8 +31,13 @@ class AccountService: KoinComponent {
} }
} }
suspend fun addToWatchlist(accountId: Int, body: WatchlistBody) { suspend fun addToWatchlist(
val response = accountService.addToWatchlist(accountId, body) accountId: Int,
mediaType: MediaViewType,
mediaId: Int,
onWatchlist: Boolean
) {
val response = accountService.addToWatchlist(accountId, mediaType, mediaId, onWatchlist)
if (response.isSuccessful) { if (response.isSuccessful) {
Log.d(TAG, "Successfully added to watchlist") Log.d(TAG, "Successfully added to watchlist")
} else { } else {

View File

@@ -3,12 +3,15 @@ package com.owenlejeune.tvtime.api.tmdb.api.v3
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.* import com.owenlejeune.tvtime.api.tmdb.api.v3.model.*
import retrofit2.Response import retrofit2.Response
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.HTTP import retrofit2.http.HTTP
import retrofit2.http.POST import retrofit2.http.POST
interface AuthenticationApi { interface AuthenticationApi {
@FormUrlEncoded
@POST("authentication/session/convert/4") @POST("authentication/session/convert/4")
suspend fun createSessionFromV4Token(@Body body: V4TokenBody): Response<CreateSessionResponse> suspend fun createSessionFromV4Token(@Field("access_token") accessToken: String): Response<CreateSessionResponse>
} }

View File

@@ -8,7 +8,7 @@ class AuthenticationService {
private val service by lazy { TmdbClient().createAuthenticationService() } private val service by lazy { TmdbClient().createAuthenticationService() }
suspend fun createSessionFromV4Token(body: V4TokenBody): Response<CreateSessionResponse> { suspend fun createSessionFromV4Token(accessToken: String): Response<CreateSessionResponse> {
return service.createSessionFromV4Token(body) return service.createSessionFromV4Token(accessToken)
} }
} }

View File

@@ -17,7 +17,7 @@ interface DetailService {
suspend fun getReviews(id: Int, refreshing: Boolean) suspend fun getReviews(id: Int, refreshing: Boolean)
suspend fun postRating(id: Int, ratingBody: RatingBody) suspend fun postRating(id: Int, rating: Float)
suspend fun deleteRating(id: Int) suspend fun deleteRating(id: Int)

View File

@@ -43,11 +43,12 @@ interface MoviesApi {
@GET("movie/{id}/keywords") @GET("movie/{id}/keywords")
suspend fun getKeywords(@Path("id") id: Int): Response<KeywordsResponse> suspend fun getKeywords(@Path("id") id: Int): Response<KeywordsResponse>
@FormUrlEncoded
@POST("movie/{id}/rating") @POST("movie/{id}/rating")
suspend fun postMovieRatingAsUser( suspend fun postMovieRatingAsUser(
@Path("id") id: Int, @Path("id") id: Int,
@Query("session_id") sessionId: String, @Query("session_id") sessionId: String,
@Body ratingBody: RatingBody @Field("value") rating: Float
): Response<StatusResponse> ): Response<StatusResponse>
@DELETE("movie/{id}/rating") @DELETE("movie/{id}/rating")

View File

@@ -4,11 +4,8 @@ import android.util.Log
import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.paging.PagingData import androidx.paging.PagingData
import androidx.paging.PagingSource
import androidx.paging.PagingState
import com.owenlejeune.tvtime.api.LoadingState import com.owenlejeune.tvtime.api.LoadingState
import com.owenlejeune.tvtime.api.loadRemoteData import com.owenlejeune.tvtime.api.loadRemoteData
import com.owenlejeune.tvtime.api.storedIn
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.AccountStates import com.owenlejeune.tvtime.api.tmdb.api.v3.model.AccountStates
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CastMember import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CastMember
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CrewMember import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CrewMember
@@ -18,14 +15,9 @@ import com.owenlejeune.tvtime.api.tmdb.api.v3.model.HomePageResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ImageCollection import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ImageCollection
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Keyword import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Keyword
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.MovieReleaseResults import com.owenlejeune.tvtime.api.tmdb.api.v3.model.MovieReleaseResults
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.RatingBody
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Review import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Review
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResult import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResult
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResultMedia import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResultMedia
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResultMovie
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Searchable
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SortableSearchResult
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.StatusResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Video import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Video
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchProviders import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchProviders
@@ -168,9 +160,9 @@ class MoviesService: KoinComponent, DetailService, HomePageService {
) )
} }
override suspend fun postRating(id: Int, ratingBody: RatingBody) { override suspend fun postRating(id: Int, rating: Float) {
val session = SessionManager.currentSession.value ?: throw Exception("Session must not be null") val session = SessionManager.currentSession.value ?: throw Exception("Session must not be null")
val response = movieService.postMovieRatingAsUser(id, session.sessionId, ratingBody) val response = movieService.postMovieRatingAsUser(id, session.sessionId, rating)
if (response.isSuccessful) { if (response.isSuccessful) {
Log.d(TAG, "Successfully rated") Log.d(TAG, "Successfully rated")
getAccountStates(id) getAccountStates(id)

View File

@@ -43,11 +43,12 @@ interface TvApi {
@GET("tv/{id}/keywords") @GET("tv/{id}/keywords")
suspend fun getKeywords(@Path("id") id: Int): Response<KeywordsResponse> suspend fun getKeywords(@Path("id") id: Int): Response<KeywordsResponse>
@FormUrlEncoded
@POST("tv/{id}/rating") @POST("tv/{id}/rating")
suspend fun postTvRatingAsUser( suspend fun postTvRatingAsUser(
@Path("id") id: Int, @Path("id") id: Int,
@Query("session_id") sessionId: String, @Query("session_id") sessionId: String,
@Body ratingBody: RatingBody @Field("value") rating: Float
): Response<StatusResponse> ): Response<StatusResponse>
@DELETE("tv/{id}/rating") @DELETE("tv/{id}/rating")

View File

@@ -4,39 +4,26 @@ import android.util.Log
import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.paging.PagingData import androidx.paging.PagingData
import androidx.paging.PagingSource
import androidx.paging.PagingState
import com.owenlejeune.tvtime.api.LoadingState import com.owenlejeune.tvtime.api.LoadingState
import com.owenlejeune.tvtime.api.loadRemoteData import com.owenlejeune.tvtime.api.loadRemoteData
import com.owenlejeune.tvtime.api.storedIn
import com.owenlejeune.tvtime.api.tmdb.TmdbClient
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.AccountStates import com.owenlejeune.tvtime.api.tmdb.api.v3.model.AccountStates
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CastAndCrew
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CastMember import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CastMember
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CrewMember import com.owenlejeune.tvtime.api.tmdb.api.v3.model.CrewMember
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.DetailedItem
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.DetailedTv import com.owenlejeune.tvtime.api.tmdb.api.v3.model.DetailedTv
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ExternalIds import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ExternalIds
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.HomePageResponse import com.owenlejeune.tvtime.api.tmdb.api.v3.model.HomePageResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ImageCollection import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ImageCollection
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Keyword import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Keyword
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.KeywordsResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.RatingBody
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Review import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Review
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ReviewResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResult import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResult
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResultMedia import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResultMedia
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Season import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Season
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SeasonAccountStates import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SeasonAccountStates
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.StatusResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvCastAndCrew
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvCastMember import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvCastMember
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvContentRatings import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvContentRatings
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvCrewMember import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TvCrewMember
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Video import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Video
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.VideoResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchProviderResponse
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchProviders import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchProviders
import com.owenlejeune.tvtime.utils.SessionManager import com.owenlejeune.tvtime.utils.SessionManager
import com.owenlejeune.tvtime.utils.types.TimeWindow import com.owenlejeune.tvtime.utils.types.TimeWindow
@@ -304,9 +291,9 @@ class TvService: KoinComponent, DetailService, HomePageService {
) )
} }
override suspend fun postRating(id: Int, ratingBody: RatingBody) { override suspend fun postRating(id: Int, rating: Float) {
val session = SessionManager.currentSession.value ?: throw Exception("Session must not be null") val session = SessionManager.currentSession.value ?: throw Exception("Session must not be null")
val response = service.postTvRatingAsUser(id, session.sessionId, ratingBody) val response = service.postTvRatingAsUser(id, session.sessionId, rating)
if (response.isSuccessful) { if (response.isSuccessful) {
Log.d(TAG, "Successfully posted rating") Log.d(TAG, "Successfully posted rating")
} else { } else {

View File

@@ -1,10 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
import com.owenlejeune.tvtime.utils.types.MediaViewType
class MarkAsFavoriteBody(
@SerializedName("media_type") val mediaType: MediaViewType,
@SerializedName("media_id") val mediaId: Int,
@SerializedName("favorite") val isFavorite: Boolean
)

View File

@@ -1,7 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
class RatingBody(
@SerializedName("value") val rating: Float
)

View File

@@ -1,7 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
class V4TokenBody(
@SerializedName("access_token") val accessToken: String
)

View File

@@ -1,10 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v3.model
import com.google.gson.annotations.SerializedName
import com.owenlejeune.tvtime.utils.types.MediaViewType
class WatchlistBody(
@SerializedName("media_type") val mediaType: MediaViewType,
@SerializedName("media_id") val mediaId: Int,
@SerializedName("watchlist") val onWatchlist: Boolean
)

View File

@@ -5,16 +5,20 @@ import com.owenlejeune.tvtime.api.tmdb.api.v4.model.*
import retrofit2.Response import retrofit2.Response
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.DELETE import retrofit2.http.DELETE
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.HTTP import retrofit2.http.HTTP
import retrofit2.http.POST import retrofit2.http.POST
interface AuthenticationV4Api { interface AuthenticationV4Api {
@FormUrlEncoded
@POST("auth/request_token") @POST("auth/request_token")
suspend fun createRequestToken(@Body body: AuthRequestBody): Response<AuthResponse> suspend fun createRequestToken(@Field("redirect_to") redirect: String): Response<AuthResponse>
@FormUrlEncoded
@POST("auth/access_token") @POST("auth/access_token")
suspend fun createAccessToken(@Body body: AuthAccessBody): Response<AccessResponse> suspend fun createAccessToken(@Field("request_token") requestToken: String): Response<AccessResponse>
// @DELETE("auth/access_token") // @DELETE("auth/access_token")
@HTTP(method = "DELETE", path = "auth/access_token", hasBody = true) @HTTP(method = "DELETE", path = "auth/access_token", hasBody = true)

View File

@@ -9,12 +9,12 @@ class AuthenticationV4Service {
private val service by lazy { TmdbClient().createV4AuthenticationService() } private val service by lazy { TmdbClient().createV4AuthenticationService() }
suspend fun createRequestToken(body: AuthRequestBody): Response<AuthResponse> { suspend fun createRequestToken(redirect: String): Response<AuthResponse> {
return service.createRequestToken(body) return service.createRequestToken(redirect)
} }
suspend fun createAccessToken(body: AuthAccessBody): Response<AccessResponse> { suspend fun createAccessToken(requestToken: String): Response<AccessResponse> {
return service.createAccessToken(body) return service.createAccessToken(requestToken)
} }
suspend fun deleteAccessToken(body: AuthDeleteBody): Response<StatusResponse> { suspend fun deleteAccessToken(body: AuthDeleteBody): Response<StatusResponse> {

View File

@@ -9,8 +9,15 @@ interface ListV4Api {
@GET("list/{id}") @GET("list/{id}")
suspend fun getList(@Path("id") listId: Int): Response<MediaList> suspend fun getList(@Path("id") listId: Int): Response<MediaList>
@FormUrlEncoded
@POST("list") @POST("list")
suspend fun createList(@Body body: CreateListBody): Response<CreateListResponse> suspend fun createList(
@Field("name") name: String,
@Field("iso_639_1") language: String,
@Field("description") description: String,
@Field("public") isPublic: Boolean,
@Field("iso_3166_1") localeCode: String
): Response<CreateListResponse>
@PUT("list/{id}") @PUT("list/{id}")
suspend fun updateList(@Path("id") listId: Int, @Body body: ListUpdateBody): Response<StatusResponse> suspend fun updateList(@Path("id") listId: Int, @Body body: ListUpdateBody): Response<StatusResponse>

View File

@@ -4,9 +4,7 @@ import android.content.Context
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.mutableStateOf
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AddToListBody import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AddToListBody
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.CreateListBody
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.DeleteListItemsBody import com.owenlejeune.tvtime.api.tmdb.api.v4.model.DeleteListItemsBody
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.ListUpdateBody import com.owenlejeune.tvtime.api.tmdb.api.v4.model.ListUpdateBody
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.MediaList import com.owenlejeune.tvtime.api.tmdb.api.v4.model.MediaList
@@ -34,8 +32,14 @@ class ListV4Service: KoinComponent {
} }
} }
suspend fun createList(body: CreateListBody) {//}: Response<CreateListResponse> { suspend fun createList(
service.createList(body) name: String,
language: String,
description: String,
isPublic: Boolean,
localeCode: String
) {
service.createList(name, language, description, isPublic, localeCode)
} }
suspend fun updateList(listId: Int, body: ListUpdateBody) { suspend fun updateList(listId: Int, body: ListUpdateBody) {

View File

@@ -1,7 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v4.model
import com.google.gson.annotations.SerializedName
class AuthAccessBody(
@SerializedName("request_token") val requestToken: String
)

View File

@@ -1,7 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v4.model
import com.google.gson.annotations.SerializedName
class AuthRequestBody(
@SerializedName("redirect_to") val redirect: String
)

View File

@@ -1,11 +0,0 @@
package com.owenlejeune.tvtime.api.tmdb.api.v4.model
import com.google.gson.annotations.SerializedName
class CreateListBody(
@SerializedName("name") val name: String,
@SerializedName("iso_639_1") val language: String,
@SerializedName("description") val description: String,
@SerializedName("public") val isPublic: Boolean,
@SerializedName("iso_3166_1") val localeCode: String
)

View File

@@ -4,8 +4,6 @@ import androidx.lifecycle.ViewModel
import androidx.paging.PagingData import androidx.paging.PagingData
import com.owenlejeune.tvtime.api.tmdb.api.createPagingFlow import com.owenlejeune.tvtime.api.tmdb.api.createPagingFlow
import com.owenlejeune.tvtime.api.tmdb.api.v3.AccountService import com.owenlejeune.tvtime.api.tmdb.api.v3.AccountService
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.MarkAsFavoriteBody
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchlistBody
import com.owenlejeune.tvtime.api.tmdb.api.v4.AccountV4Service import com.owenlejeune.tvtime.api.tmdb.api.v4.AccountV4Service
import com.owenlejeune.tvtime.api.tmdb.api.v4.ListV4Service import com.owenlejeune.tvtime.api.tmdb.api.v4.ListV4Service
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AddToListBody import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AddToListBody
@@ -139,12 +137,12 @@ class AccountViewModel: ViewModel(), KoinComponent {
suspend fun addToFavourites(type: MediaViewType, itemId: Int, favourited: Boolean) { suspend fun addToFavourites(type: MediaViewType, itemId: Int, favourited: Boolean) {
val accountId = SessionManager.currentSession.value?.accountDetails?.value?.id ?: throw Exception("Session must not be null") val accountId = SessionManager.currentSession.value?.accountDetails?.value?.id ?: throw Exception("Session must not be null")
accountService.markAsFavorite(accountId, MarkAsFavoriteBody(type, itemId, favourited)) accountService.markAsFavorite(accountId, type, itemId, favourited)
} }
suspend fun addToWatchlist(type: MediaViewType, itemId: Int, watchlisted: Boolean) { suspend fun addToWatchlist(type: MediaViewType, itemId: Int, watchlisted: Boolean) {
val accountId = SessionManager.currentSession.value?.accountDetails?.value?.id ?: throw Exception("Session must not be null") val accountId = SessionManager.currentSession.value?.accountDetails?.value?.id ?: throw Exception("Session must not be null")
accountService.addToWatchlist(accountId, WatchlistBody(type, itemId, watchlisted)) accountService.addToWatchlist(accountId, type, itemId, watchlisted)
} }
} }

View File

@@ -18,13 +18,11 @@ import com.owenlejeune.tvtime.api.tmdb.api.v3.model.DetailedItem
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ExternalIds import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ExternalIds
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ImageCollection import com.owenlejeune.tvtime.api.tmdb.api.v3.model.ImageCollection
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Keyword import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Keyword
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.RatingBody
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Review import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Review
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResultMedia import com.owenlejeune.tvtime.api.tmdb.api.v3.model.SearchResultMedia
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem import com.owenlejeune.tvtime.api.tmdb.api.v3.model.TmdbItem
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Video import com.owenlejeune.tvtime.api.tmdb.api.v3.model.Video
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchProviders import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchProviders
import com.owenlejeune.tvtime.extensions.anyOf
import com.owenlejeune.tvtime.ui.screens.tabs.MediaTabNavItem import com.owenlejeune.tvtime.ui.screens.tabs.MediaTabNavItem
import com.owenlejeune.tvtime.utils.types.MediaViewType import com.owenlejeune.tvtime.utils.types.MediaViewType
import com.owenlejeune.tvtime.utils.types.TimeWindow import com.owenlejeune.tvtime.utils.types.TimeWindow
@@ -398,8 +396,8 @@ class MainViewModel: ViewModel(), KoinComponent {
suspend fun postRating(id: Int, rating: Float, type: MediaViewType) { suspend fun postRating(id: Int, rating: Float, type: MediaViewType) {
when (type) { when (type) {
MediaViewType.MOVIE -> movieService.postRating(id, RatingBody(rating)) MediaViewType.MOVIE -> movieService.postRating(id, rating)
MediaViewType.TV -> tvService.postRating(id, RatingBody(rating)) MediaViewType.TV -> tvService.postRating(id, rating)
else -> {} else -> {}
} }
} }

View File

@@ -9,9 +9,7 @@ import com.owenlejeune.tvtime.api.tmdb.api.v3.AccountService
import com.owenlejeune.tvtime.api.tmdb.api.v3.AuthenticationService import com.owenlejeune.tvtime.api.tmdb.api.v3.AuthenticationService
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.* import com.owenlejeune.tvtime.api.tmdb.api.v3.model.*
import com.owenlejeune.tvtime.api.tmdb.api.v4.AuthenticationV4Service import com.owenlejeune.tvtime.api.tmdb.api.v4.AuthenticationV4Service
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AuthAccessBody
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AuthDeleteBody import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AuthDeleteBody
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.AuthRequestBody
import com.owenlejeune.tvtime.preferences.AppPreferences import com.owenlejeune.tvtime.preferences.AppPreferences
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -74,7 +72,7 @@ object SessionManager: KoinComponent {
onRedirect: (url: String) -> Unit onRedirect: (url: String) -> Unit
) { ) {
val service = AuthenticationV4Service() val service = AuthenticationV4Service()
val requestTokenResponse = service.createRequestToken(AuthRequestBody(redirect = "app://tvtime.auth.return")) val requestTokenResponse = service.createRequestToken(redirect = "app://tvtime.auth.return")
if (requestTokenResponse.isSuccessful) { if (requestTokenResponse.isSuccessful) {
requestTokenResponse.body()?.let { ctr -> requestTokenResponse.body()?.let { ctr ->
val url = context.getString(R.string.tmdb_auth_url, ctr.requestToken) val url = context.getString(R.string.tmdb_auth_url, ctr.requestToken)
@@ -92,11 +90,11 @@ object SessionManager: KoinComponent {
) { ) {
if (currentSession.value is InProgressSession) { if (currentSession.value is InProgressSession) {
val requestToken = currentSession.value!!.sessionId val requestToken = currentSession.value!!.sessionId
val authResponse = authenticationV4Service.createAccessToken(AuthAccessBody(requestToken)) val authResponse = authenticationV4Service.createAccessToken(requestToken)
if (authResponse.isSuccessful) { if (authResponse.isSuccessful) {
authResponse.body()?.let { ar -> authResponse.body()?.let { ar ->
if (ar.success) { if (ar.success) {
val sessionResponse = authenticationService.createSessionFromV4Token(V4TokenBody(ar.accessToken)) val sessionResponse = authenticationService.createSessionFromV4Token(ar.accessToken)
if (sessionResponse.isSuccessful) { if (sessionResponse.isSuccessful) {
sessionResponse.body()?.let { sr -> sessionResponse.body()?.let { sr ->
preferences.authorizedSessionValues = AuthorizedSessionValues( preferences.authorizedSessionValues = AuthorizedSessionValues(