Merge pull request #878 from nielsvanvelzen/session-start
Move worker initialization and auto bitrate test to after session is created
This commit is contained in:
@@ -5,7 +5,8 @@ import androidx.work.ExistingPeriodicWorkPolicy
|
||||
import androidx.work.PeriodicWorkRequestBuilder
|
||||
import androidx.work.WorkManager
|
||||
import androidx.work.await
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.acra.ACRA
|
||||
import org.acra.annotation.AcraCore
|
||||
import org.acra.annotation.AcraDialog
|
||||
@@ -15,6 +16,7 @@ import org.acra.sender.HttpSender
|
||||
import org.jellyfin.androidtv.auth.SessionRepository
|
||||
import org.jellyfin.androidtv.di.*
|
||||
import org.jellyfin.androidtv.integration.LeanbackChannelWorker
|
||||
import org.jellyfin.androidtv.util.AutoBitrate
|
||||
import org.koin.android.ext.android.get
|
||||
import org.koin.android.ext.android.getKoin
|
||||
import org.koin.android.ext.android.inject
|
||||
@@ -80,21 +82,6 @@ class JellyfinApplication : TvApp() {
|
||||
)
|
||||
}
|
||||
|
||||
// Setup background workers
|
||||
runBlocking {
|
||||
val workManager by inject<WorkManager>()
|
||||
|
||||
// Cancel all workers
|
||||
workManager.cancelAllWork().await()
|
||||
|
||||
// Recreate periodic workers
|
||||
workManager.enqueueUniquePeriodicWork(
|
||||
LeanbackChannelWorker.PERIODIC_UPDATE_REQUEST_NAME,
|
||||
ExistingPeriodicWorkPolicy.REPLACE,
|
||||
PeriodicWorkRequestBuilder<LeanbackChannelWorker>(1, TimeUnit.HOURS).build()
|
||||
).await()
|
||||
}
|
||||
|
||||
// Register lifecycle callbacks
|
||||
getKoin().getAll<ActivityLifecycleCallbacks>().forEach(::registerActivityLifecycleCallbacks)
|
||||
|
||||
@@ -105,6 +92,29 @@ class JellyfinApplication : TvApp() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called from the StartupActivity when the user session is started.
|
||||
*/
|
||||
suspend fun onSessionStart() {
|
||||
val workManager by inject<WorkManager>()
|
||||
val autoBitrate by inject<AutoBitrate>()
|
||||
|
||||
// Cancel all current workers
|
||||
workManager.cancelAllWork().await()
|
||||
|
||||
// Recreate periodic workers
|
||||
workManager.enqueueUniquePeriodicWork(
|
||||
LeanbackChannelWorker.PERIODIC_UPDATE_REQUEST_NAME,
|
||||
ExistingPeriodicWorkPolicy.REPLACE,
|
||||
PeriodicWorkRequestBuilder<LeanbackChannelWorker>(1, TimeUnit.HOURS).build()
|
||||
).await()
|
||||
|
||||
// Detect auto bitrate
|
||||
withContext(Dispatchers.IO) {
|
||||
autoBitrate.detect()
|
||||
}
|
||||
}
|
||||
|
||||
override fun attachBaseContext(base: Context?) {
|
||||
super.attachBaseContext(base)
|
||||
|
||||
|
||||
@@ -6,16 +6,12 @@ import androidx.leanback.widget.Presenter
|
||||
import androidx.leanback.widget.Row
|
||||
import androidx.leanback.widget.RowPresenter
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.work.ExistingWorkPolicy
|
||||
import androidx.work.OneTimeWorkRequest
|
||||
import androidx.work.WorkManager
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.isActive
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.jellyfin.androidtv.TvApp
|
||||
import org.jellyfin.androidtv.constant.HomeSectionType
|
||||
import org.jellyfin.androidtv.integration.LeanbackChannelWorker
|
||||
import org.jellyfin.androidtv.ui.browsing.BrowseRowDef
|
||||
import org.jellyfin.androidtv.ui.browsing.IRowLoader
|
||||
import org.jellyfin.androidtv.ui.browsing.StdBrowseFragment
|
||||
@@ -23,7 +19,6 @@ import org.jellyfin.androidtv.ui.playback.AudioEventListener
|
||||
import org.jellyfin.androidtv.ui.playback.MediaManager
|
||||
import org.jellyfin.androidtv.ui.presentation.CardPresenter
|
||||
import org.jellyfin.androidtv.ui.presentation.PositionableListRowPresenter
|
||||
import org.jellyfin.androidtv.util.AutoBitrate
|
||||
import org.jellyfin.androidtv.util.apiclient.callApi
|
||||
import org.jellyfin.apiclient.interaction.ApiClient
|
||||
import org.jellyfin.apiclient.model.entities.DisplayPreferences
|
||||
@@ -55,12 +50,6 @@ class HomeFragment : StdBrowseFragment(), AudioEventListener {
|
||||
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
// Get auto bitrate
|
||||
// TODO move to somewhere else (automatically start at app start?)
|
||||
lifecycleScope.launch(Dispatchers.IO) {
|
||||
get<AutoBitrate>().detect()
|
||||
}
|
||||
|
||||
// Subscribe to Audio messages
|
||||
mediaManager.addAudioEventListener(this)
|
||||
}
|
||||
@@ -68,15 +57,6 @@ class HomeFragment : StdBrowseFragment(), AudioEventListener {
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
// Update leanback channels
|
||||
// TODO Move this (on app start?)
|
||||
val channelUpdateRequest = OneTimeWorkRequest.from(LeanbackChannelWorker::class.java)
|
||||
get<WorkManager>().enqueueUniqueWork(
|
||||
LeanbackChannelWorker.SINGLE_UPDATE_REQUEST_NAME,
|
||||
ExistingWorkPolicy.REPLACE,
|
||||
channelUpdateRequest
|
||||
)
|
||||
|
||||
// Update audio queue
|
||||
Timber.i("Updating audio queue in HomeFragment (onResume)")
|
||||
nowPlaying.update(mRowsAdapter)
|
||||
|
||||
@@ -12,6 +12,7 @@ import androidx.fragment.app.replace
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.jellyfin.androidtv.JellyfinApplication
|
||||
import org.jellyfin.androidtv.R
|
||||
import org.jellyfin.androidtv.TvApp
|
||||
import org.jellyfin.androidtv.auth.ServerRepository
|
||||
@@ -97,6 +98,9 @@ class StartupActivity : FragmentActivity(R.layout.fragment_content_view) {
|
||||
val itemId = intent.getStringExtra(EXTRA_ITEM_ID)
|
||||
val itemIsUserView = intent.getBooleanExtra(EXTRA_ITEM_IS_USER_VIEW, false)
|
||||
|
||||
// Start session
|
||||
(application as? JellyfinApplication)?.onSessionStart()
|
||||
|
||||
if (itemId != null) {
|
||||
if (itemIsUserView) {
|
||||
// Try opening the user view
|
||||
|
||||
Reference in New Issue
Block a user