diff --git a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt index 9a4a9e7..3498a92 100644 --- a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt +++ b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt @@ -646,6 +646,23 @@ object Crunchyroll { } } + suspend fun recommendations(n: Int = 20, start: Int = 0): RecommendationsList { + val recommendationsEndpoint = "/content/v1/$accountID/recommendations" + val parameters = listOf( + "locale" to Preferences.preferredLocale.toLanguageTag(), + "n" to n, + "start" to start, + "variant_id" to 0 + ) + + return try { + requestGet(recommendationsEndpoint, parameters) + }catch (ex: SerializationException) { + Log.e(TAG, "SerializationException in recommendations().", ex) + NoneRecommendationsList + } + } + /** * Account/Profile functions */ diff --git a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt index 6863e36..cc41aec 100644 --- a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt +++ b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/DataTypes.kt @@ -124,6 +124,7 @@ typealias SimilarToResult = Collection typealias DiscSeasonList = Collection typealias Watchlist = Collection typealias ContinueWatchingList = Collection +typealias RecommendationsList = Collection @Serializable data class UpNextSeriesItem( @@ -224,6 +225,7 @@ val NoneBrowseResult = BrowseResult(0, emptyList()) val NoneSimilarToResult = SimilarToResult(0, emptyList()) val NoneDiscSeasonList = DiscSeasonList(0, emptyList()) val NoneContinueWatchingList = ContinueWatchingList(0, emptyList()) +val NoneRecommendationsList = RecommendationsList(0, emptyList()) val NoneUpNextSeriesItem = UpNextSeriesItem( playhead = 0, diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/HomeFragment.kt b/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/HomeFragment.kt index 2b55e28..ff85c2d 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/HomeFragment.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/main/fragments/HomeFragment.kt @@ -61,6 +61,7 @@ class HomeFragment : Fragment() { binding.recyclerUpNext.addItemDecoration(MediaItemDecoration(9)) binding.recyclerWatchlist.addItemDecoration(MediaItemDecoration(9)) + binding.recyclerRecommendations.addItemDecoration(MediaItemDecoration(9)) binding.recyclerNewTitles.addItemDecoration(MediaItemDecoration(9)) binding.recyclerTopTen.addItemDecoration(MediaItemDecoration(9)) @@ -79,6 +80,12 @@ class HomeFragment : Fragment() { } ) + binding.recyclerRecommendations.adapter = MediaItemListAdapter( + MediaItemListAdapter.OnClickListener { + activity?.showFragment(MediaFragment(it.id)) + } + ) + binding.recyclerNewTitles.adapter = MediaItemListAdapter( MediaItemListAdapter.OnClickListener { activity?.showFragment(MediaFragment(it.id)) @@ -129,6 +136,9 @@ class HomeFragment : Fragment() { val adapterWatchlist = binding.recyclerWatchlist.adapter as MediaItemListAdapter adapterWatchlist.submitList(uiState.watchlistItems.toItemMediaList()) + val adapterRecommendations = binding.recyclerRecommendations.adapter as MediaItemListAdapter + adapterRecommendations.submitList(uiState.recommendationsItems.toItemMediaList()) + val adapterNewTitles = binding.recyclerNewTitles.adapter as MediaItemListAdapter adapterNewTitles.submitList(uiState.recentlyAddedItems.toItemMediaList()) diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/HomeViewModel.kt b/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/HomeViewModel.kt index 9b4f376..2a8f24f 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/main/viewmodel/HomeViewModel.kt @@ -40,6 +40,7 @@ class HomeViewModel : ViewModel() { data class Normal( val upNextItems: List, val watchlistItems: List, + val recommendationsItems: List, val recentlyAddedItems: List, val topTenItems: List, val highlightItem: Item, @@ -63,6 +64,9 @@ class HomeViewModel : ViewModel() { // run the loading in parallel to speed up the process val upNextJob = viewModelScope.async { Crunchyroll.upNextAccount().items } val watchlistJob = viewModelScope.async { Crunchyroll.watchlist(50).items } + val recommendationsJob = viewModelScope.async { + Crunchyroll.recommendations(20).items + } val recentlyAddedJob = viewModelScope.async { Crunchyroll.browse(sortBy = SortBy.NEWLY_ADDED, n = 50).items } @@ -76,8 +80,9 @@ class HomeViewModel : ViewModel() { val highlightItemIsWatchlist = Crunchyroll.isWatchlist(highlightItem.id) uiState.emit(UiState.Normal( - upNextJob.await(), watchlistJob.await(), recentlyAddedJob.await(), - topTenJob.await(), highlightItem, highlightItemIsWatchlist + upNextJob.await(), watchlistJob.await(), recommendationsJob.await(), + recentlyAddedJob.await(), topTenJob.await(), highlightItem, + highlightItemIsWatchlist )) } catch (e: Exception) { uiState.emit(UiState.Error(e.message)) diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt index 34bbd85..2fbc175 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerActivity.kt @@ -462,7 +462,6 @@ class PlayerActivity : AppCompatActivity() { playerBinding.buttonNextEp.isVisible = false } }) - } private fun showButtonSkipOp() { diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index f20ab33..199b418 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -163,6 +163,34 @@ tools:listitem="@layout/item_media" /> + + + + + + + Highlight Weiterschauen Meine Liste + Empfehlungen Neue Episoden Neue Simulcasts Neue Titel diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 43b902f..e319e8d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,6 +9,7 @@ Highlight Up next My list + Recommendations New episodes New simulcasts New titles