From 1dabd07de41f077d34f7fff938a160b8d40740ed Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 1 Mar 2025 17:49:49 +0100 Subject: [PATCH] refactor: decouple and abstract auth from media service logic --- .../com/github/libretube/api/ExternalApi.kt | 4 + .../libretube/api/MediaServiceRepository.kt | 35 +++++ .../java/com/github/libretube/api/PipedApi.kt | 119 ---------------- .../com/github/libretube/api/PipedAuthApi.kt | 128 ++++++++++++++++++ .../api/PipedMediaServiceRepository.kt | 75 ++++++++++ .../github/libretube/api/PlaylistsHelper.kt | 2 +- .../github/libretube/api/RetrofitInstance.kt | 53 +++----- .../github/libretube/api/StreamsExtractor.kt | 2 +- .../github/libretube/helpers/ProxyHelper.kt | 8 +- .../repo/LocalPlaylistsRepository.kt | 6 +- .../libretube/services/OnlinePlayerService.kt | 5 +- .../PlaylistDownloadEnqueueService.kt | 6 +- .../ui/dialogs/SubmitDeArrowDialog.kt | 3 +- .../ui/dialogs/SubmitSegmentDialog.kt | 3 +- .../ui/fragments/ChannelContentFragment.kt | 8 +- .../libretube/ui/fragments/ChannelFragment.kt | 6 +- .../ui/fragments/PlaylistFragment.kt | 4 +- .../ui/fragments/SearchSuggestionsFragment.kt | 4 +- .../libretube/ui/models/HomeViewModel.kt | 4 +- .../libretube/ui/models/TrendsViewModel.kt | 4 +- .../libretube/ui/models/WelcomeViewModel.kt | 2 +- .../ui/models/sources/CommentPagingSource.kt | 6 +- .../sources/CommentRepliesPagingSource.kt | 4 +- .../ui/models/sources/SearchPagingSource.kt | 6 +- .../ui/preferences/InstanceSettings.kt | 9 +- .../ui/sheets/ChannelOptionsBottomSheet.kt | 6 +- .../ui/sheets/PlaylistOptionsBottomSheet.kt | 4 +- .../com/github/libretube/util/DeArrowUtil.kt | 4 +- .../com/github/libretube/util/PlayingQueue.kt | 7 +- 29 files changed, 320 insertions(+), 207 deletions(-) create mode 100644 app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt create mode 100644 app/src/main/java/com/github/libretube/api/PipedAuthApi.kt create mode 100644 app/src/main/java/com/github/libretube/api/PipedMediaServiceRepository.kt diff --git a/app/src/main/java/com/github/libretube/api/ExternalApi.kt b/app/src/main/java/com/github/libretube/api/ExternalApi.kt index b8107dd46..b1958050c 100644 --- a/app/src/main/java/com/github/libretube/api/ExternalApi.kt +++ b/app/src/main/java/com/github/libretube/api/ExternalApi.kt @@ -1,6 +1,7 @@ package com.github.libretube.api import com.github.libretube.api.obj.DeArrowBody +import com.github.libretube.api.obj.PipedConfig import com.github.libretube.api.obj.PipedInstance import com.github.libretube.api.obj.SubmitSegmentResponse import com.github.libretube.api.obj.VoteInfo @@ -20,6 +21,9 @@ interface ExternalApi { @GET suspend fun getInstances(@Url url: String): List + @GET("config") + suspend fun getInstanceConfig(@Url url: String): PipedConfig + // fetch latest version info @GET(GITHUB_API_URL) suspend fun getLatestRelease(): UpdateInfo diff --git a/app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt b/app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt new file mode 100644 index 000000000..bbbbdc753 --- /dev/null +++ b/app/src/main/java/com/github/libretube/api/MediaServiceRepository.kt @@ -0,0 +1,35 @@ +package com.github.libretube.api + +import com.github.libretube.api.obj.Channel +import com.github.libretube.api.obj.ChannelTabResponse +import com.github.libretube.api.obj.CommentsPage +import com.github.libretube.api.obj.DeArrowContent +import com.github.libretube.api.obj.Playlist +import com.github.libretube.api.obj.SearchResult +import com.github.libretube.api.obj.SegmentData +import com.github.libretube.api.obj.StreamItem +import com.github.libretube.api.obj.Streams + +interface MediaServiceRepository { + suspend fun getTrending(region: String): List + suspend fun getStreams(videoId: String): Streams + suspend fun getComments(videoId: String): CommentsPage + suspend fun getSegments(videoId: String, category: String, actionType: String? = null): SegmentData + suspend fun getDeArrowContent(videoIds: String): Map + suspend fun getCommentsNextPage(videoId: String, nextPage: String): CommentsPage + suspend fun getSearchResults(searchQuery: String, filter: String): SearchResult + suspend fun getSearchResultsNextPage(searchQuery: String, filter: String, nextPage: String): SearchResult + suspend fun getSuggestions(query: String): List + suspend fun getChannel(channelId: String): Channel + suspend fun getChannelTab(data: String, nextPage: String? = null): ChannelTabResponse + suspend fun getChannelByName(channelName: String): Channel + suspend fun getChannelNextPage(channelId: String, nextPage: String): Channel + suspend fun getPlaylist(playlistId: String): Playlist + suspend fun getPlaylistNextPage(playlistId: String, nextPage: String): Playlist + + companion object { + val instance by lazy { + PipedMediaServiceRepository() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/libretube/api/PipedApi.kt b/app/src/main/java/com/github/libretube/api/PipedApi.kt index b185b4fe2..4542b3f07 100644 --- a/app/src/main/java/com/github/libretube/api/PipedApi.kt +++ b/app/src/main/java/com/github/libretube/api/PipedApi.kt @@ -4,33 +4,16 @@ import com.github.libretube.api.obj.Channel import com.github.libretube.api.obj.ChannelTabResponse import com.github.libretube.api.obj.CommentsPage import com.github.libretube.api.obj.DeArrowContent -import com.github.libretube.api.obj.DeleteUserRequest -import com.github.libretube.api.obj.EditPlaylistBody -import com.github.libretube.api.obj.Login -import com.github.libretube.api.obj.Message -import com.github.libretube.api.obj.PipedConfig import com.github.libretube.api.obj.Playlist -import com.github.libretube.api.obj.Playlists import com.github.libretube.api.obj.SearchResult import com.github.libretube.api.obj.SegmentData import com.github.libretube.api.obj.StreamItem import com.github.libretube.api.obj.Streams -import com.github.libretube.api.obj.Subscribe -import com.github.libretube.api.obj.Subscribed -import com.github.libretube.api.obj.Subscription -import com.github.libretube.api.obj.Token -import retrofit2.http.Body import retrofit2.http.GET -import retrofit2.http.Header -import retrofit2.http.PATCH -import retrofit2.http.POST import retrofit2.http.Path import retrofit2.http.Query interface PipedApi { - @GET("config") - suspend fun getConfig(): PipedConfig - @GET("trending") suspend fun getTrending(@Query("region") region: String): List @@ -98,106 +81,4 @@ interface PipedApi { @Path("playlistId") playlistId: String, @Query("nextpage") nextPage: String ): Playlist - - @POST("login") - suspend fun login(@Body login: Login): Token - - @POST("register") - suspend fun register(@Body login: Login): Token - - @POST("user/delete") - suspend fun deleteAccount( - @Header("Authorization") token: String, - @Body password: DeleteUserRequest - ) - - @GET("feed") - suspend fun getFeed(@Query("authToken") token: String?): List - - @GET("feed/unauthenticated") - suspend fun getUnauthenticatedFeed(@Query("channels") channels: String): List - - @POST("feed/unauthenticated") - suspend fun getUnauthenticatedFeed(@Body channels: List): List - - @GET("subscribed") - suspend fun isSubscribed( - @Query("channelId") channelId: String, - @Header("Authorization") token: String - ): Subscribed - - @GET("subscriptions") - suspend fun subscriptions(@Header("Authorization") token: String): List - - @GET("subscriptions/unauthenticated") - suspend fun unauthenticatedSubscriptions( - @Query("channels") channels: String - ): List - - @POST("subscriptions/unauthenticated") - suspend fun unauthenticatedSubscriptions(@Body channels: List): List - - @POST("subscribe") - suspend fun subscribe( - @Header("Authorization") token: String, - @Body subscribe: Subscribe - ): Message - - @POST("unsubscribe") - suspend fun unsubscribe( - @Header("Authorization") token: String, - @Body subscribe: Subscribe - ): Message - - @POST("import") - suspend fun importSubscriptions( - @Query("override") override: Boolean, - @Header("Authorization") token: String, - @Body channels: List - ): Message - - @POST("import/playlist") - suspend fun clonePlaylist( - @Header("Authorization") token: String, - @Body editPlaylistBody: EditPlaylistBody - ): EditPlaylistBody - - @GET("user/playlists") - suspend fun getUserPlaylists(@Header("Authorization") token: String): List - - @POST("user/playlists/rename") - suspend fun renamePlaylist( - @Header("Authorization") token: String, - @Body editPlaylistBody: EditPlaylistBody - ): Message - - @PATCH("user/playlists/description") - suspend fun changePlaylistDescription( - @Header("Authorization") token: String, - @Body editPlaylistBody: EditPlaylistBody - ): Message - - @POST("user/playlists/delete") - suspend fun deletePlaylist( - @Header("Authorization") token: String, - @Body editPlaylistBody: EditPlaylistBody - ): Message - - @POST("user/playlists/create") - suspend fun createPlaylist( - @Header("Authorization") token: String, - @Body name: Playlists - ): EditPlaylistBody - - @POST("user/playlists/add") - suspend fun addToPlaylist( - @Header("Authorization") token: String, - @Body editPlaylistBody: EditPlaylistBody - ): Message - - @POST("user/playlists/remove") - suspend fun removeFromPlaylist( - @Header("Authorization") token: String, - @Body editPlaylistBody: EditPlaylistBody - ): Message } diff --git a/app/src/main/java/com/github/libretube/api/PipedAuthApi.kt b/app/src/main/java/com/github/libretube/api/PipedAuthApi.kt new file mode 100644 index 000000000..d6cacbfc2 --- /dev/null +++ b/app/src/main/java/com/github/libretube/api/PipedAuthApi.kt @@ -0,0 +1,128 @@ +package com.github.libretube.api + +import com.github.libretube.api.obj.DeleteUserRequest +import com.github.libretube.api.obj.EditPlaylistBody +import com.github.libretube.api.obj.Login +import com.github.libretube.api.obj.Message +import com.github.libretube.api.obj.Playlist +import com.github.libretube.api.obj.Playlists +import com.github.libretube.api.obj.StreamItem +import com.github.libretube.api.obj.Subscribe +import com.github.libretube.api.obj.Subscribed +import com.github.libretube.api.obj.Subscription +import com.github.libretube.api.obj.Token +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.Header +import retrofit2.http.PATCH +import retrofit2.http.POST +import retrofit2.http.Path +import retrofit2.http.Query + +interface PipedAuthApi { + + @POST("login") + suspend fun login(@Body login: Login): Token + + @POST("register") + suspend fun register(@Body login: Login): Token + + @POST("user/delete") + suspend fun deleteAccount( + @Header("Authorization") token: String, + @Body password: DeleteUserRequest + ) + + @GET("feed") + suspend fun getFeed(@Query("authToken") token: String?): List + + @GET("feed/unauthenticated") + suspend fun getUnauthenticatedFeed(@Query("channels") channels: String): List + + @POST("feed/unauthenticated") + suspend fun getUnauthenticatedFeed(@Body channels: List): List + + @GET("subscribed") + suspend fun isSubscribed( + @Query("channelId") channelId: String, + @Header("Authorization") token: String + ): Subscribed + + @GET("subscriptions") + suspend fun subscriptions(@Header("Authorization") token: String): List + + @GET("subscriptions/unauthenticated") + suspend fun unauthenticatedSubscriptions( + @Query("channels") channels: String + ): List + + @POST("subscriptions/unauthenticated") + suspend fun unauthenticatedSubscriptions(@Body channels: List): List + + @POST("subscribe") + suspend fun subscribe( + @Header("Authorization") token: String, + @Body subscribe: Subscribe + ): Message + + @POST("unsubscribe") + suspend fun unsubscribe( + @Header("Authorization") token: String, + @Body subscribe: Subscribe + ): Message + + @POST("import") + suspend fun importSubscriptions( + @Query("override") override: Boolean, + @Header("Authorization") token: String, + @Body channels: List + ): Message + + @POST("import/playlist") + suspend fun clonePlaylist( + @Header("Authorization") token: String, + @Body editPlaylistBody: EditPlaylistBody + ): EditPlaylistBody + + @GET("user/playlists") + suspend fun getUserPlaylists(@Header("Authorization") token: String): List + + @POST("user/playlists/rename") + suspend fun renamePlaylist( + @Header("Authorization") token: String, + @Body editPlaylistBody: EditPlaylistBody + ): Message + + @PATCH("user/playlists/description") + suspend fun changePlaylistDescription( + @Header("Authorization") token: String, + @Body editPlaylistBody: EditPlaylistBody + ): Message + + @POST("user/playlists/delete") + suspend fun deletePlaylist( + @Header("Authorization") token: String, + @Body editPlaylistBody: EditPlaylistBody + ): Message + + @POST("user/playlists/create") + suspend fun createPlaylist( + @Header("Authorization") token: String, + @Body name: Playlists + ): EditPlaylistBody + + @POST("user/playlists/add") + suspend fun addToPlaylist( + @Header("Authorization") token: String, + @Body editPlaylistBody: EditPlaylistBody + ): Message + + @POST("user/playlists/remove") + suspend fun removeFromPlaylist( + @Header("Authorization") token: String, + @Body editPlaylistBody: EditPlaylistBody + ): Message + + @GET("playlists/{playlistId}") + suspend fun getPlaylist(@Path("playlistId") playlistId: String): Playlist +} \ No newline at end of file diff --git a/app/src/main/java/com/github/libretube/api/PipedMediaServiceRepository.kt b/app/src/main/java/com/github/libretube/api/PipedMediaServiceRepository.kt new file mode 100644 index 000000000..a7aef9d72 --- /dev/null +++ b/app/src/main/java/com/github/libretube/api/PipedMediaServiceRepository.kt @@ -0,0 +1,75 @@ +package com.github.libretube.api + +import com.github.libretube.api.RetrofitInstance.PIPED_API_URL +import com.github.libretube.api.obj.Channel +import com.github.libretube.api.obj.ChannelTabResponse +import com.github.libretube.api.obj.CommentsPage +import com.github.libretube.api.obj.DeArrowContent +import com.github.libretube.api.obj.Playlist +import com.github.libretube.api.obj.SearchResult +import com.github.libretube.api.obj.SegmentData +import com.github.libretube.api.obj.StreamItem +import com.github.libretube.api.obj.Streams +import com.github.libretube.constants.PreferenceKeys +import com.github.libretube.helpers.PreferenceHelper + +class PipedMediaServiceRepository : MediaServiceRepository { + override suspend fun getTrending(region: String): List = + api.getTrending(region) + + override suspend fun getStreams(videoId: String): Streams = + api.getStreams(videoId) + + override suspend fun getComments(videoId: String): CommentsPage = + api.getComments(videoId) + + override suspend fun getSegments( + videoId: String, + category: String, + actionType: String? + ): SegmentData = api.getSegments(videoId, category, actionType) + + override suspend fun getDeArrowContent(videoIds: String): Map = + api.getDeArrowContent(videoIds) + + override suspend fun getCommentsNextPage(videoId: String, nextPage: String): CommentsPage = + api.getCommentsNextPage(videoId, nextPage) + + override suspend fun getSearchResults(searchQuery: String, filter: String): SearchResult = + api.getSearchResults(searchQuery, filter) + + override suspend fun getSearchResultsNextPage( + searchQuery: String, + filter: String, + nextPage: String + ): SearchResult = api.getSearchResultsNextPage(searchQuery, filter, nextPage) + + override suspend fun getSuggestions(query: String): List = + api.getSuggestions(query) + + override suspend fun getChannel(channelId: String): Channel = + api.getChannel(channelId) + + override suspend fun getChannelTab(data: String, nextPage: String?): ChannelTabResponse = + api.getChannelTab(data, nextPage) + + override suspend fun getChannelByName(channelName: String): Channel = + api.getChannelByName(channelName) + + override suspend fun getChannelNextPage(channelId: String, nextPage: String): Channel = + api.getChannelNextPage(channelId, nextPage) + + override suspend fun getPlaylist(playlistId: String): Playlist = + api.getPlaylist(playlistId) + + override suspend fun getPlaylistNextPage(playlistId: String, nextPage: String): Playlist = + api.getPlaylistNextPage(playlistId, nextPage) + + companion object { + val apiUrl get() = PreferenceHelper.getString(PreferenceKeys.FETCH_INSTANCE, PIPED_API_URL) + + private val api by resettableLazy(RetrofitInstance.apiLazyMgr) { + RetrofitInstance.buildRetrofitInstance(apiUrl) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt index 8b7442617..68abc5102 100644 --- a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt +++ b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt @@ -52,7 +52,7 @@ object PlaylistsHelper { suspend fun getPlaylist(playlistId: String): Playlist { // load locally stored playlists with the auth api return when (getPrivatePlaylistType(playlistId)) { - PlaylistType.PUBLIC -> RetrofitInstance.api.getPlaylist(playlistId) + PlaylistType.PUBLIC -> MediaServiceRepository.instance.getPlaylist(playlistId) else -> playlistsRepository.getPlaylist(playlistId) }.apply { relatedStreams = relatedStreams.deArrow() diff --git a/app/src/main/java/com/github/libretube/api/RetrofitInstance.kt b/app/src/main/java/com/github/libretube/api/RetrofitInstance.kt index 2fd527bcc..ec863143b 100644 --- a/app/src/main/java/com/github/libretube/api/RetrofitInstance.kt +++ b/app/src/main/java/com/github/libretube/api/RetrofitInstance.kt @@ -11,55 +11,33 @@ import retrofit2.converter.kotlinx.serialization.asConverterFactory import retrofit2.create object RetrofitInstance { - private const val PIPED_API_URL = "https://pipedapi.kavin.rocks" - val apiUrl get() = PreferenceHelper.getString(PreferenceKeys.FETCH_INSTANCE, PIPED_API_URL) + const val PIPED_API_URL = "https://pipedapi.kavin.rocks" + val authUrl - get() = when ( + get() = if ( PreferenceHelper.getBoolean( PreferenceKeys.AUTH_INSTANCE_TOGGLE, false ) ) { - true -> PreferenceHelper.getString( + PreferenceHelper.getString( PreferenceKeys.AUTH_INSTANCE, PIPED_API_URL ) - - false -> apiUrl + } else { + PipedMediaServiceRepository.apiUrl } - val lazyMgr = resettableManager() - private val kotlinxConverterFactory = JsonHelper.json + val apiLazyMgr = resettableManager() + val kotlinxConverterFactory = JsonHelper.json .asConverterFactory("application/json".toMediaType()) - private val httpClient by lazy { buildClient() } + val httpClient by lazy { buildClient() } - val api by resettableLazy(lazyMgr) { - Retrofit.Builder() - .baseUrl(apiUrl) - .client(httpClient) - .addConverterFactory(kotlinxConverterFactory) - .build() - .create() - } + val authApi = buildRetrofitInstance(authUrl) - val authApi by resettableLazy(lazyMgr) { - Retrofit.Builder() - .baseUrl(authUrl) - .client(httpClient) - .addConverterFactory(kotlinxConverterFactory) - .build() - .create() - } - - val externalApi by resettableLazy(lazyMgr) { - Retrofit.Builder() - .baseUrl(apiUrl) - .client(httpClient) - .addConverterFactory(kotlinxConverterFactory) - .build() - .create() - } + // the url provided here isn't actually used anywhere in the external api + val externalApi = buildRetrofitInstance(PIPED_API_URL) private fun buildClient(): OkHttpClient { val httpClient = OkHttpClient().newBuilder() @@ -74,4 +52,11 @@ object RetrofitInstance { return httpClient.build() } + + inline fun buildRetrofitInstance(apiUrl: String): T = Retrofit.Builder() + .baseUrl(apiUrl) + .client(httpClient) + .addConverterFactory(kotlinxConverterFactory) + .build() + .create() } diff --git a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt index 955da92d9..1436decb3 100644 --- a/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt +++ b/app/src/main/java/com/github/libretube/api/StreamsExtractor.kt @@ -85,7 +85,7 @@ fun StreamInfoItem.toStreamItem( object StreamsExtractor { suspend fun extractStreams(videoId: String): Streams = withContext(Dispatchers.IO) { if (!PlayerHelper.disablePipedProxy || !PlayerHelper.localStreamExtraction) { - return@withContext RetrofitInstance.api.getStreams(videoId).deArrow(videoId) + return@withContext MediaServiceRepository.instance.getStreams(videoId).deArrow(videoId) } val respAsync = async { diff --git a/app/src/main/java/com/github/libretube/helpers/ProxyHelper.kt b/app/src/main/java/com/github/libretube/helpers/ProxyHelper.kt index d3a2a03d7..d0af9d87a 100644 --- a/app/src/main/java/com/github/libretube/helpers/ProxyHelper.kt +++ b/app/src/main/java/com/github/libretube/helpers/ProxyHelper.kt @@ -1,5 +1,6 @@ package com.github.libretube.helpers +import com.github.libretube.api.PipedMediaServiceRepository import com.github.libretube.api.RetrofitInstance import com.github.libretube.constants.PreferenceKeys import kotlinx.coroutines.CoroutineScope @@ -11,9 +12,10 @@ object ProxyHelper { fun fetchProxyUrl() { CoroutineScope(Dispatchers.IO).launch { runCatching { - RetrofitInstance.api.getConfig().imageProxyUrl?.let { - PreferenceHelper.putString(PreferenceKeys.IMAGE_PROXY_URL, it) - } + RetrofitInstance.externalApi.getInstanceConfig(PipedMediaServiceRepository.apiUrl) + .imageProxyUrl?.let { + PreferenceHelper.putString(PreferenceKeys.IMAGE_PROXY_URL, it) + } } } } diff --git a/app/src/main/java/com/github/libretube/repo/LocalPlaylistsRepository.kt b/app/src/main/java/com/github/libretube/repo/LocalPlaylistsRepository.kt index 63c35c9c5..ba0d858e8 100644 --- a/app/src/main/java/com/github/libretube/repo/LocalPlaylistsRepository.kt +++ b/app/src/main/java/com/github/libretube/repo/LocalPlaylistsRepository.kt @@ -1,8 +1,8 @@ package com.github.libretube.repo +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.PlaylistsHelper import com.github.libretube.api.PlaylistsHelper.MAX_CONCURRENT_IMPORT_CALLS -import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.StreamsExtractor import com.github.libretube.api.obj.Playlist import com.github.libretube.api.obj.Playlists @@ -84,7 +84,7 @@ class LocalPlaylistsRepository: PlaylistRepository { } override suspend fun clonePlaylist(playlistId: String): String { - val playlist = RetrofitInstance.api.getPlaylist(playlistId) + val playlist = MediaServiceRepository.instance.getPlaylist(playlistId) val newPlaylist = createPlaylist(playlist.name ?: "Unknown name") PlaylistsHelper.addToPlaylist(newPlaylist, *playlist.relatedStreams.toTypedArray()) @@ -92,7 +92,7 @@ class LocalPlaylistsRepository: PlaylistRepository { var nextPage = playlist.nextpage while (nextPage != null) { nextPage = runCatching { - RetrofitInstance.api.getPlaylistNextPage(playlistId, nextPage!!).apply { + MediaServiceRepository.instance.getPlaylistNextPage(playlistId, nextPage!!).apply { PlaylistsHelper.addToPlaylist(newPlaylist, *relatedStreams.toTypedArray()) }.nextpage }.getOrNull() diff --git a/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt b/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt index e6dbe732e..56166588e 100644 --- a/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt +++ b/app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt @@ -12,7 +12,7 @@ import androidx.media3.datasource.DefaultDataSource import androidx.media3.exoplayer.hls.HlsMediaSource import com.github.libretube.R import com.github.libretube.api.JsonHelper -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.StreamsExtractor import com.github.libretube.api.SubscriptionHelper import com.github.libretube.api.obj.Segment @@ -20,7 +20,6 @@ import com.github.libretube.api.obj.Streams import com.github.libretube.constants.IntentData import com.github.libretube.constants.PreferenceKeys import com.github.libretube.db.DatabaseHelper -import com.github.libretube.db.DatabaseHolder import com.github.libretube.enums.PlayerCommand import com.github.libretube.extensions.parcelable import com.github.libretube.extensions.setMetadata @@ -206,7 +205,7 @@ open class OnlinePlayerService : AbstractPlayerService() { private fun fetchSponsorBlockSegments() = scope.launch(Dispatchers.IO) { runCatching { if (sponsorBlockConfig.isEmpty()) return@runCatching - sponsorBlockSegments = RetrofitInstance.api.getSegments( + sponsorBlockSegments = MediaServiceRepository.instance.getSegments( videoId, JsonHelper.json.encodeToString(sponsorBlockConfig.keys), """["skip","mute","full","poi","chapter"]""" diff --git a/app/src/main/java/com/github/libretube/services/PlaylistDownloadEnqueueService.kt b/app/src/main/java/com/github/libretube/services/PlaylistDownloadEnqueueService.kt index 1cef39970..56e85b25a 100644 --- a/app/src/main/java/com/github/libretube/services/PlaylistDownloadEnqueueService.kt +++ b/app/src/main/java/com/github/libretube/services/PlaylistDownloadEnqueueService.kt @@ -10,8 +10,8 @@ import androidx.lifecycle.LifecycleService import androidx.lifecycle.lifecycleScope import com.github.libretube.LibreTubeApp.Companion.PLAYLIST_DOWNLOAD_ENQUEUE_CHANNEL_NAME import com.github.libretube.R +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.PlaylistsHelper -import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.StreamsExtractor import com.github.libretube.api.obj.PipedStream import com.github.libretube.api.obj.StreamItem @@ -95,7 +95,7 @@ class PlaylistDownloadEnqueueService : LifecycleService() { private suspend fun enqueuePublicPlaylist() { val playlist = try { - RetrofitInstance.api.getPlaylist(playlistId) + MediaServiceRepository.instance.getPlaylist(playlistId) } catch (e: Exception) { toastFromMainDispatcher(e.localizedMessage.orEmpty()) stopSelf() @@ -111,7 +111,7 @@ class PlaylistDownloadEnqueueService : LifecycleService() { while (nextPage != null) { val playlistPage = runCatching { - RetrofitInstance.api.getPlaylistNextPage(playlistId, nextPage!!) + MediaServiceRepository.instance.getPlaylistNextPage(playlistId, nextPage!!) }.getOrNull() if (playlistPage == null && alreadyRetriedOnce) { diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt index 933b56fe9..82d49c674 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitDeArrowDialog.kt @@ -6,6 +6,7 @@ import android.os.Bundle import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import com.github.libretube.R +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.obj.DeArrowBody import com.github.libretube.api.obj.DeArrowSubmitThumbnail @@ -71,7 +72,7 @@ class SubmitDeArrowDialog: DialogFragment() { private suspend fun fetchDeArrowData() { val data = try { withContext(Dispatchers.IO) { - RetrofitInstance.api.getDeArrowContent(videoId) + MediaServiceRepository.instance.getDeArrowContent(videoId) }.getOrElse(videoId) { return } } catch (e: Exception) { return diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt index 135b138a4..ce5fb7061 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt @@ -10,6 +10,7 @@ import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import com.github.libretube.R import com.github.libretube.api.JsonHelper +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.obj.Segment import com.github.libretube.constants.IntentData @@ -146,7 +147,7 @@ class SubmitSegmentDialog : DialogFragment() { private suspend fun fetchSegments() { val categories = resources.getStringArray(R.array.sponsorBlockSegments).toList() segments = try { - RetrofitInstance.api.getSegments(videoId, JsonHelper.json.encodeToString(categories)).segments + MediaServiceRepository.instance.getSegments(videoId, JsonHelper.json.encodeToString(categories)).segments } catch (e: Exception) { Log.e(TAG(), e.toString()) return diff --git a/app/src/main/java/com/github/libretube/ui/fragments/ChannelContentFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/ChannelContentFragment.kt index ff753aa37..ba546d0bf 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/ChannelContentFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/ChannelContentFragment.kt @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.ChannelTab import com.github.libretube.api.obj.StreamItem import com.github.libretube.constants.IntentData @@ -47,7 +47,7 @@ class ChannelContentFragment : DynamicLayoutManagerFragment(R.layout.fragment_ch private suspend fun fetchChannelNextPage(nextPage: String): String? { val response = withContext(Dispatchers.IO) { - RetrofitInstance.api.getChannelNextPage(channelId!!, nextPage).apply { + MediaServiceRepository.instance.getChannelNextPage(channelId!!, nextPage).apply { relatedStreams = relatedStreams.deArrow() } } @@ -57,7 +57,7 @@ class ChannelContentFragment : DynamicLayoutManagerFragment(R.layout.fragment_ch private suspend fun fetchTabNextPage(nextPage: String, tab: ChannelTab): String? { val newContent = withContext(Dispatchers.IO) { - RetrofitInstance.api.getChannelTab(tab.data, nextPage) + MediaServiceRepository.instance.getChannelTab(tab.data, nextPage) }.apply { content = content.deArrow() } @@ -77,7 +77,7 @@ class ChannelContentFragment : DynamicLayoutManagerFragment(R.layout.fragment_ch private fun loadChannelTab(tab: ChannelTab) = lifecycleScope.launch { val response = try { withContext(Dispatchers.IO) { - RetrofitInstance.api.getChannelTab(tab.data) + MediaServiceRepository.instance.getChannelTab(tab.data) }.apply { content = content.deArrow() } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt index d9b0d8b2d..483aec078 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt @@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 import com.github.libretube.R -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.ChannelTab import com.github.libretube.api.obj.StreamItem import com.github.libretube.constants.IntentData @@ -122,9 +122,9 @@ class ChannelFragment : DynamicLayoutManagerFragment(R.layout.fragment_channel) val response = try { withContext(Dispatchers.IO) { if (channelId != null) { - RetrofitInstance.api.getChannel(channelId!!) + MediaServiceRepository.instance.getChannel(channelId!!) } else { - RetrofitInstance.api.getChannelByName(channelName!!) + MediaServiceRepository.instance.getChannelByName(channelName!!) }.apply { relatedStreams = relatedStreams.deArrow() } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index de8324bbb..1217173ef 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -18,8 +18,8 @@ import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.PlaylistsHelper -import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.obj.Playlist import com.github.libretube.api.obj.StreamItem import com.github.libretube.constants.IntentData @@ -382,7 +382,7 @@ class PlaylistFragment : DynamicLayoutManagerFragment(R.layout.fragment_playlist val response = try { withContext(Dispatchers.IO) { // load locally stored playlists with the auth api - RetrofitInstance.api.getPlaylistNextPage(playlistId, nextPage!!) + MediaServiceRepository.instance.getPlaylistNextPage(playlistId, nextPage!!) } } catch (e: Exception) { context?.toastFromMainDispatcher(e.localizedMessage.orEmpty()) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SearchSuggestionsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SearchSuggestionsFragment.kt index 0bcf0cce1..9f5d898f5 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SearchSuggestionsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SearchSuggestionsFragment.kt @@ -12,7 +12,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.map import androidx.navigation.fragment.findNavController import com.github.libretube.R -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.constants.IntentData import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.FragmentSearchSuggestionsBinding @@ -102,7 +102,7 @@ class SearchSuggestionsFragment : Fragment(R.layout.fragment_search_suggestions) lifecycleScope.launch { val response = try { withContext(Dispatchers.IO) { - RetrofitInstance.api.getSuggestions(query) + MediaServiceRepository.instance.getSuggestions(query) } } catch (e: Exception) { Log.e(TAG(), e.toString()) diff --git a/app/src/main/java/com/github/libretube/ui/models/HomeViewModel.kt b/app/src/main/java/com/github/libretube/ui/models/HomeViewModel.kt index 6f862aaba..f3f21f02f 100644 --- a/app/src/main/java/com/github/libretube/ui/models/HomeViewModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/HomeViewModel.kt @@ -4,8 +4,8 @@ import android.content.Context import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.PlaylistsHelper -import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.SubscriptionHelper import com.github.libretube.api.obj.Playlists import com.github.libretube.api.obj.StreamItem @@ -78,7 +78,7 @@ class HomeViewModel : ViewModel() { runSafely( onSuccess = { videos -> trending.updateIfChanged(videos) }, - ioBlock = { RetrofitInstance.api.getTrending(region).deArrow().take(10) } + ioBlock = { MediaServiceRepository.instance.getTrending(region).deArrow().take(10) } ) } diff --git a/app/src/main/java/com/github/libretube/ui/models/TrendsViewModel.kt b/app/src/main/java/com/github/libretube/ui/models/TrendsViewModel.kt index 4cc928e3a..f2ecfb042 100644 --- a/app/src/main/java/com/github/libretube/ui/models/TrendsViewModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/TrendsViewModel.kt @@ -8,7 +8,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.github.libretube.R -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.StreamItem import com.github.libretube.extensions.TAG import com.github.libretube.helpers.LocaleHelper @@ -28,7 +28,7 @@ class TrendsViewModel : ViewModel() { try { val region = LocaleHelper.getTrendingRegion(context) val response = withContext(Dispatchers.IO) { - RetrofitInstance.api.getTrending(region).deArrow() + MediaServiceRepository.instance.getTrending(region).deArrow() } trendingVideos.postValue(response) } catch (e: IOException) { diff --git a/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt b/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt index 7c31e725c..e21e40b60 100644 --- a/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt +++ b/app/src/main/java/com/github/libretube/ui/models/WelcomeViewModel.kt @@ -77,7 +77,7 @@ class WelcomeViewModel( private fun refreshAndNavigate() { // refresh the api urls since they have changed likely - RetrofitInstance.lazyMgr.reset() + RetrofitInstance.apiLazyMgr.reset() savedStateHandle[UI_STATE] = _uiState.value.copy(navigateToMain = Unit) } diff --git a/app/src/main/java/com/github/libretube/ui/models/sources/CommentPagingSource.kt b/app/src/main/java/com/github/libretube/ui/models/sources/CommentPagingSource.kt index efbf339c2..abba56dfc 100644 --- a/app/src/main/java/com/github/libretube/ui/models/sources/CommentPagingSource.kt +++ b/app/src/main/java/com/github/libretube/ui/models/sources/CommentPagingSource.kt @@ -2,7 +2,7 @@ package com.github.libretube.ui.models.sources import androidx.paging.PagingSource import androidx.paging.PagingState -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.Comment class CommentPagingSource( @@ -14,8 +14,8 @@ class CommentPagingSource( override suspend fun load(params: LoadParams): LoadResult { return try { val result = params.key?.let { - RetrofitInstance.api.getCommentsNextPage(videoId, it) - } ?: RetrofitInstance.api.getComments(videoId) + MediaServiceRepository.instance.getCommentsNextPage(videoId, it) + } ?: MediaServiceRepository.instance.getComments(videoId) if (result.commentCount > 0) onCommentCount(result.commentCount) diff --git a/app/src/main/java/com/github/libretube/ui/models/sources/CommentRepliesPagingSource.kt b/app/src/main/java/com/github/libretube/ui/models/sources/CommentRepliesPagingSource.kt index 7b0b98d39..b7725ba46 100644 --- a/app/src/main/java/com/github/libretube/ui/models/sources/CommentRepliesPagingSource.kt +++ b/app/src/main/java/com/github/libretube/ui/models/sources/CommentRepliesPagingSource.kt @@ -2,7 +2,7 @@ package com.github.libretube.ui.models.sources import androidx.paging.PagingSource import androidx.paging.PagingState -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.Comment class CommentRepliesPagingSource( @@ -14,7 +14,7 @@ class CommentRepliesPagingSource( override suspend fun load(params: LoadParams): LoadResult { return try { val key = params.key.orEmpty().ifEmpty { originalComment.repliesPage.orEmpty() } - val result = RetrofitInstance.api.getCommentsNextPage(videoId, key) + val result = MediaServiceRepository.instance.getCommentsNextPage(videoId, key) val replies = result.comments.toMutableList() if (params.key.isNullOrEmpty()) { diff --git a/app/src/main/java/com/github/libretube/ui/models/sources/SearchPagingSource.kt b/app/src/main/java/com/github/libretube/ui/models/sources/SearchPagingSource.kt index e6cf7f260..d2c0d283a 100644 --- a/app/src/main/java/com/github/libretube/ui/models/sources/SearchPagingSource.kt +++ b/app/src/main/java/com/github/libretube/ui/models/sources/SearchPagingSource.kt @@ -2,7 +2,7 @@ package com.github.libretube.ui.models.sources import androidx.paging.PagingSource import androidx.paging.PagingState -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.ContentItem import com.github.libretube.util.deArrow @@ -15,8 +15,8 @@ class SearchPagingSource( override suspend fun load(params: LoadParams): LoadResult { return try { val result = params.key?.let { - RetrofitInstance.api.getSearchResultsNextPage(searchQuery, searchFilter, it) - } ?: RetrofitInstance.api.getSearchResults(searchQuery, searchFilter) + MediaServiceRepository.instance.getSearchResultsNextPage(searchQuery, searchFilter, it) + } ?: MediaServiceRepository.instance.getSearchResults(searchQuery, searchFilter) LoadResult.Page(result.items.deArrow(), null, result.nextpage) } catch (e: Exception) { LoadResult.Error(e) diff --git a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt index 1d415e201..903311efd 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt @@ -11,6 +11,7 @@ import androidx.preference.SwitchPreferenceCompat import androidx.recyclerview.widget.LinearLayoutManager import com.github.libretube.R import com.github.libretube.api.InstanceRepository +import com.github.libretube.api.PipedMediaServiceRepository import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.obj.PipedInstance import com.github.libretube.constants.IntentData @@ -68,13 +69,13 @@ class InstanceSettings : BasePreferenceFragment() { } authInstance.setOnPreferenceChangeListener { _, _ -> - RetrofitInstance.lazyMgr.reset() + RetrofitInstance.apiLazyMgr.reset() logoutAndUpdateUI() true } authInstanceToggle.setOnPreferenceChangeListener { _, _ -> - RetrofitInstance.lazyMgr.reset() + RetrofitInstance.apiLazyMgr.reset() logoutAndUpdateUI() true } @@ -147,7 +148,7 @@ class InstanceSettings : BasePreferenceFragment() { // add the currently used instances to the list if they're currently down / not part // of the public instances list - for (apiUrl in listOf(RetrofitInstance.apiUrl, RetrofitInstance.authUrl)) { + for (apiUrl in listOf(PipedMediaServiceRepository.apiUrl, RetrofitInstance.authUrl)) { if (instances.none { it.apiUrl == apiUrl }) { val origin = apiUrl.toHttpUrl().host instances.add(PipedInstance(origin, apiUrl, isCurrentlyDown = true)) @@ -215,7 +216,7 @@ class InstanceSettings : BasePreferenceFragment() { if (!authInstanceToggle.isChecked) { logoutAndUpdateUI() } - RetrofitInstance.lazyMgr.reset() + RetrofitInstance.apiLazyMgr.reset() ActivityCompat.recreate(requireActivity()) } diff --git a/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt index 0de465668..49840b72a 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.util.Log import androidx.core.os.bundleOf import com.github.libretube.R -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.constants.IntentData import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.TAG @@ -66,7 +66,7 @@ class ChannelOptionsBottomSheet : BaseBottomSheet() { R.string.play_latest_videos -> { try { val channel = withContext(Dispatchers.IO) { - RetrofitInstance.api.getChannel(channelId) + MediaServiceRepository.instance.getChannel(channelId) } channel.relatedStreams.firstOrNull()?.url?.toID()?.let { NavigationHelper.navigateVideo( @@ -83,7 +83,7 @@ class ChannelOptionsBottomSheet : BaseBottomSheet() { R.string.playOnBackground -> { try { val channel = withContext(Dispatchers.IO) { - RetrofitInstance.api.getChannel(channelId) + MediaServiceRepository.instance.getChannel(channelId) } channel.relatedStreams.firstOrNull()?.url?.toID()?.let { BackgroundHelper.playOnBackground( diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt index 76f5b04f5..3d31604b4 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt @@ -3,8 +3,8 @@ package com.github.libretube.ui.sheets import android.os.Bundle import androidx.core.os.bundleOf import com.github.libretube.R +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.PlaylistsHelper -import com.github.libretube.api.RetrofitInstance import com.github.libretube.constants.IntentData import com.github.libretube.db.DatabaseHolder import com.github.libretube.enums.ImportFormat @@ -176,7 +176,7 @@ class PlaylistOptionsBottomSheet : BaseBottomSheet() { DatabaseHolder.Database.playlistBookmarkDao().deleteById(playlistId) } else { val bookmark = try { - RetrofitInstance.api.getPlaylist(playlistId) + MediaServiceRepository.instance.getPlaylist(playlistId) } catch (e: Exception) { return@withContext }.toPlaylistBookmark(playlistId) diff --git a/app/src/main/java/com/github/libretube/util/DeArrowUtil.kt b/app/src/main/java/com/github/libretube/util/DeArrowUtil.kt index 3677d38e6..866990d37 100644 --- a/app/src/main/java/com/github/libretube/util/DeArrowUtil.kt +++ b/app/src/main/java/com/github/libretube/util/DeArrowUtil.kt @@ -1,7 +1,7 @@ package com.github.libretube.util import android.util.Log -import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.obj.ContentItem import com.github.libretube.api.obj.DeArrowContent import com.github.libretube.api.obj.StreamItem @@ -26,7 +26,7 @@ object DeArrowUtil { val videoIdsString = videoIds.mapTo(TreeSet()) { it }.joinToString(",") return try { - RetrofitInstance.api.getDeArrowContent(videoIdsString) + MediaServiceRepository.instance.getDeArrowContent(videoIdsString) } catch (e: Exception) { Log.e(this::class.java.name, "Failed to fetch DeArrow content: ${e.message}") null diff --git a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt index d82c5f60f..bd2a3b97a 100644 --- a/app/src/main/java/com/github/libretube/util/PlayingQueue.kt +++ b/app/src/main/java/com/github/libretube/util/PlayingQueue.kt @@ -1,6 +1,7 @@ package com.github.libretube.util import androidx.media3.common.Player +import com.github.libretube.api.MediaServiceRepository import com.github.libretube.api.PlaylistsHelper import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.StreamsExtractor @@ -158,7 +159,7 @@ object PlayingQueue { ) { var playlistNextPage = nextPage while (playlistNextPage != null) { - RetrofitInstance.api.getPlaylistNextPage(playlistId, playlistNextPage).run { + MediaServiceRepository.instance.getPlaylistNextPage(playlistId, playlistNextPage).run { addToQueueAsync(relatedStreams, isMainList = isMainList) playlistNextPage = this.nextpage } @@ -177,7 +178,7 @@ object PlayingQueue { var channelNextPage = nextPage var pageIndex = 1 while (channelNextPage != null && pageIndex < 10) { - RetrofitInstance.api.getChannelNextPage(channelId, channelNextPage).run { + MediaServiceRepository.instance.getChannelNextPage(channelId, channelNextPage).run { addToQueueAsync(relatedStreams) channelNextPage = this.nextpage pageIndex++ @@ -186,7 +187,7 @@ object PlayingQueue { } private fun insertChannel(channelId: String, newCurrentStream: StreamItem) = runCatchingIO { - val channel = RetrofitInstance.api.getChannel(channelId) + val channel = MediaServiceRepository.instance.getChannel(channelId) addToQueueAsync(channel.relatedStreams, newCurrentStream) if (channel.nextpage == null) return@runCatchingIO fetchMoreFromChannel(channelId, channel.nextpage)