Change logging to Timber

This commit is contained in:
Jarne Demeulemeester 2021-07-18 16:00:08 +02:00
parent df73db0ece
commit 10cd5219ae
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
8 changed files with 34 additions and 25 deletions

View file

@ -99,6 +99,10 @@ dependencies {
implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer_version" implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer_version"
implementation files('libs/extension-ffmpeg-release.aar') implementation files('libs/extension-ffmpeg-release.aar')
// Timber
def timber_version = "4.7.1"
implementation "com.jakewharton.timber:timber:$timber_version"
// Testing // Testing
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.ext:junit:1.1.3'

View file

@ -2,6 +2,14 @@ package dev.jdtech.jellyfin
import android.app.Application import android.app.Application
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
import timber.log.Timber
@HiltAndroidApp @HiltAndroidApp
class BaseApplication : Application() class BaseApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
}
}

View file

@ -2,7 +2,6 @@ package dev.jdtech.jellyfin
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.WindowManager import android.view.WindowManager
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
@ -12,6 +11,7 @@ import androidx.navigation.navArgs
import com.google.android.exoplayer2.ui.StyledPlayerView import com.google.android.exoplayer2.ui.StyledPlayerView
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
import timber.log.Timber
@AndroidEntryPoint @AndroidEntryPoint
class PlayerActivity : AppCompatActivity() { class PlayerActivity : AppCompatActivity() {
@ -23,7 +23,7 @@ class PlayerActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
Log.d("PlayerActivity", "onCreate") Timber.d("Creating player activity")
setContentView(R.layout.activity_player) setContentView(R.layout.activity_player)
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
@ -47,7 +47,7 @@ class PlayerActivity : AppCompatActivity() {
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
Log.d("PlayerActivity", "onDestroy") Timber.d("Destroying player activity")
showSystemUI() showSystemUI()
} }

View file

@ -1,10 +1,10 @@
package dev.jdtech.jellyfin.repository package dev.jdtech.jellyfin.repository
import android.util.Log
import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.api.JellyfinApi
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.jellyfin.sdk.model.api.* import org.jellyfin.sdk.model.api.*
import timber.log.Timber
import java.util.* import java.util.*
class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRepository { class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRepository {
@ -139,21 +139,21 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
mediaSourceId = mediaSourceId mediaSourceId = mediaSourceId
) )
} catch (e: Exception) { } catch (e: Exception) {
Log.e("JellyfinRepository", "${e.message}") Timber.e(e)
} }
} }
return streamUrl return streamUrl
} }
override suspend fun postPlaybackStart(itemId: UUID) { override suspend fun postPlaybackStart(itemId: UUID) {
Log.d("PlayerActivity", "Sending start $itemId") Timber.d("Sending start $itemId")
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
jellyfinApi.playStateApi.onPlaybackStart(jellyfinApi.userId!!, itemId) jellyfinApi.playStateApi.onPlaybackStart(jellyfinApi.userId!!, itemId)
} }
} }
override suspend fun postPlaybackStop(itemId: UUID, positionTicks: Long) { override suspend fun postPlaybackStop(itemId: UUID, positionTicks: Long) {
Log.d("PlayerActivity", "Sending stop $itemId") Timber.d("Sending stop $itemId")
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
jellyfinApi.playStateApi.onPlaybackStopped( jellyfinApi.playStateApi.onPlaybackStopped(
jellyfinApi.userId!!, jellyfinApi.userId!!,
@ -168,6 +168,7 @@ class JellyfinRepositoryImpl(private val jellyfinApi: JellyfinApi) : JellyfinRep
positionTicks: Long, positionTicks: Long,
isPaused: Boolean isPaused: Boolean
) { ) {
Timber.d("Posting progress of $itemId, position: $positionTicks")
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
jellyfinApi.playStateApi.onPlaybackProgress( jellyfinApi.playStateApi.onPlaybackProgress(
jellyfinApi.userId!!, jellyfinApi.userId!!,

View file

@ -1,7 +1,6 @@
package dev.jdtech.jellyfin.viewmodels package dev.jdtech.jellyfin.viewmodels
import android.app.Application import android.app.Application
import android.util.Log
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@ -13,6 +12,7 @@ import dev.jdtech.jellyfin.database.ServerDatabaseDao
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
@ -42,7 +42,7 @@ constructor(
val jellyfinApi = JellyfinApi.newInstance(application, baseUrl) val jellyfinApi = JellyfinApi.newInstance(application, baseUrl)
try { try {
val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo() val publicSystemInfo by jellyfinApi.systemApi.getPublicSystemInfo()
Log.i("AddServerViewModel", "Remote server: ${publicSystemInfo.id}") Timber.d("Remote server: ${publicSystemInfo.id}")
if (serverAlreadyInDatabase(publicSystemInfo.id)) { if (serverAlreadyInDatabase(publicSystemInfo.id)) {
_error.value = "Server already added" _error.value = "Server already added"
@ -52,7 +52,7 @@ constructor(
_navigateToLogin.value = true _navigateToLogin.value = true
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e("AddServerViewModel", "${e.message}") Timber.e(e)
_error.value = e.message _error.value = e.message
_navigateToLogin.value = false _navigateToLogin.value = false
} }
@ -71,9 +71,9 @@ constructor(
servers = database.getAllServersSync() servers = database.getAllServersSync()
} }
for (server in servers) { for (server in servers) {
Log.i("AddServerViewModel", "Database server: ${server.id}") Timber.d("Database server: ${server.id}")
if (server.id == id) { if (server.id == id) {
Log.i("AddServerViewModel", "Server already in the database") Timber.w("Server already in the database")
return true return true
} }
} }

View file

@ -1,7 +1,6 @@
package dev.jdtech.jellyfin.viewmodels package dev.jdtech.jellyfin.viewmodels
import android.app.Application import android.app.Application
import android.util.Log
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@ -14,6 +13,7 @@ import dev.jdtech.jellyfin.models.View
import dev.jdtech.jellyfin.repository.JellyfinRepository import dev.jdtech.jellyfin.repository.JellyfinRepository
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.jellyfin.sdk.model.api.BaseItemDto import org.jellyfin.sdk.model.api.BaseItemDto
import timber.log.Timber
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -80,7 +80,7 @@ constructor(
_finishedLoading.value = true _finishedLoading.value = true
} catch (e: Exception) { } catch (e: Exception) {
Log.e("HomeViewModel", e.message.toString()) Timber.e(e.message.toString())
_finishedLoading.value = true _finishedLoading.value = true
_error.value = true _error.value = true
} }

View file

@ -1,7 +1,6 @@
package dev.jdtech.jellyfin.viewmodels package dev.jdtech.jellyfin.viewmodels
import android.app.Application import android.app.Application
import android.util.Log
import androidx.lifecycle.* import androidx.lifecycle.*
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.api.JellyfinApi import dev.jdtech.jellyfin.api.JellyfinApi
@ -11,6 +10,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.jellyfin.sdk.model.api.AuthenticateUserByName import org.jellyfin.sdk.model.api.AuthenticateUserByName
import timber.log.Timber
import java.lang.Exception import java.lang.Exception
import javax.inject.Inject import javax.inject.Inject
@ -63,7 +63,7 @@ constructor(
} }
_navigateToMain.value = true _navigateToMain.value = true
} catch (e: Exception) { } catch (e: Exception) {
Log.e("LoginViewModel", "${e.message}") Timber.e(e)
_error.value = e.message _error.value = e.message
} }
} }

View file

@ -3,7 +3,6 @@ package dev.jdtech.jellyfin.viewmodels
import android.app.Application import android.app.Application
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.util.Log
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@ -15,6 +14,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.repository.JellyfinRepository import dev.jdtech.jellyfin.repository.JellyfinRepository
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import timber.log.Timber
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -65,7 +65,7 @@ constructor(
viewModelScope.launch { viewModelScope.launch {
val streamUrl = jellyfinRepository.getStreamUrl(itemId, mediaSourceId) val streamUrl = jellyfinRepository.getStreamUrl(itemId, mediaSourceId)
Log.d("PlayerActivity", streamUrl) Timber.d("Stream url: $streamUrl")
val mediaItem = val mediaItem =
MediaItem.Builder() MediaItem.Builder()
.setMediaId(itemId.toString()) .setMediaId(itemId.toString())
@ -106,10 +106,6 @@ constructor(
val runnable: Runnable = object : Runnable { val runnable: Runnable = object : Runnable {
override fun run() { override fun run() {
viewModelScope.launch { viewModelScope.launch {
Log.d(
"PlayerActivity",
"Posting progress of $itemId, position: ${player.currentPosition}"
)
jellyfinRepository.postPlaybackProgress( jellyfinRepository.postPlaybackProgress(
itemId, itemId,
player.currentPosition.times(10000), player.currentPosition.times(10000),
@ -143,13 +139,13 @@ constructor(
_navigateBack.value = true _navigateBack.value = true
} }
} }
Log.d("PlayerActivity", "changed state to $stateString") Timber.d("Changed player state to $stateString")
} }
} }
override fun onCleared() { override fun onCleared() {
super.onCleared() super.onCleared()
Log.d("PlayerActivity", "onCleared ViewModel") Timber.d("Clearing Player ViewModel")
releasePlayer() releasePlayer()
} }
} }