package link.roadio.riff.ui import link.roadio.riff.player.core.selection.AiPteBand import link.roadio.riff.player.core.settings.PlayerDimBacklightMode sealed interface PlayerUiAction { data object AcknowledgeSafListingBug : PlayerUiAction data object IdleTimeout : PlayerUiAction /** Playback-engine completion hook; looped queues must not emit this event. */ data object PlaybackFinished : PlayerUiAction data object TogglePlaybackSurface : PlayerUiAction data object OpenMain : PlayerUiAction data object ToggleContentMode : PlayerUiAction data object AdvanceAudiobookSpeed : PlayerUiAction data object ResetAudiobookSpeed : PlayerUiAction data class OpenCategory( val categoryId: String, ) : PlayerUiAction data class NavigateTo( val itemId: String, ) : PlayerUiAction data object NavigateParent : PlayerUiAction data class SelectAzBreadcrumb( val path: List, val steps: List, val inSearch: Boolean = false, ) : PlayerUiAction data object OpenAzSearch : PlayerUiAction data object CancelAzSearch : PlayerUiAction data object AzBackspace : PlayerUiAction data class SelectAzGroup( val group: AzGroup, ) : PlayerUiAction data class ReportHierarchyViewport( val rowHeightPx: Int, val rowGapPx: Int, val viewportHeightPx: Int, val visibleCapacity: Int, ) : PlayerUiAction data class PreviousPage( val pageSize: Int, ) : PlayerUiAction data class NextPage( val pageSize: Int, ) : PlayerUiAction data class RememberFocus( val itemId: String, ) : PlayerUiAction data class RememberSelectorPosition( val index: Int, val offset: Int, val pageSize: Int, ) : PlayerUiAction data class Play( val itemId: String, ) : PlayerUiAction data class SetReaction( val itemId: String, val preference: Preference? = null, val toggleBan: Boolean = false, ) : PlayerUiAction data class SetCurrentReaction( val preference: Preference? = null, val toggleBan: Boolean = false, ) : PlayerUiAction data class SetAudiobookChoice( val objectKey: String, val choice: AudiobookChoice, ) : PlayerUiAction data class OpenRowActions( val itemId: String, ) : PlayerUiAction data object CloseRowActions : PlayerUiAction data class OpenPlaylistSelector( val sourceItemId: String, ) : PlayerUiAction data object ClosePlaylistSelector : PlayerUiAction data class AddToPlaylist( val playlistId: Long, ) : PlayerUiAction data object RequestNewPlaylist : PlayerUiAction data class RequestPlaylistRename( val playlistId: Long, ) : PlayerUiAction data class UpdatePlaylistName( val value: String, ) : PlayerUiAction data object ConfirmPlaylistName : PlayerUiAction data object CancelPlaylistName : PlayerUiAction data class RequestPlaylistDelete( val playlistId: Long, ) : PlayerUiAction data object ConfirmPlaylistDelete : PlayerUiAction data object CancelPlaylistDelete : PlayerUiAction data class RemovePlaylistOccurrence( val playlistId: Long, val occurrenceId: Long, ) : PlayerUiAction data object MarkBookmark : PlayerUiAction data class RemoveBookmark( val playlistId: Long, val markId: Long, ) : PlayerUiAction data object OpenSettings : PlayerUiAction data object OpenSettingsLongPress : PlayerUiAction data object OpenSettingsRecovery : PlayerUiAction data object OpenMoreSettings : PlayerUiAction data object CloseMoreSettings : PlayerUiAction data object OpenSafGrantSelector : PlayerUiAction data object CancelSafGrantSelector : PlayerUiAction data object SaveSafGrantSelector : PlayerUiAction data object OpenSafDocumentTree : PlayerUiAction data class SafGrantPicked( val uri: String, val grantFlags: Int, ) : PlayerUiAction data object SafGrantPickerFailed : PlayerUiAction data class RequestSafGrantRemoval( val grantId: String, ) : PlayerUiAction data object ConfirmSafGrantRemoval : PlayerUiAction data object CancelSafGrantRemoval : PlayerUiAction data object OpenDataStorageSelector : PlayerUiAction data object CancelDataStorageSelector : PlayerUiAction data class SelectDataStorage( val storageId: String, ) : PlayerUiAction data object ConfirmDataStorageSelection : PlayerUiAction data class SetDraftTheme( val scheme: ColorScheme, ) : PlayerUiAction data class SetDraftProfile( val profileId: Int, ) : PlayerUiAction data class SetDraftDiagonal( val diagonal: DiagonalChoice, ) : PlayerUiAction data class SetDraftLongPress( val enabled: Boolean, ) : PlayerUiAction data class SetDraftIgnoreLeadingArticles( val enabled: Boolean, ) : PlayerUiAction data class SetDraftAutoSearch( val enabled: Boolean, ) : PlayerUiAction data class SetDraftDimBacklight( val mode: PlayerDimBacklightMode, ) : PlayerUiAction data class SetDraftReplayGainMode( val mode: ReplayGainMode, ) : PlayerUiAction data class SetDraftReplayGainTarget( val target: ReplayGainTarget, ) : PlayerUiAction data class SetDraftRebuild( val rebuild: DatabaseRebuild, ) : PlayerUiAction data object SaveSettings : PlayerUiAction data object SaveMoreSettings : PlayerUiAction data object CancelSettings : PlayerUiAction data object OpenCalibration : PlayerUiAction data object CancelCalibration : PlayerUiAction data class AcceptCalibration( val ppiX: Float, val ppiY: Float, ) : PlayerUiAction data object OpenScreenDiagonal : PlayerUiAction data object CancelScreenDiagonal : PlayerUiAction data class AcceptScreenDiagonal( val ppiX: Float, ) : PlayerUiAction data class SetAiSize( val size: Int, ) : PlayerUiAction data class ToggleAiPteBand( val pteBand: AiPteBand, ) : PlayerUiAction data class SetAiPoint( val arousal: Float, val valence: Float, ) : PlayerUiAction data object OpenAiActions : PlayerUiAction data object CloseAiActions : PlayerUiAction data object CreateAiQueue : PlayerUiAction data object OpenAiPlaylistSelector : PlayerUiAction data object TogglePlayback : PlayerUiAction data object Previous : PlayerUiAction data object Next : PlayerUiAction data object ToggleShuffle : PlayerUiAction data object ToggleRepeat : PlayerUiAction data class Seek( val fraction: Float, ) : PlayerUiAction } internal fun PlayerUiAction.requiresReadyAiData(): Boolean = this is PlayerUiAction.SetAiPoint || this == PlayerUiAction.CreateAiQueue || ( this is PlayerUiAction.OpenCategory && categoryId == "category:ai" ) internal fun PlayerUiAction.allowedDuringAzOverlay(): Boolean = when (this) { PlayerUiAction.CancelAzSearch, PlayerUiAction.AzBackspace, PlayerUiAction.IdleTimeout, is PlayerUiAction.SelectAzGroup, is PlayerUiAction.ReportHierarchyViewport, PlayerUiAction.OpenMain, PlayerUiAction.TogglePlaybackSurface, PlayerUiAction.NavigateParent, PlayerUiAction.OpenAzSearch, is PlayerUiAction.NavigateTo, is PlayerUiAction.Play, is PlayerUiAction.SetReaction, is PlayerUiAction.OpenRowActions, is PlayerUiAction.RememberFocus, is PlayerUiAction.RememberSelectorPosition, is PlayerUiAction.PreviousPage, is PlayerUiAction.NextPage, -> true is PlayerUiAction.SelectAzBreadcrumb -> inSearch else -> false }