mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-11-07 03:04:50 +01:00
Consolidate sending media reports & app logs (#1936)
## Description Consolidates sending reports/logs to the server into `ServerReportService` (renamed from `MediaReportService`) Also ensures a consistent header is used including the build flavor. ### Related issues N/A ### Testing Emulator ## Screenshots N/A ## AI or LLM usage None
This commit is contained in:
parent
39239dd444
commit
1778bdb34c
26 changed files with 131 additions and 147 deletions
|
|
@ -2,8 +2,10 @@ package com.github.damontecres.wholphin.services
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import com.github.damontecres.wholphin.BuildConfig
|
||||||
import com.github.damontecres.wholphin.data.ServerRepository
|
import com.github.damontecres.wholphin.data.ServerRepository
|
||||||
import com.github.damontecres.wholphin.services.hilt.IoCoroutineScope
|
import com.github.damontecres.wholphin.services.hilt.IoCoroutineScope
|
||||||
|
import com.github.damontecres.wholphin.ui.detail.DebugViewModel.Companion.getLogCatLines
|
||||||
import com.github.damontecres.wholphin.ui.launchIO
|
import com.github.damontecres.wholphin.ui.launchIO
|
||||||
import com.github.damontecres.wholphin.ui.showToast
|
import com.github.damontecres.wholphin.ui.showToast
|
||||||
import com.github.damontecres.wholphin.util.ExceptionHandler
|
import com.github.damontecres.wholphin.util.ExceptionHandler
|
||||||
|
|
@ -23,10 +25,10 @@ import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send media info to the server
|
* Send reports to the server such as media info or app logs
|
||||||
*/
|
*/
|
||||||
@Singleton
|
@Singleton
|
||||||
class MediaReportService
|
class ServerReportService
|
||||||
@Inject
|
@Inject
|
||||||
constructor(
|
constructor(
|
||||||
@param:ApplicationContext private val context: Context,
|
@param:ApplicationContext private val context: Context,
|
||||||
|
|
@ -46,17 +48,17 @@ class MediaReportService
|
||||||
/**
|
/**
|
||||||
* Fetch the media info and send it to the server
|
* Fetch the media info and send it to the server
|
||||||
*/
|
*/
|
||||||
fun sendReportFor(itemId: UUID) {
|
fun sendMediaReportFor(itemId: UUID) {
|
||||||
ioScope.launchIO(ExceptionHandler(autoToast = true)) {
|
ioScope.launchIO(ExceptionHandler(autoToast = true)) {
|
||||||
val item = api.userLibraryApi.getItem(itemId = itemId).content
|
val item = api.userLibraryApi.getItem(itemId = itemId).content
|
||||||
sendReportFor(item)
|
sendMediaReportFor(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send the media report for the given item
|
* Send the media report for the given item
|
||||||
*/
|
*/
|
||||||
suspend fun sendReportFor(item: BaseItemDto) {
|
suspend fun sendMediaReportFor(item: BaseItemDto) {
|
||||||
val sources =
|
val sources =
|
||||||
item.mediaSources ?: api.userLibraryApi
|
item.mediaSources ?: api.userLibraryApi
|
||||||
.getItem(itemId = item.id)
|
.getItem(itemId = item.id)
|
||||||
|
|
@ -68,27 +70,43 @@ class MediaReportService
|
||||||
deviceProfileService.getOrCreateDeviceProfile(appPreferences, serverVersion)
|
deviceProfileService.getOrCreateDeviceProfile(appPreferences, serverVersion)
|
||||||
val deviceProfileJson = json.encodeToString(deviceProfile)
|
val deviceProfileJson = json.encodeToString(deviceProfile)
|
||||||
val body =
|
val body =
|
||||||
"""
|
buildLogHeader("Send media info") + "\n\n" +
|
||||||
Send media info
|
"""
|
||||||
serverVersion=$serverVersion
|
playbackPrefs=${appPreferences.playbackPreferences.toStringOneLine()}
|
||||||
clientInfo=$clientInfo
|
|
||||||
deviceInfo=$deviceInfo
|
|
||||||
manufacturer=${Build.MANUFACTURER}
|
|
||||||
model=${Build.MODEL}
|
|
||||||
apiLevel=${Build.VERSION.SDK_INT}
|
|
||||||
|
|
||||||
playbackPrefs=${appPreferences.playbackPreferences.toStringOneLine()}
|
experimental=${appPreferences.experimentalPreferences.toStringOneLine()}
|
||||||
experimental=${appPreferences.experimentalPreferences.toStringOneLine()}
|
|
||||||
|
|
||||||
mediaSources=$sourcesJson
|
mediaSources=$sourcesJson
|
||||||
|
|
||||||
deviceProfile=$deviceProfileJson
|
deviceProfile=$deviceProfileJson
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
body.chunked(2048).forEach { Timber.w(it) }
|
body.chunked(2048).forEach { Timber.w(it) }
|
||||||
Timber.w("End send media info")
|
Timber.w("End send media info")
|
||||||
val response by api.clientLogApi.logFile(body)
|
val response by api.clientLogApi.logFile(body)
|
||||||
showToast(context, "Sent! Filename=${response.fileName}")
|
showToast(context, "Sent! Filename=${response.fileName}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun buildLogHeader(title: String): String {
|
||||||
|
val serverVersion = serverRepository.currentServer?.serverVersion
|
||||||
|
return """
|
||||||
|
$title
|
||||||
|
serverVersion=$serverVersion
|
||||||
|
clientInfo=$clientInfo
|
||||||
|
flavor=${BuildConfig.FLAVOR}
|
||||||
|
deviceInfo=$deviceInfo
|
||||||
|
manufacturer=${Build.MANUFACTURER}
|
||||||
|
model=${Build.MODEL}
|
||||||
|
apiLevel=${Build.VERSION.SDK_INT}
|
||||||
|
""".trimIndent()
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun sendAppLogs() {
|
||||||
|
val logcat = getLogCatLines().joinToString("\n") { it.text }
|
||||||
|
val header = buildLogHeader("Send App Logs")
|
||||||
|
Timber.w(header)
|
||||||
|
val response by api.clientLogApi.logFile(header + "\n\n" + logcat)
|
||||||
|
showToast(context, "Sent! Filename=${response.fileName}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MessageLiteOrBuilder.toStringOneLine(): String = toString().replace("\n", ", ").replace("\t", " ")
|
private fun MessageLiteOrBuilder.toStringOneLine(): String = toString().replace("\n", ", ").replace("\t", " ")
|
||||||
|
|
@ -46,9 +46,9 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.FilterOptionCache
|
import com.github.damontecres.wholphin.services.FilterOptionCache
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.StreamChoiceService
|
import com.github.damontecres.wholphin.services.StreamChoiceService
|
||||||
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
|
|
@ -120,7 +120,7 @@ class CollectionFolderViewModel
|
||||||
private val mediaManagementService: MediaManagementService,
|
private val mediaManagementService: MediaManagementService,
|
||||||
private val musicService: MusicService,
|
private val musicService: MusicService,
|
||||||
val streamChoiceService: StreamChoiceService,
|
val streamChoiceService: StreamChoiceService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val filterOptionCache: FilterOptionCache,
|
private val filterOptionCache: FilterOptionCache,
|
||||||
@Assisted val itemId: String,
|
@Assisted val itemId: String,
|
||||||
@Assisted initialSortAndDirection: SortAndDirection?,
|
@Assisted initialSortAndDirection: SortAndDirection?,
|
||||||
|
|
@ -609,7 +609,7 @@ class CollectionFolderViewModel
|
||||||
index: Int,
|
index: Int,
|
||||||
) = addToQueue(api, musicService, item, index)
|
) = addToQueue(api, musicService, item, index)
|
||||||
|
|
||||||
override fun sendReportFor(itemId: UUID) = mediaReportService.sendReportFor(itemId)
|
override fun sendReportFor(itemId: UUID) = serverReportService.sendMediaReportFor(itemId)
|
||||||
|
|
||||||
override fun isAdministrator(): Boolean = serverRepository.currentUserDto?.policy?.isAdministrator == true
|
override fun isAdministrator(): Boolean = serverRepository.currentUserDto?.policy?.isAdministrator == true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.github.damontecres.wholphin.ui.components
|
package com.github.damontecres.wholphin.ui.components
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
|
@ -10,30 +9,25 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
import androidx.tv.material3.MaterialTheme
|
import androidx.tv.material3.MaterialTheme
|
||||||
import androidx.tv.material3.Text
|
import androidx.tv.material3.Text
|
||||||
import com.github.damontecres.wholphin.R
|
import com.github.damontecres.wholphin.R
|
||||||
import com.github.damontecres.wholphin.ui.detail.DebugViewModel.Companion.sendAppLogs
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
|
import com.github.damontecres.wholphin.ui.launchIO
|
||||||
import com.github.damontecres.wholphin.util.DataLoadingState
|
import com.github.damontecres.wholphin.util.DataLoadingState
|
||||||
import com.github.damontecres.wholphin.util.LoadingState
|
import com.github.damontecres.wholphin.util.LoadingState
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
|
||||||
import org.jellyfin.sdk.api.client.ApiClient
|
|
||||||
import org.jellyfin.sdk.model.ClientInfo
|
|
||||||
import org.jellyfin.sdk.model.DeviceInfo
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class ErrorViewModel
|
class ErrorViewModel
|
||||||
@Inject
|
@Inject
|
||||||
constructor(
|
constructor(
|
||||||
@param:ApplicationContext private val context: Context,
|
private val serverReportService: ServerReportService,
|
||||||
private val api: ApiClient,
|
|
||||||
private val clientInfo: ClientInfo,
|
|
||||||
private val deviceInfo: DeviceInfo,
|
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
fun sendLogs() {
|
fun sendLogs() {
|
||||||
sendAppLogs(context, api, clientInfo, deviceInfo)
|
viewModelScope.launchIO { serverReportService.sendAppLogs() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@ import com.github.damontecres.wholphin.preferences.AppPreferences
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.deleteItem
|
import com.github.damontecres.wholphin.services.deleteItem
|
||||||
import com.github.damontecres.wholphin.ui.cards.GridCard
|
import com.github.damontecres.wholphin.ui.cards.GridCard
|
||||||
import com.github.damontecres.wholphin.ui.data.AddPlaylistViewModel
|
import com.github.damontecres.wholphin.ui.data.AddPlaylistViewModel
|
||||||
|
|
@ -63,7 +63,7 @@ class ItemGridViewModel
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
private val mediaManagementService: MediaManagementService,
|
private val mediaManagementService: MediaManagementService,
|
||||||
val serverRepository: ServerRepository,
|
val serverRepository: ServerRepository,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
@Assisted private val destination: Destination.ItemGrid<*>,
|
@Assisted private val destination: Destination.ItemGrid<*>,
|
||||||
) : ViewModel(),
|
) : ViewModel(),
|
||||||
ContextMenuProvider {
|
ContextMenuProvider {
|
||||||
|
|
@ -173,7 +173,7 @@ class ItemGridViewModel
|
||||||
|
|
||||||
override fun isAdministrator(): Boolean = serverRepository.currentUserDto?.policy?.isAdministrator == true
|
override fun isAdministrator(): Boolean = serverRepository.currentUserDto?.policy?.isAdministrator == true
|
||||||
|
|
||||||
override fun sendReportFor(itemId: UUID) = mediaReportService.sendReportFor(itemId)
|
override fun sendReportFor(itemId: UUID) = serverReportService.sendMediaReportFor(itemId)
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ItemGridState(
|
data class ItemGridState(
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,9 @@ import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.services.BackdropService
|
import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.SuggestionService
|
import com.github.damontecres.wholphin.services.SuggestionService
|
||||||
import com.github.damontecres.wholphin.services.SuggestionsResource
|
import com.github.damontecres.wholphin.services.SuggestionsResource
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
|
|
@ -80,7 +80,7 @@ class RecommendedViewModel
|
||||||
private val backdropService: BackdropService,
|
private val backdropService: BackdropService,
|
||||||
private val mediaManagementService: MediaManagementService,
|
private val mediaManagementService: MediaManagementService,
|
||||||
private val suggestionService: SuggestionService,
|
private val suggestionService: SuggestionService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
@Assisted private val parentId: UUID,
|
@Assisted private val parentId: UUID,
|
||||||
@Assisted private val suggestionsType: BaseItemKind,
|
@Assisted private val suggestionsType: BaseItemKind,
|
||||||
@Assisted private val recommendedRows: List<RecommendedRow<*>>,
|
@Assisted private val recommendedRows: List<RecommendedRow<*>>,
|
||||||
|
|
@ -390,7 +390,7 @@ fun RecommendedContent(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog.makePresent(itemId)
|
showPlaylistDialog.makePresent(itemId)
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = { viewModel.deleteItem(position, it) },
|
onDeleteItem = { viewModel.deleteItem(position, it) },
|
||||||
onShowOverview = { overviewDialog = ItemDetailsDialogInfo(it) },
|
onShowOverview = { overviewDialog = ItemDetailsDialogInfo(it) },
|
||||||
onChooseVersion = { _, _ ->
|
onChooseVersion = { _, _ ->
|
||||||
|
|
|
||||||
|
|
@ -45,19 +45,17 @@ import com.github.damontecres.wholphin.data.model.ItemPlayback
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
import com.github.damontecres.wholphin.ui.launchDefault
|
import com.github.damontecres.wholphin.ui.launchDefault
|
||||||
import com.github.damontecres.wholphin.ui.launchIO
|
import com.github.damontecres.wholphin.ui.launchIO
|
||||||
import com.github.damontecres.wholphin.ui.showToast
|
|
||||||
import com.github.damontecres.wholphin.util.ExceptionHandler
|
import com.github.damontecres.wholphin.util.ExceptionHandler
|
||||||
|
import com.github.damontecres.wholphin.util.WholphinDispatchers
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import org.acra.util.versionCodeLong
|
import org.acra.util.versionCodeLong
|
||||||
import org.jellyfin.sdk.api.client.ApiClient
|
|
||||||
import org.jellyfin.sdk.api.client.extensions.clientLogApi
|
|
||||||
import org.jellyfin.sdk.model.ClientInfo
|
import org.jellyfin.sdk.model.ClientInfo
|
||||||
import org.jellyfin.sdk.model.DeviceInfo
|
import org.jellyfin.sdk.model.DeviceInfo
|
||||||
import timber.log.Timber
|
|
||||||
import java.io.BufferedReader
|
import java.io.BufferedReader
|
||||||
import java.io.InputStreamReader
|
import java.io.InputStreamReader
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
|
@ -211,71 +209,48 @@ class DebugViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getLogCatLines(): List<LogcatLine> {
|
suspend fun getLogCatLines(): List<LogcatLine> =
|
||||||
val lineCount = 500
|
withContext(WholphinDispatchers.IO) {
|
||||||
val args =
|
val lineCount = 500
|
||||||
buildList {
|
val args =
|
||||||
add("logcat")
|
buildList {
|
||||||
add("-d")
|
add("logcat")
|
||||||
add("-t")
|
add("-d")
|
||||||
add(lineCount.toString())
|
add("-t")
|
||||||
addAll(THIRD_PARTY_TAGS)
|
add(lineCount.toString())
|
||||||
add("*:V")
|
addAll(THIRD_PARTY_TAGS)
|
||||||
}
|
add("*:V")
|
||||||
val process = ProcessBuilder().command(args).redirectErrorStream(true).start()
|
|
||||||
val logLines = mutableListOf<LogcatLine>()
|
|
||||||
try {
|
|
||||||
val reader = BufferedReader(InputStreamReader(process.inputStream))
|
|
||||||
var count = 0
|
|
||||||
|
|
||||||
while (count < lineCount) {
|
|
||||||
val line = reader.readLine()
|
|
||||||
if (line != null) {
|
|
||||||
val level = line.split(Regex("\\s+")).getOrNull(4)
|
|
||||||
val logLevel =
|
|
||||||
when (level?.uppercase()) {
|
|
||||||
"V" -> Log.VERBOSE
|
|
||||||
"D" -> Log.DEBUG
|
|
||||||
"I" -> Log.INFO
|
|
||||||
"W" -> Log.WARN
|
|
||||||
"E" -> Log.ERROR
|
|
||||||
else -> Log.VERBOSE
|
|
||||||
}
|
|
||||||
logLines.add(LogcatLine(logLevel, line))
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
count++
|
val process = ProcessBuilder().command(args).redirectErrorStream(true).start()
|
||||||
|
val logLines = mutableListOf<LogcatLine>()
|
||||||
|
try {
|
||||||
|
val reader = BufferedReader(InputStreamReader(process.inputStream))
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
while (count < lineCount) {
|
||||||
|
val line = reader.readLine()
|
||||||
|
if (line != null) {
|
||||||
|
val level = line.split(Regex("\\s+")).getOrNull(4)
|
||||||
|
val logLevel =
|
||||||
|
when (level?.uppercase()) {
|
||||||
|
"V" -> Log.VERBOSE
|
||||||
|
"D" -> Log.DEBUG
|
||||||
|
"I" -> Log.INFO
|
||||||
|
"W" -> Log.WARN
|
||||||
|
"E" -> Log.ERROR
|
||||||
|
else -> Log.VERBOSE
|
||||||
|
}
|
||||||
|
logLines.add(LogcatLine(logLevel, line))
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
process.destroy()
|
||||||
}
|
}
|
||||||
} finally {
|
return@withContext logLines
|
||||||
process.destroy()
|
|
||||||
}
|
}
|
||||||
return logLines
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ViewModel.sendAppLogs(
|
|
||||||
context: Context,
|
|
||||||
api: ApiClient,
|
|
||||||
clientInfo: ClientInfo?,
|
|
||||||
deviceInfo: DeviceInfo?,
|
|
||||||
) {
|
|
||||||
viewModelScope.launchIO(ExceptionHandler(true)) {
|
|
||||||
val logcat = getLogCatLines().joinToString("\n") { it.text }
|
|
||||||
val body =
|
|
||||||
"""
|
|
||||||
Send App Logs
|
|
||||||
clientInfo=$clientInfo
|
|
||||||
deviceInfo=$deviceInfo
|
|
||||||
manufacturer=${Build.MANUFACTURER}
|
|
||||||
model=${Build.MODEL}
|
|
||||||
apiLevel=${Build.VERSION.SDK_INT}
|
|
||||||
|
|
||||||
""".trimIndent()
|
|
||||||
Timber.w(body)
|
|
||||||
val response by api.clientLogApi.logFile(body + logcat)
|
|
||||||
showToast(context, "Sent! Filename=${response.fileName}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,10 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.FilterOptionCache
|
import com.github.damontecres.wholphin.services.FilterOptionCache
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavDrawerService
|
import com.github.damontecres.wholphin.services.NavDrawerService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
import com.github.damontecres.wholphin.services.RememberedTabService
|
import com.github.damontecres.wholphin.services.RememberedTabService
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.StreamChoiceService
|
import com.github.damontecres.wholphin.services.StreamChoiceService
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
import com.github.damontecres.wholphin.services.deleteItem
|
import com.github.damontecres.wholphin.services.deleteItem
|
||||||
|
|
@ -89,7 +89,7 @@ class FavoritesViewModel
|
||||||
private val userPreferencesService: UserPreferencesService,
|
private val userPreferencesService: UserPreferencesService,
|
||||||
private val mediaManagementService: MediaManagementService,
|
private val mediaManagementService: MediaManagementService,
|
||||||
val streamChoiceService: StreamChoiceService,
|
val streamChoiceService: StreamChoiceService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val filterOptionCache: FilterOptionCache,
|
private val filterOptionCache: FilterOptionCache,
|
||||||
private val rememberedTabService: RememberedTabService,
|
private val rememberedTabService: RememberedTabService,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
@ -590,7 +590,7 @@ class FavoritesViewModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun sendReportFor(itemId: UUID) = mediaReportService.sendReportFor(itemId)
|
override fun sendReportFor(itemId: UUID) = serverReportService.sendMediaReportFor(itemId)
|
||||||
|
|
||||||
override fun updateBackdrop(item: BaseItem) {
|
override fun updateBackdrop(item: BaseItem) {
|
||||||
viewModelScope.launchIO {
|
viewModelScope.launchIO {
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.HomeSettingsService
|
import com.github.damontecres.wholphin.services.HomeSettingsService
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.NavDrawerService
|
import com.github.damontecres.wholphin.services.NavDrawerService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.StreamChoiceService
|
import com.github.damontecres.wholphin.services.StreamChoiceService
|
||||||
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
|
|
@ -83,7 +83,7 @@ class HomeRowGridViewModel
|
||||||
private val mediaManagementService: MediaManagementService,
|
private val mediaManagementService: MediaManagementService,
|
||||||
private val musicService: MusicService,
|
private val musicService: MusicService,
|
||||||
val streamChoiceService: StreamChoiceService,
|
val streamChoiceService: StreamChoiceService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
@Assisted private val title: StringProvider,
|
@Assisted private val title: StringProvider,
|
||||||
@Assisted private val rowConfig: HomeRowConfig,
|
@Assisted private val rowConfig: HomeRowConfig,
|
||||||
) : ViewModel(),
|
) : ViewModel(),
|
||||||
|
|
@ -187,7 +187,7 @@ class HomeRowGridViewModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun sendReportFor(itemId: UUID) = mediaReportService.sendReportFor(itemId)
|
override fun sendReportFor(itemId: UUID) = serverReportService.sendMediaReportFor(itemId)
|
||||||
|
|
||||||
fun updateBackdrop(item: BaseItem) {
|
fun updateBackdrop(item: BaseItem) {
|
||||||
viewModelScope.launchIO {
|
viewModelScope.launchIO {
|
||||||
|
|
|
||||||
|
|
@ -66,10 +66,10 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.FilterOptionCache
|
import com.github.damontecres.wholphin.services.FilterOptionCache
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.MusicServiceState
|
import com.github.damontecres.wholphin.services.MusicServiceState
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.ui.SlimItemFields
|
import com.github.damontecres.wholphin.ui.SlimItemFields
|
||||||
import com.github.damontecres.wholphin.ui.cards.ItemCardImage
|
import com.github.damontecres.wholphin.ui.cards.ItemCardImage
|
||||||
import com.github.damontecres.wholphin.ui.components.BasicDialog
|
import com.github.damontecres.wholphin.ui.components.BasicDialog
|
||||||
|
|
@ -144,7 +144,7 @@ class PlaylistViewModel
|
||||||
private val serverRepository: ServerRepository,
|
private val serverRepository: ServerRepository,
|
||||||
private val libraryDisplayInfoDao: LibraryDisplayInfoDao,
|
private val libraryDisplayInfoDao: LibraryDisplayInfoDao,
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
private val mediaReportService: MediaReportService,
|
private val serverReportService: ServerReportService,
|
||||||
private val filterOptionCache: FilterOptionCache,
|
private val filterOptionCache: FilterOptionCache,
|
||||||
@Assisted itemId: UUID,
|
@Assisted itemId: UUID,
|
||||||
) : MusicViewModel(itemId, context, api, musicService, navigationManager, mediaManagementService) {
|
) : MusicViewModel(itemId, context, api, musicService, navigationManager, mediaManagementService) {
|
||||||
|
|
@ -331,7 +331,7 @@ class PlaylistViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendMediaReport(itemId: UUID) {
|
fun sendMediaReport(itemId: UUID) {
|
||||||
viewModelScope.launchDefault { mediaReportService.sendReportFor(itemId) }
|
viewModelScope.launchDefault { serverReportService.sendMediaReportFor(itemId) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ fun CollectionDetails(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog.makePresent(itemId)
|
showPlaylistDialog.makePresent(itemId)
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = { viewModel.deleteItem(it, position) },
|
onDeleteItem = { viewModel.deleteItem(it, position) },
|
||||||
onShowOverview = { overviewDialog = ItemDetailsDialogInfo(it) },
|
onShowOverview = { overviewDialog = ItemDetailsDialogInfo(it) },
|
||||||
onChooseVersion = { _, _ ->
|
onChooseVersion = { _, _ ->
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ import com.github.damontecres.wholphin.services.FilterOptionCache
|
||||||
import com.github.damontecres.wholphin.services.ImageUrlService
|
import com.github.damontecres.wholphin.services.ImageUrlService
|
||||||
import com.github.damontecres.wholphin.services.KeyValueService
|
import com.github.damontecres.wholphin.services.KeyValueService
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
import com.github.damontecres.wholphin.services.deleteItem
|
import com.github.damontecres.wholphin.services.deleteItem
|
||||||
|
|
@ -90,7 +90,7 @@ class CollectionViewModel
|
||||||
private val libraryDisplayInfoDao: LibraryDisplayInfoDao,
|
private val libraryDisplayInfoDao: LibraryDisplayInfoDao,
|
||||||
private val imageUrlService: ImageUrlService,
|
private val imageUrlService: ImageUrlService,
|
||||||
private val musicService: MusicService,
|
private val musicService: MusicService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val filterOptionCache: FilterOptionCache,
|
private val filterOptionCache: FilterOptionCache,
|
||||||
@Assisted private val itemId: UUID,
|
@Assisted private val itemId: UUID,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ fun EpisodeDetails(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog.makePresent(itemId)
|
showPlaylistDialog.makePresent(itemId)
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = viewModel::deleteItem,
|
onDeleteItem = viewModel::deleteItem,
|
||||||
onShowOverview = { overviewDialog = ItemDetailsDialogInfo(it) },
|
onShowOverview = { overviewDialog = ItemDetailsDialogInfo(it) },
|
||||||
onChooseVersion = { item, source ->
|
onChooseVersion = { item, source ->
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@ import com.github.damontecres.wholphin.data.model.ItemPlayback
|
||||||
import com.github.damontecres.wholphin.services.BackdropService
|
import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.StreamChoiceService
|
import com.github.damontecres.wholphin.services.StreamChoiceService
|
||||||
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
|
|
@ -52,7 +52,7 @@ class EpisodeViewModel
|
||||||
val serverRepository: ServerRepository,
|
val serverRepository: ServerRepository,
|
||||||
val itemPlaybackRepository: ItemPlaybackRepository,
|
val itemPlaybackRepository: ItemPlaybackRepository,
|
||||||
val streamChoiceService: StreamChoiceService,
|
val streamChoiceService: StreamChoiceService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val themeSongPlayer: ThemeSongPlayer,
|
private val themeSongPlayer: ThemeSongPlayer,
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
private val userPreferencesService: UserPreferencesService,
|
private val userPreferencesService: UserPreferencesService,
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ fun MovieDetails(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog.makePresent(itemId)
|
showPlaylistDialog.makePresent(itemId)
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = viewModel::deleteItem,
|
onDeleteItem = viewModel::deleteItem,
|
||||||
onChooseVersion = { item, source ->
|
onChooseVersion = { item, source ->
|
||||||
viewModel.savePlayVersion(
|
viewModel.savePlayVersion(
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,10 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.ExtrasService
|
import com.github.damontecres.wholphin.services.ExtrasService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
import com.github.damontecres.wholphin.services.PeopleFavorites
|
import com.github.damontecres.wholphin.services.PeopleFavorites
|
||||||
import com.github.damontecres.wholphin.services.SeerrService
|
import com.github.damontecres.wholphin.services.SeerrService
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.StreamChoiceService
|
import com.github.damontecres.wholphin.services.StreamChoiceService
|
||||||
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
||||||
import com.github.damontecres.wholphin.services.TrailerService
|
import com.github.damontecres.wholphin.services.TrailerService
|
||||||
|
|
@ -62,7 +62,7 @@ class MovieViewModel
|
||||||
val serverRepository: ServerRepository,
|
val serverRepository: ServerRepository,
|
||||||
val itemPlaybackRepository: ItemPlaybackRepository,
|
val itemPlaybackRepository: ItemPlaybackRepository,
|
||||||
val streamChoiceService: StreamChoiceService,
|
val streamChoiceService: StreamChoiceService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val themeSongPlayer: ThemeSongPlayer,
|
private val themeSongPlayer: ThemeSongPlayer,
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
private val peopleFavorites: PeopleFavorites,
|
private val peopleFavorites: PeopleFavorites,
|
||||||
|
|
|
||||||
|
|
@ -53,9 +53,9 @@ import com.github.damontecres.wholphin.services.ExtrasService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.ImageUrlService
|
import com.github.damontecres.wholphin.services.ImageUrlService
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
import com.github.damontecres.wholphin.ui.AspectRatios
|
import com.github.damontecres.wholphin.ui.AspectRatios
|
||||||
import com.github.damontecres.wholphin.ui.ItemRowFields
|
import com.github.damontecres.wholphin.ui.ItemRowFields
|
||||||
|
|
@ -118,7 +118,7 @@ class AlbumViewModel
|
||||||
navigationManager: NavigationManager,
|
navigationManager: NavigationManager,
|
||||||
mediaManagementService: MediaManagementService,
|
mediaManagementService: MediaManagementService,
|
||||||
val serverRepository: ServerRepository,
|
val serverRepository: ServerRepository,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
private val userPreferencesService: UserPreferencesService,
|
private val userPreferencesService: UserPreferencesService,
|
||||||
private val backdropService: BackdropService,
|
private val backdropService: BackdropService,
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,9 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.ImageUrlService
|
import com.github.damontecres.wholphin.services.ImageUrlService
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.MusicService
|
import com.github.damontecres.wholphin.services.MusicService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
import com.github.damontecres.wholphin.ui.AspectRatios
|
import com.github.damontecres.wholphin.ui.AspectRatios
|
||||||
import com.github.damontecres.wholphin.ui.ItemRowFields
|
import com.github.damontecres.wholphin.ui.ItemRowFields
|
||||||
|
|
@ -115,7 +115,7 @@ class ArtistViewModel
|
||||||
navigationManager: NavigationManager,
|
navigationManager: NavigationManager,
|
||||||
mediaManagementService: MediaManagementService,
|
mediaManagementService: MediaManagementService,
|
||||||
val serverRepository: ServerRepository,
|
val serverRepository: ServerRepository,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
private val userPreferencesService: UserPreferencesService,
|
private val userPreferencesService: UserPreferencesService,
|
||||||
private val backdropService: BackdropService,
|
private val backdropService: BackdropService,
|
||||||
|
|
@ -656,7 +656,7 @@ fun ArtistDetailsPage(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog.makePresent(itemId)
|
showPlaylistDialog.makePresent(itemId)
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = viewModel::deleteItem,
|
onDeleteItem = viewModel::deleteItem,
|
||||||
onChooseVersion = { _, _ -> },
|
onChooseVersion = { _, _ -> },
|
||||||
onChooseTracks = { },
|
onChooseTracks = { },
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ fun SeriesDetails(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog = Optional.present(itemId)
|
showPlaylistDialog = Optional.present(itemId)
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = viewModel::deleteItem,
|
onDeleteItem = viewModel::deleteItem,
|
||||||
onChooseVersion = { item, source ->
|
onChooseVersion = { item, source ->
|
||||||
viewModel.savePlayVersion(
|
viewModel.savePlayVersion(
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ fun SeriesOverview(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog = itemId
|
showPlaylistDialog = itemId
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = viewModel::deleteItem,
|
onDeleteItem = viewModel::deleteItem,
|
||||||
onChooseVersion = { item, source ->
|
onChooseVersion = { item, source ->
|
||||||
viewModel.savePlayVersion(
|
viewModel.savePlayVersion(
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,10 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.ExtrasService
|
import com.github.damontecres.wholphin.services.ExtrasService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
import com.github.damontecres.wholphin.services.PeopleFavorites
|
import com.github.damontecres.wholphin.services.PeopleFavorites
|
||||||
import com.github.damontecres.wholphin.services.SeerrService
|
import com.github.damontecres.wholphin.services.SeerrService
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.StreamChoiceService
|
import com.github.damontecres.wholphin.services.StreamChoiceService
|
||||||
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
import com.github.damontecres.wholphin.services.ThemeSongPlayer
|
||||||
import com.github.damontecres.wholphin.services.TrailerService
|
import com.github.damontecres.wholphin.services.TrailerService
|
||||||
|
|
@ -96,7 +96,7 @@ class SeriesViewModel
|
||||||
private val trailerService: TrailerService,
|
private val trailerService: TrailerService,
|
||||||
private val extrasService: ExtrasService,
|
private val extrasService: ExtrasService,
|
||||||
val streamChoiceService: StreamChoiceService,
|
val streamChoiceService: StreamChoiceService,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val userPreferencesService: UserPreferencesService,
|
private val userPreferencesService: UserPreferencesService,
|
||||||
private val backdropService: BackdropService,
|
private val backdropService: BackdropService,
|
||||||
private val seerrService: SeerrService,
|
private val seerrService: SeerrService,
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,7 @@ fun HomePage(
|
||||||
playlistViewModel.loadPlaylists()
|
playlistViewModel.loadPlaylists()
|
||||||
showPlaylistDialog = itemId
|
showPlaylistDialog = itemId
|
||||||
},
|
},
|
||||||
onSendMediaInfo = viewModel.mediaReportService::sendReportFor,
|
onSendMediaInfo = viewModel.serverReportService::sendMediaReportFor,
|
||||||
onDeleteItem = {
|
onDeleteItem = {
|
||||||
viewModel.deleteItem(position, it)
|
viewModel.deleteItem(position, it)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ import com.github.damontecres.wholphin.services.HomePageResolvedSettings
|
||||||
import com.github.damontecres.wholphin.services.HomeSettingsService
|
import com.github.damontecres.wholphin.services.HomeSettingsService
|
||||||
import com.github.damontecres.wholphin.services.LatestNextUpService
|
import com.github.damontecres.wholphin.services.LatestNextUpService
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavDrawerService
|
import com.github.damontecres.wholphin.services.NavDrawerService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
import com.github.damontecres.wholphin.services.deleteItem
|
import com.github.damontecres.wholphin.services.deleteItem
|
||||||
import com.github.damontecres.wholphin.services.tvAccess
|
import com.github.damontecres.wholphin.services.tvAccess
|
||||||
|
|
@ -55,7 +55,7 @@ class HomeViewModel
|
||||||
@param:ApplicationContext private val context: Context,
|
@param:ApplicationContext private val context: Context,
|
||||||
val navigationManager: NavigationManager,
|
val navigationManager: NavigationManager,
|
||||||
val serverRepository: ServerRepository,
|
val serverRepository: ServerRepository,
|
||||||
val mediaReportService: MediaReportService,
|
val serverReportService: ServerReportService,
|
||||||
private val navDrawerService: NavDrawerService,
|
private val navDrawerService: NavDrawerService,
|
||||||
private val homeSettingsService: HomeSettingsService,
|
private val homeSettingsService: HomeSettingsService,
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
import com.github.damontecres.wholphin.services.Release
|
import com.github.damontecres.wholphin.services.Release
|
||||||
import com.github.damontecres.wholphin.services.ScreensaverService
|
import com.github.damontecres.wholphin.services.ScreensaverService
|
||||||
import com.github.damontecres.wholphin.services.SeerrServerRepository
|
import com.github.damontecres.wholphin.services.SeerrServerRepository
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.UpdateChecker
|
import com.github.damontecres.wholphin.services.UpdateChecker
|
||||||
import com.github.damontecres.wholphin.ui.detail.DebugViewModel.Companion.sendAppLogs
|
|
||||||
import com.github.damontecres.wholphin.ui.launchIO
|
import com.github.damontecres.wholphin.ui.launchIO
|
||||||
import com.github.damontecres.wholphin.util.DataLoadingState
|
import com.github.damontecres.wholphin.util.DataLoadingState
|
||||||
import com.github.damontecres.wholphin.util.ExceptionHandler
|
import com.github.damontecres.wholphin.util.ExceptionHandler
|
||||||
|
|
@ -36,8 +36,6 @@ import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import org.jellyfin.sdk.api.client.ApiClient
|
import org.jellyfin.sdk.api.client.ApiClient
|
||||||
import org.jellyfin.sdk.model.ClientInfo
|
|
||||||
import org.jellyfin.sdk.model.DeviceInfo
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
@ -53,9 +51,8 @@ class PreferencesViewModel
|
||||||
val screensaverService: ScreensaverService,
|
val screensaverService: ScreensaverService,
|
||||||
private val serverRepository: ServerRepository,
|
private val serverRepository: ServerRepository,
|
||||||
private val seerrServerRepository: SeerrServerRepository,
|
private val seerrServerRepository: SeerrServerRepository,
|
||||||
private val deviceInfo: DeviceInfo,
|
|
||||||
private val clientInfo: ClientInfo,
|
|
||||||
private val updateChecker: UpdateChecker,
|
private val updateChecker: UpdateChecker,
|
||||||
|
private val serverReportService: ServerReportService,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
val currentUser =
|
val currentUser =
|
||||||
serverRepository.currentUserFlow.stateIn(
|
serverRepository.currentUserFlow.stateIn(
|
||||||
|
|
@ -97,7 +94,7 @@ class PreferencesViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendAppLogs() {
|
fun sendAppLogs() {
|
||||||
sendAppLogs(context, api, clientInfo, deviceInfo)
|
viewModelScope.launchIO { serverReportService.sendAppLogs() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun resetSubtitleSettings() {
|
fun resetSubtitleSettings() {
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,10 @@ import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.KeyValueService
|
import com.github.damontecres.wholphin.services.KeyValueService
|
||||||
import com.github.damontecres.wholphin.services.LiveTvService
|
import com.github.damontecres.wholphin.services.LiveTvService
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavDrawerService
|
import com.github.damontecres.wholphin.services.NavDrawerService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
import com.github.damontecres.wholphin.services.SeerrService
|
import com.github.damontecres.wholphin.services.SeerrService
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
import com.github.damontecres.wholphin.services.deleteItem
|
import com.github.damontecres.wholphin.services.deleteItem
|
||||||
import com.github.damontecres.wholphin.services.tvAccess
|
import com.github.damontecres.wholphin.services.tvAccess
|
||||||
|
|
@ -73,7 +73,7 @@ class SearchViewModel
|
||||||
private val serverRepository: ServerRepository,
|
private val serverRepository: ServerRepository,
|
||||||
private val favoriteWatchManager: FavoriteWatchManager,
|
private val favoriteWatchManager: FavoriteWatchManager,
|
||||||
private val mediaManagementService: MediaManagementService,
|
private val mediaManagementService: MediaManagementService,
|
||||||
private val mediaReportService: MediaReportService,
|
private val serverReportService: ServerReportService,
|
||||||
private val liveTvService: LiveTvService,
|
private val liveTvService: LiveTvService,
|
||||||
private val keyValueService: KeyValueService,
|
private val keyValueService: KeyValueService,
|
||||||
private val navDrawerService: NavDrawerService,
|
private val navDrawerService: NavDrawerService,
|
||||||
|
|
@ -447,7 +447,7 @@ class SearchViewModel
|
||||||
|
|
||||||
override fun isAdministrator(): Boolean = serverRepository.currentUserDto?.policy?.isAdministrator == true
|
override fun isAdministrator(): Boolean = serverRepository.currentUserDto?.policy?.isAdministrator == true
|
||||||
|
|
||||||
override fun sendReportFor(itemId: UUID) = mediaReportService.sendReportFor(itemId)
|
override fun sendReportFor(itemId: UUID) = serverReportService.sendMediaReportFor(itemId)
|
||||||
|
|
||||||
fun fetchProgramForDialog(programId: UUID) {
|
fun fetchProgramForDialog(programId: UUID) {
|
||||||
_programDialogState.update { it.copy(loading = DataLoadingState.Loading) }
|
_programDialogState.update { it.copy(loading = DataLoadingState.Loading) }
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ class CollectionFolderViewModelTest {
|
||||||
mediaManagementService = mockMediaManagementService,
|
mediaManagementService = mockMediaManagementService,
|
||||||
musicService = mockk(relaxed = true),
|
musicService = mockk(relaxed = true),
|
||||||
streamChoiceService = mockk(relaxed = true),
|
streamChoiceService = mockk(relaxed = true),
|
||||||
mediaReportService = mockk(relaxed = true),
|
serverReportService = mockk(relaxed = true),
|
||||||
filterOptionCache = mockk(relaxed = true),
|
filterOptionCache = mockk(relaxed = true),
|
||||||
itemId = libraryId.toString(),
|
itemId = libraryId.toString(),
|
||||||
initialSortAndDirection = null,
|
initialSortAndDirection = null,
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,11 @@ import com.github.damontecres.wholphin.services.BackdropService
|
||||||
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
import com.github.damontecres.wholphin.services.FavoriteWatchManager
|
||||||
import com.github.damontecres.wholphin.services.FilterOptionCache
|
import com.github.damontecres.wholphin.services.FilterOptionCache
|
||||||
import com.github.damontecres.wholphin.services.MediaManagementService
|
import com.github.damontecres.wholphin.services.MediaManagementService
|
||||||
import com.github.damontecres.wholphin.services.MediaReportService
|
|
||||||
import com.github.damontecres.wholphin.services.NavDrawerItemState
|
import com.github.damontecres.wholphin.services.NavDrawerItemState
|
||||||
import com.github.damontecres.wholphin.services.NavDrawerService
|
import com.github.damontecres.wholphin.services.NavDrawerService
|
||||||
import com.github.damontecres.wholphin.services.NavigationManager
|
import com.github.damontecres.wholphin.services.NavigationManager
|
||||||
import com.github.damontecres.wholphin.services.RememberedTabService
|
import com.github.damontecres.wholphin.services.RememberedTabService
|
||||||
|
import com.github.damontecres.wholphin.services.ServerReportService
|
||||||
import com.github.damontecres.wholphin.services.StreamChoiceService
|
import com.github.damontecres.wholphin.services.StreamChoiceService
|
||||||
import com.github.damontecres.wholphin.services.UserPreferencesService
|
import com.github.damontecres.wholphin.services.UserPreferencesService
|
||||||
import com.github.damontecres.wholphin.test.item
|
import com.github.damontecres.wholphin.test.item
|
||||||
|
|
@ -61,7 +61,7 @@ class TestFavoritesViewModel {
|
||||||
private val userPreferencesService: UserPreferencesService = mockk()
|
private val userPreferencesService: UserPreferencesService = mockk()
|
||||||
private val mediaManagementService: MediaManagementService = mockk()
|
private val mediaManagementService: MediaManagementService = mockk()
|
||||||
private val streamChoiceService: StreamChoiceService = mockk()
|
private val streamChoiceService: StreamChoiceService = mockk()
|
||||||
private val mediaReportService: MediaReportService = mockk()
|
private val serverReportService: ServerReportService = mockk()
|
||||||
private val filterOptionCache: FilterOptionCache = mockk()
|
private val filterOptionCache: FilterOptionCache = mockk()
|
||||||
private val rememberedTabService: RememberedTabService = mockk()
|
private val rememberedTabService: RememberedTabService = mockk()
|
||||||
private val navDrawerService: NavDrawerService = mockk()
|
private val navDrawerService: NavDrawerService = mockk()
|
||||||
|
|
@ -100,7 +100,7 @@ class TestFavoritesViewModel {
|
||||||
userPreferencesService = userPreferencesService,
|
userPreferencesService = userPreferencesService,
|
||||||
mediaManagementService = mediaManagementService,
|
mediaManagementService = mediaManagementService,
|
||||||
streamChoiceService = streamChoiceService,
|
streamChoiceService = streamChoiceService,
|
||||||
mediaReportService = mediaReportService,
|
serverReportService = serverReportService,
|
||||||
filterOptionCache = filterOptionCache,
|
filterOptionCache = filterOptionCache,
|
||||||
rememberedTabService = rememberedTabService,
|
rememberedTabService = rememberedTabService,
|
||||||
navDrawerService = navDrawerService,
|
navDrawerService = navDrawerService,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue