diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt index 7363f121..f7f3efef 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt @@ -1,14 +1,11 @@ package dev.jdtech.jellyfin.database import androidx.lifecycle.LiveData -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.Query -import androidx.room.Update +import androidx.room.* @Dao interface ServerDatabaseDao { - @Insert + @Insert(onConflict = OnConflictStrategy.REPLACE) fun insert(server: Server) @Update diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt index d92e5a04..768fd6a2 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt @@ -14,6 +14,7 @@ import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.databinding.FragmentFavoriteBinding import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment +import dev.jdtech.jellyfin.utils.checkIfLoginRequired import dev.jdtech.jellyfin.viewmodels.FavoriteViewModel import org.jellyfin.sdk.model.api.BaseItemDto @@ -44,6 +45,7 @@ class FavoriteFragment : Fragment() { viewModel.error.observe(viewLifecycleOwner, { error -> if (error != null) { + checkIfLoginRequired(error) binding.errorLayout.errorPanel.visibility = View.VISIBLE binding.favoritesRecyclerView.visibility = View.GONE } else { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt index 545a6d04..2752ef5b 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt @@ -12,6 +12,7 @@ import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.adapters.ViewListAdapter import dev.jdtech.jellyfin.databinding.FragmentHomeBinding import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment +import dev.jdtech.jellyfin.utils.checkIfLoginRequired import dev.jdtech.jellyfin.viewmodels.HomeViewModel import org.jellyfin.sdk.model.api.BaseItemDto @@ -73,6 +74,7 @@ class HomeFragment : Fragment() { viewModel.error.observe(viewLifecycleOwner, { error -> if (error != null) { + checkIfLoginRequired(error) binding.errorLayout.errorPanel.visibility = View.VISIBLE binding.viewsRecyclerView.visibility = View.GONE } else { @@ -86,7 +88,10 @@ class HomeFragment : Fragment() { } binding.errorLayout.errorDetailsButton.setOnClickListener { - ErrorDialogFragment(viewModel.error.value ?: getString(R.string.unknown_error)).show(parentFragmentManager, "errordialog") + ErrorDialogFragment(viewModel.error.value ?: getString(R.string.unknown_error)).show( + parentFragmentManager, + "errordialog" + ) } return binding.root diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt index 24399079..739f00f9 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt @@ -14,6 +14,7 @@ import dev.jdtech.jellyfin.viewmodels.LibraryViewModel import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment +import dev.jdtech.jellyfin.utils.checkIfLoginRequired import org.jellyfin.sdk.model.api.BaseItemDto @AndroidEntryPoint @@ -41,6 +42,7 @@ class LibraryFragment : Fragment() { viewModel.error.observe(viewLifecycleOwner, { error -> if (error != null) { + checkIfLoginRequired(error) binding.errorLayout.errorPanel.visibility = View.VISIBLE binding.itemsRecyclerView.visibility = View.GONE } else { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt index fea8b358..c0ed3b2b 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt @@ -11,6 +11,7 @@ import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.adapters.CollectionListAdapter import dev.jdtech.jellyfin.databinding.FragmentMediaBinding import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment +import dev.jdtech.jellyfin.utils.checkIfLoginRequired import dev.jdtech.jellyfin.viewmodels.MediaViewModel import org.jellyfin.sdk.model.api.BaseItemDto @@ -66,6 +67,7 @@ class MediaFragment : Fragment() { viewModel.error.observe(viewLifecycleOwner, { error -> if (error != null) { + checkIfLoginRequired(error) binding.errorLayout.errorPanel.visibility = View.VISIBLE binding.viewsRecyclerView.visibility = View.GONE } else { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt index a94aa985..87df83de 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt @@ -19,6 +19,7 @@ import dev.jdtech.jellyfin.databinding.FragmentMediaInfoBinding import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment import dev.jdtech.jellyfin.dialogs.VideoVersionDialogFragment import dev.jdtech.jellyfin.models.PlayerItem +import dev.jdtech.jellyfin.utils.checkIfLoginRequired import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModel import org.jellyfin.sdk.model.api.BaseItemDto @@ -48,6 +49,7 @@ class MediaInfoFragment : Fragment() { viewModel.error.observe(viewLifecycleOwner, { error -> if (error != null) { + checkIfLoginRequired(error) binding.errorLayout.errorPanel.visibility = View.VISIBLE binding.mediaInfoScrollview.visibility = View.GONE } else { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt index f13de478..35e2fc65 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt @@ -15,6 +15,7 @@ import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter import dev.jdtech.jellyfin.adapters.ViewItemListAdapter import dev.jdtech.jellyfin.databinding.FragmentSearchResultBinding import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment +import dev.jdtech.jellyfin.utils.checkIfLoginRequired import dev.jdtech.jellyfin.viewmodels.SearchResultViewModel import org.jellyfin.sdk.model.api.BaseItemDto @@ -47,6 +48,7 @@ class SearchResultFragment : Fragment() { viewModel.error.observe(viewLifecycleOwner, { error -> if (error != null) { + checkIfLoginRequired(error) binding.errorLayout.errorPanel.visibility = View.VISIBLE binding.searchResultsRecyclerView.visibility = View.GONE } else { diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt index 7ae52879..d680ff90 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt @@ -13,6 +13,7 @@ import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.adapters.EpisodeListAdapter import dev.jdtech.jellyfin.databinding.FragmentSeasonBinding import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment +import dev.jdtech.jellyfin.utils.checkIfLoginRequired import dev.jdtech.jellyfin.viewmodels.SeasonViewModel import org.jellyfin.sdk.model.api.BaseItemDto @@ -39,6 +40,7 @@ class SeasonFragment : Fragment() { viewModel.error.observe(viewLifecycleOwner, { error -> if (error != null) { + checkIfLoginRequired(error) binding.errorLayout.errorPanel.visibility = View.VISIBLE binding.episodesRecyclerView.visibility = View.GONE } else { diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt index c68d73b0..55ec8723 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt @@ -1,7 +1,11 @@ package dev.jdtech.jellyfin.utils +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import dev.jdtech.jellyfin.MainNavigationDirections import dev.jdtech.jellyfin.models.View import org.jellyfin.sdk.model.api.BaseItemDto +import timber.log.Timber fun BaseItemDto.toView(): View { return View( @@ -9,4 +13,11 @@ fun BaseItemDto.toView(): View { name = name, type = collectionType ) +} + +fun Fragment.checkIfLoginRequired(error: String) { + if (error.contains("401")) { + Timber.d("Login required!") + findNavController().navigate(MainNavigationDirections.actionGlobalLoginFragment()) + } } \ No newline at end of file diff --git a/app/src/main/res/navigation/main_navigation.xml b/app/src/main/res/navigation/main_navigation.xml index b7928333..559933c0 100644 --- a/app/src/main/res/navigation/main_navigation.xml +++ b/app/src/main/res/navigation/main_navigation.xml @@ -243,5 +243,8 @@ + \ No newline at end of file