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