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:
Bill Thornton
2021-05-12 18:08:22 -04:00
committed by GitHub
3 changed files with 30 additions and 36 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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