Ask for login if server responds with 401
This commit is contained in:
parent
e621032ab2
commit
1c6c8640b0
10 changed files with 34 additions and 6 deletions
|
@ -1,14 +1,11 @@
|
||||||
package dev.jdtech.jellyfin.database
|
package dev.jdtech.jellyfin.database
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.room.Dao
|
import androidx.room.*
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.Query
|
|
||||||
import androidx.room.Update
|
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface ServerDatabaseDao {
|
interface ServerDatabaseDao {
|
||||||
@Insert
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
fun insert(server: Server)
|
fun insert(server: Server)
|
||||||
|
|
||||||
@Update
|
@Update
|
||||||
|
|
|
@ -14,6 +14,7 @@ import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter
|
||||||
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
||||||
import dev.jdtech.jellyfin.databinding.FragmentFavoriteBinding
|
import dev.jdtech.jellyfin.databinding.FragmentFavoriteBinding
|
||||||
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
||||||
|
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
|
||||||
import dev.jdtech.jellyfin.viewmodels.FavoriteViewModel
|
import dev.jdtech.jellyfin.viewmodels.FavoriteViewModel
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
|
@ -44,6 +45,7 @@ class FavoriteFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.error.observe(viewLifecycleOwner, { error ->
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
|
checkIfLoginRequired(error)
|
||||||
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
||||||
binding.favoritesRecyclerView.visibility = View.GONE
|
binding.favoritesRecyclerView.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
||||||
import dev.jdtech.jellyfin.adapters.ViewListAdapter
|
import dev.jdtech.jellyfin.adapters.ViewListAdapter
|
||||||
import dev.jdtech.jellyfin.databinding.FragmentHomeBinding
|
import dev.jdtech.jellyfin.databinding.FragmentHomeBinding
|
||||||
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
||||||
|
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
|
||||||
import dev.jdtech.jellyfin.viewmodels.HomeViewModel
|
import dev.jdtech.jellyfin.viewmodels.HomeViewModel
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
|
@ -73,6 +74,7 @@ class HomeFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.error.observe(viewLifecycleOwner, { error ->
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
|
checkIfLoginRequired(error)
|
||||||
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
||||||
binding.viewsRecyclerView.visibility = View.GONE
|
binding.viewsRecyclerView.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
|
@ -86,7 +88,10 @@ class HomeFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.errorLayout.errorDetailsButton.setOnClickListener {
|
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
|
return binding.root
|
||||||
|
|
|
@ -14,6 +14,7 @@ import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
|
||||||
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
||||||
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
|
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
|
||||||
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
||||||
|
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
|
@ -41,6 +42,7 @@ class LibraryFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.error.observe(viewLifecycleOwner, { error ->
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
|
checkIfLoginRequired(error)
|
||||||
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
||||||
binding.itemsRecyclerView.visibility = View.GONE
|
binding.itemsRecyclerView.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import dev.jdtech.jellyfin.R
|
||||||
import dev.jdtech.jellyfin.adapters.CollectionListAdapter
|
import dev.jdtech.jellyfin.adapters.CollectionListAdapter
|
||||||
import dev.jdtech.jellyfin.databinding.FragmentMediaBinding
|
import dev.jdtech.jellyfin.databinding.FragmentMediaBinding
|
||||||
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
||||||
|
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
|
||||||
import dev.jdtech.jellyfin.viewmodels.MediaViewModel
|
import dev.jdtech.jellyfin.viewmodels.MediaViewModel
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
|
@ -66,6 +67,7 @@ class MediaFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.error.observe(viewLifecycleOwner, { error ->
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
|
checkIfLoginRequired(error)
|
||||||
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
||||||
binding.viewsRecyclerView.visibility = View.GONE
|
binding.viewsRecyclerView.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -19,6 +19,7 @@ import dev.jdtech.jellyfin.databinding.FragmentMediaInfoBinding
|
||||||
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
||||||
import dev.jdtech.jellyfin.dialogs.VideoVersionDialogFragment
|
import dev.jdtech.jellyfin.dialogs.VideoVersionDialogFragment
|
||||||
import dev.jdtech.jellyfin.models.PlayerItem
|
import dev.jdtech.jellyfin.models.PlayerItem
|
||||||
|
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
|
||||||
import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModel
|
import dev.jdtech.jellyfin.viewmodels.MediaInfoViewModel
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
|
@ -48,6 +49,7 @@ class MediaInfoFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.error.observe(viewLifecycleOwner, { error ->
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
|
checkIfLoginRequired(error)
|
||||||
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
||||||
binding.mediaInfoScrollview.visibility = View.GONE
|
binding.mediaInfoScrollview.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter
|
||||||
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
|
||||||
import dev.jdtech.jellyfin.databinding.FragmentSearchResultBinding
|
import dev.jdtech.jellyfin.databinding.FragmentSearchResultBinding
|
||||||
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
||||||
|
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
|
||||||
import dev.jdtech.jellyfin.viewmodels.SearchResultViewModel
|
import dev.jdtech.jellyfin.viewmodels.SearchResultViewModel
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
|
@ -47,6 +48,7 @@ class SearchResultFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.error.observe(viewLifecycleOwner, { error ->
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
|
checkIfLoginRequired(error)
|
||||||
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
||||||
binding.searchResultsRecyclerView.visibility = View.GONE
|
binding.searchResultsRecyclerView.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import dev.jdtech.jellyfin.R
|
||||||
import dev.jdtech.jellyfin.adapters.EpisodeListAdapter
|
import dev.jdtech.jellyfin.adapters.EpisodeListAdapter
|
||||||
import dev.jdtech.jellyfin.databinding.FragmentSeasonBinding
|
import dev.jdtech.jellyfin.databinding.FragmentSeasonBinding
|
||||||
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
|
||||||
|
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
|
||||||
import dev.jdtech.jellyfin.viewmodels.SeasonViewModel
|
import dev.jdtech.jellyfin.viewmodels.SeasonViewModel
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
|
||||||
|
@ -39,6 +40,7 @@ class SeasonFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.error.observe(viewLifecycleOwner, { error ->
|
viewModel.error.observe(viewLifecycleOwner, { error ->
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
|
checkIfLoginRequired(error)
|
||||||
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
binding.errorLayout.errorPanel.visibility = View.VISIBLE
|
||||||
binding.episodesRecyclerView.visibility = View.GONE
|
binding.episodesRecyclerView.visibility = View.GONE
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
package dev.jdtech.jellyfin.utils
|
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 dev.jdtech.jellyfin.models.View
|
||||||
import org.jellyfin.sdk.model.api.BaseItemDto
|
import org.jellyfin.sdk.model.api.BaseItemDto
|
||||||
|
import timber.log.Timber
|
||||||
|
|
||||||
fun BaseItemDto.toView(): View {
|
fun BaseItemDto.toView(): View {
|
||||||
return View(
|
return View(
|
||||||
|
@ -10,3 +14,10 @@ fun BaseItemDto.toView(): View {
|
||||||
type = collectionType
|
type = collectionType
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Fragment.checkIfLoginRequired(error: String) {
|
||||||
|
if (error.contains("401")) {
|
||||||
|
Timber.d("Login required!")
|
||||||
|
findNavController().navigate(MainNavigationDirections.actionGlobalLoginFragment())
|
||||||
|
}
|
||||||
|
}
|
|
@ -243,5 +243,8 @@
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<include app:graph="@navigation/aboutlibs_navigation" />
|
<include app:graph="@navigation/aboutlibs_navigation" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_global_loginFragment"
|
||||||
|
app:destination="@id/loginFragment" />
|
||||||
|
|
||||||
</navigation>
|
</navigation>
|
Loading…
Reference in a new issue