Move servers check to Activity (#136)
Remove MainViewModel Change startDestination when no servers are found
This commit is contained in:
parent
ba584473dd
commit
cc0ab920fd
5 changed files with 26 additions and 78 deletions
|
@ -114,7 +114,6 @@ private fun ImageView.loadImage(url: String, @DrawableRes errorPlaceHolderId: In
|
||||||
.placeholder(R.color.neutral_800)
|
.placeholder(R.color.neutral_800)
|
||||||
.error(errorPlaceHolderId)
|
.error(errorPlaceHolderId)
|
||||||
.into(this)
|
.into(this)
|
||||||
.view
|
|
||||||
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,30 +2,25 @@ package dev.jdtech.jellyfin
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.activity.viewModels
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||||
import androidx.lifecycle.Lifecycle
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
|
||||||
import androidx.navigation.fragment.NavHostFragment
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
import androidx.navigation.ui.AppBarConfiguration
|
import androidx.navigation.ui.AppBarConfiguration
|
||||||
import androidx.navigation.ui.NavigationUI
|
import androidx.navigation.ui.NavigationUI
|
||||||
import androidx.navigation.ui.setupActionBarWithNavController
|
import androidx.navigation.ui.setupActionBarWithNavController
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
|
||||||
import com.google.android.material.navigation.NavigationBarView
|
import com.google.android.material.navigation.NavigationBarView
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||||
import dev.jdtech.jellyfin.databinding.ActivityMainAppBinding
|
import dev.jdtech.jellyfin.databinding.ActivityMainAppBinding
|
||||||
import dev.jdtech.jellyfin.fragments.HomeFragmentDirections
|
|
||||||
import dev.jdtech.jellyfin.utils.loadDownloadLocation
|
import dev.jdtech.jellyfin.utils.loadDownloadLocation
|
||||||
import dev.jdtech.jellyfin.viewmodels.MainViewModel
|
import javax.inject.Inject
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityMainAppBinding
|
private lateinit var binding: ActivityMainAppBinding
|
||||||
private val viewModel: MainViewModel by viewModels()
|
@Inject
|
||||||
|
lateinit var database: ServerDatabaseDao
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
installSplashScreen()
|
installSplashScreen()
|
||||||
|
@ -44,6 +39,14 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
val navController = navHostFragment.navController
|
val navController = navHostFragment.navController
|
||||||
|
|
||||||
|
val nServers = database.getServersCount()
|
||||||
|
if (nServers < 1) {
|
||||||
|
val inflater = navController.navInflater
|
||||||
|
val graph = inflater.inflate(R.navigation.app_navigation)
|
||||||
|
graph.setStartDestination(R.id.addServerFragment)
|
||||||
|
navController.setGraph(graph, intent.extras)
|
||||||
|
}
|
||||||
|
|
||||||
// Passing each menu ID as a set of Ids because each
|
// Passing each menu ID as a set of Ids because each
|
||||||
// menu should be considered as top level destinations.
|
// menu should be considered as top level destinations.
|
||||||
val appBarConfiguration = AppBarConfiguration(
|
val appBarConfiguration = AppBarConfiguration(
|
||||||
|
@ -66,16 +69,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
loadDownloadLocation(applicationContext)
|
loadDownloadLocation(applicationContext)
|
||||||
|
|
||||||
lifecycleScope.launch {
|
|
||||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
||||||
viewModel.onNavigateToAddServer(lifecycleScope) {
|
|
||||||
if (it) {
|
|
||||||
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSupportNavigateUp(): Boolean {
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
|
|
|
@ -1,24 +1,20 @@
|
||||||
package dev.jdtech.jellyfin
|
package dev.jdtech.jellyfin
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.viewModels
|
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.lifecycle.Lifecycle
|
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
|
||||||
import androidx.navigation.fragment.NavHostFragment
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
||||||
import dev.jdtech.jellyfin.databinding.ActivityMainTvBinding
|
import dev.jdtech.jellyfin.databinding.ActivityMainTvBinding
|
||||||
import dev.jdtech.jellyfin.tv.ui.HomeFragmentDirections
|
|
||||||
import dev.jdtech.jellyfin.utils.loadDownloadLocation
|
import dev.jdtech.jellyfin.utils.loadDownloadLocation
|
||||||
import dev.jdtech.jellyfin.viewmodels.MainViewModel
|
import javax.inject.Inject
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
internal class MainActivityTv : FragmentActivity() {
|
internal class MainActivityTv : FragmentActivity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityMainTvBinding
|
private lateinit var binding: ActivityMainTvBinding
|
||||||
private val viewModel: MainViewModel by viewModels()
|
@Inject
|
||||||
|
lateinit var database: ServerDatabaseDao
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -28,17 +24,14 @@ internal class MainActivityTv : FragmentActivity() {
|
||||||
val navHostFragment =
|
val navHostFragment =
|
||||||
supportFragmentManager.findFragmentById(R.id.tv_nav_host) as NavHostFragment
|
supportFragmentManager.findFragmentById(R.id.tv_nav_host) as NavHostFragment
|
||||||
val navController = navHostFragment.navController
|
val navController = navHostFragment.navController
|
||||||
|
val nServers = database.getServersCount()
|
||||||
|
if (nServers < 1) {
|
||||||
|
val inflater = navController.navInflater
|
||||||
|
val graph = inflater.inflate(R.navigation.tv_navigation)
|
||||||
|
graph.setStartDestination(R.id.addServerTvFragment)
|
||||||
|
navController.setGraph(graph, intent.extras)
|
||||||
|
}
|
||||||
|
|
||||||
loadDownloadLocation(applicationContext)
|
loadDownloadLocation(applicationContext)
|
||||||
|
|
||||||
lifecycleScope.launch {
|
|
||||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
||||||
viewModel.onNavigateToAddServer(lifecycleScope) {
|
|
||||||
if (it) {
|
|
||||||
navController.navigate(HomeFragmentDirections.actionHomeFragmentToAddServerFragment())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -23,6 +23,9 @@ interface ServerDatabaseDao {
|
||||||
@Query("select * from servers")
|
@Query("select * from servers")
|
||||||
fun getAllServersSync(): List<Server>
|
fun getAllServersSync(): List<Server>
|
||||||
|
|
||||||
|
@Query("select count(*) from servers")
|
||||||
|
fun getServersCount(): Int
|
||||||
|
|
||||||
@Query("delete from servers where id = :id")
|
@Query("delete from servers where id = :id")
|
||||||
fun delete(id: String)
|
fun delete(id: String)
|
||||||
}
|
}
|
|
@ -1,40 +0,0 @@
|
||||||
package dev.jdtech.jellyfin.viewmodels
|
|
||||||
|
|
||||||
import androidx.lifecycle.LifecycleCoroutineScope
|
|
||||||
import androidx.lifecycle.ViewModel
|
|
||||||
import androidx.lifecycle.viewModelScope
|
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
|
||||||
import dev.jdtech.jellyfin.database.Server
|
|
||||||
import dev.jdtech.jellyfin.database.ServerDatabaseDao
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
import timber.log.Timber
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@HiltViewModel
|
|
||||||
class MainViewModel
|
|
||||||
@Inject
|
|
||||||
constructor(
|
|
||||||
private val database: ServerDatabaseDao,
|
|
||||||
) : ViewModel() {
|
|
||||||
private val navigateToAddServer = MutableSharedFlow<Boolean>()
|
|
||||||
|
|
||||||
fun onNavigateToAddServer(scope: LifecycleCoroutineScope, collector: (Boolean) -> Unit) {
|
|
||||||
scope.launch { navigateToAddServer.collect { collector(it) } }
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
Timber.d("Start Main")
|
|
||||||
viewModelScope.launch {
|
|
||||||
val servers: List<Server>
|
|
||||||
withContext(Dispatchers.IO) {
|
|
||||||
servers = database.getAllServersSync()
|
|
||||||
}
|
|
||||||
if (servers.isEmpty()) {
|
|
||||||
navigateToAddServer.emit(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue