// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. /** user-defined commands **/ export const commands = { /** * Play a single media item (audio or video) * * Accepts a PlayItemRequest with all optional fields properly defaulted. * This avoids Tauri's Android serialization issues with complex objects. * * @req: UR-003 - Play videos * @req: UR-004 - Play audio uninterrupted * @req: UR-005 - Control media playback (play operation) * @req: DR-009 - Audio player UI */ async playerPlayItem(item: PlayItemRequest) : Promise { return await TAURI_INVOKE("player_play_item", { item }); }, /** * Play a queue of media items * * @req: UR-004 - Play audio uninterrupted * @req: UR-005 - Control media playback (queue playback) * @req: UR-015 - View and manage current audio queue * @req: DR-005 - Queue manager with shuffle, repeat, history */ async playerPlayQueue(request: PlayQueueRequest) : Promise { return await TAURI_INVOKE("player_play_queue", { request }); }, /** * Play a track from an album - backend fetches all album tracks and builds queue */ async playerPlayAlbumTrack(repositoryHandle: string, request: PlayAlbumTrackRequest) : Promise { return await TAURI_INVOKE("player_play_album_track", { repositoryHandle, request }); }, /** * Play tracks by ID - backend fetches all metadata */ async playerPlayTracks(repositoryHandle: string, request: PlayTracksRequest) : Promise { return await TAURI_INVOKE("player_play_tracks", { repositoryHandle, request }); }, async playerPlay() : Promise { return await TAURI_INVOKE("player_play"); }, async playerPause() : Promise { return await TAURI_INVOKE("player_pause"); }, async playerToggle() : Promise { return await TAURI_INVOKE("player_toggle"); }, async playerStop() : Promise { return await TAURI_INVOKE("player_stop"); }, async playerNext() : Promise { return await TAURI_INVOKE("player_next"); }, async playerPrevious() : Promise { return await TAURI_INVOKE("player_previous"); }, async playerSeek(position: number) : Promise { return await TAURI_INVOKE("player_seek", { position }); }, /** * Smart video seeking that decides between native and server-side seeking * * This command analyzes the current video stream and automatically chooses * the best seeking strategy: * - HLS streams (.m3u8): Use native seeking * - Direct play streams: Use native seeking * - Transcoded non-HLS: Request new stream URL from server starting at seek position * * For native (non-HTML5) backends, this command handles the entire stream reload * internally. For HTML5 backends, it returns the new URL for the frontend to handle. */ async playerSeekVideo(repositoryHandle: string, position: number, mediaSourceId: string | null, audioStreamIndex: number | null, useHtml5: boolean) : Promise { return await TAURI_INVOKE("player_seek_video", { repositoryHandle, position, mediaSourceId, audioStreamIndex, useHtml5 }); }, async playerSetVolume(volume: number) : Promise { return await TAURI_INVOKE("player_set_volume", { volume }); }, async playerToggleMute() : Promise { return await TAURI_INVOKE("player_toggle_mute"); }, async playerSetAudioTrack(streamIndex: number) : Promise { return await TAURI_INVOKE("player_set_audio_track", { streamIndex }); }, /** * Switch audio track - handles both HTML5 (stream reload) and native (direct switch) * Note: Frontend should handle saving series preferences after this command succeeds */ async playerSwitchAudioTrack(repositoryHandle: string, streamIndex: number, arrayIndex: number, useHtml5: boolean, currentPosition: number | null, mediaSourceId: string | null) : Promise { return await TAURI_INVOKE("player_switch_audio_track", { repositoryHandle, streamIndex, arrayIndex, useHtml5, currentPosition, mediaSourceId }); }, async playerSetSubtitleTrack(streamIndex: number | null) : Promise { return await TAURI_INVOKE("player_set_subtitle_track", { streamIndex }); }, async playerToggleShuffle() : Promise { return await TAURI_INVOKE("player_toggle_shuffle"); }, async playerCycleRepeat() : Promise { return await TAURI_INVOKE("player_cycle_repeat"); }, async playerGetStatus() : Promise { return await TAURI_INVOKE("player_get_status"); }, async playerGetQueue() : Promise { return await TAURI_INVOKE("player_get_queue"); }, async playerAddToQueue(request: AddToQueueRequest) : Promise { return await TAURI_INVOKE("player_add_to_queue", { request }); }, /** * Add a track to queue by ID - backend fetches metadata and constructs URLs */ async playerAddTrackById(repositoryHandle: string, request: AddTrackByIdRequest) : Promise { return await TAURI_INVOKE("player_add_track_by_id", { repositoryHandle, request }); }, /** * Add multiple tracks to queue by IDs - backend fetches metadata and constructs URLs */ async playerAddTracksByIds(repositoryHandle: string, request: AddTracksByIdsRequest) : Promise { return await TAURI_INVOKE("player_add_tracks_by_ids", { repositoryHandle, request }); }, async playerRemoveFromQueue(index: number) : Promise { return await TAURI_INVOKE("player_remove_from_queue", { index }); }, async playerMoveInQueue(fromIndex: number, toIndex: number) : Promise { return await TAURI_INVOKE("player_move_in_queue", { fromIndex, toIndex }); }, async playerSkipTo(index: number) : Promise { return await TAURI_INVOKE("player_skip_to", { index }); }, async playerSetAudioSettings(settings: AudioSettings) : Promise { return await TAURI_INVOKE("player_set_audio_settings", { settings }); }, async playerGetAudioSettings() : Promise { return await TAURI_INVOKE("player_get_audio_settings"); }, async playerSetVideoSettings(settings: VideoSettings) : Promise { return await TAURI_INVOKE("player_set_video_settings", { settings }); }, async playerGetVideoSettings() : Promise { return await TAURI_INVOKE("player_get_video_settings"); }, /** * Set sleep timer mode */ async playerSetSleepTimer(mode: SleepTimerMode) : Promise { return await TAURI_INVOKE("player_set_sleep_timer", { mode }); }, /** * Cancel sleep timer */ async playerCancelSleepTimer() : Promise { return await TAURI_INVOKE("player_cancel_sleep_timer"); }, /** * Get current sleep timer state */ async playerGetSleepTimer() : Promise { return await TAURI_INVOKE("player_get_sleep_timer"); }, /** * Get autoplay settings */ async playerGetAutoplaySettings() : Promise { return await TAURI_INVOKE("player_get_autoplay_settings"); }, /** * Set autoplay settings and persist to database */ async playerSetAutoplaySettings(userId: string, settings: AutoplaySettings) : Promise { return await TAURI_INVOKE("player_set_autoplay_settings", { userId, settings }); }, /** * Cancel active autoplay countdown */ async playerCancelAutoplayCountdown() : Promise { return await TAURI_INVOKE("player_cancel_autoplay_countdown"); }, /** * Play next episode (user confirmed from popup) */ async playerPlayNextEpisode(item: PlayItemRequest) : Promise { return await TAURI_INVOKE("player_play_next_episode", { item }); }, /** * Handle playback ended event - triggers autoplay decision logic * This is called from: * - Frontend when HTML5 video ends (Linux/desktop) - passes itemId + repositoryHandle for the video * - Frontend when audio track ends via backend event - no itemId/repositoryHandle needed * - Android JNI callback also triggers this logic directly */ async playerOnPlaybackEnded(itemId: string | null, repositoryHandle: string | null) : Promise { return await TAURI_INVOKE("player_on_playback_ended", { itemId, repositoryHandle }); }, /** * Report an HTML5