UNPKG

tauri-plugin-media-api

Version:

Advanced system media control integration plugin for Tauri applications with comprehensive playback controls, rich metadata support, and seamless native OS media interface integration across Windows, macOS, and Linux

176 lines (173 loc) 5.45 kB
import { invoke } from '@tauri-apps/api/core'; // Playback status enum var PlaybackStatus; (function (PlaybackStatus) { PlaybackStatus["Playing"] = "playing"; PlaybackStatus["Paused"] = "paused"; PlaybackStatus["Stopped"] = "stopped"; })(PlaybackStatus || (PlaybackStatus = {})); // Repeat mode enum var RepeatMode; (function (RepeatMode) { RepeatMode["None"] = "none"; RepeatMode["Track"] = "track"; RepeatMode["List"] = "list"; })(RepeatMode || (RepeatMode = {})); // Media control event types var MediaControlEventType; (function (MediaControlEventType) { MediaControlEventType["Play"] = "play"; MediaControlEventType["Pause"] = "pause"; MediaControlEventType["PlayPause"] = "playPause"; MediaControlEventType["Stop"] = "stop"; MediaControlEventType["Next"] = "next"; MediaControlEventType["Previous"] = "previous"; MediaControlEventType["FastForward"] = "fastForward"; MediaControlEventType["Rewind"] = "rewind"; MediaControlEventType["SeekTo"] = "seekTo"; MediaControlEventType["SetPosition"] = "setPosition"; MediaControlEventType["SetPlaybackRate"] = "setPlaybackRate"; })(MediaControlEventType || (MediaControlEventType = {})); // Initialize the media session async function initializeSession(appId, appName) { await invoke('plugin:media|initialize_session', { request: { appId, appName, }, }); } // Set media metadata async function setMetadata(metadata) { await invoke('plugin:media|set_metadata', { metadata, }); } // Set playback information async function setPlaybackInfo(info) { await invoke('plugin:media|set_playback_info', { info, }); } // Set playback status async function setPlaybackStatus(status) { await invoke('plugin:media|set_playback_status', { status, }); } // Set current playback position async function setPosition(position) { await invoke('plugin:media|set_position', { position, }); } // Clear all metadata async function clearMetadata() { await invoke('plugin:media|clear_metadata'); } // Get current metadata async function getMetadata() { return await invoke('plugin:media|get_metadata'); } // Get current playback info async function getPlaybackInfo() { return await invoke('plugin:media|get_playback_info'); } // Get current playback status async function getPlaybackStatus() { return await invoke('plugin:media|get_playback_status'); } // Get current position async function getPosition() { return await invoke('plugin:media|get_position'); } // Check if media controls are enabled async function isEnabled() { return await invoke('plugin:media|is_enabled'); } // Media controls class for easier usage class MediaControls { constructor() { this.initialized = false; } async initialize(appId, appName) { if (this.initialized) return; await initializeSession(appId, appName); this.initialized = true; } async updateNowPlaying(metadata, info) { await setMetadata(metadata); if (info) { const fullInfo = { status: info.status || PlaybackStatus.Stopped, position: info.position || 0, shuffle: info.shuffle || false, repeatMode: info.repeatMode || RepeatMode.None, playbackRate: info.playbackRate || 1.0, }; await setPlaybackInfo(fullInfo); } } async play() { await setPlaybackStatus(PlaybackStatus.Playing); } async pause() { await setPlaybackStatus(PlaybackStatus.Paused); } async stop() { await setPlaybackStatus(PlaybackStatus.Stopped); } async togglePlayPause() { const status = await getPlaybackStatus(); if (status === PlaybackStatus.Playing) { await this.pause(); } else { await this.play(); } } async next() { await invoke('plugin:media|next'); } async previous() { await invoke('plugin:media|previous'); } async setPosition(position) { await setPosition(position); } async updatePosition(position) { await setPosition(position); } async updatePlaybackStatus(status) { await setPlaybackStatus(status); } async clearNowPlaying() { await clearMetadata(); } async getMetadata() { return await invoke('plugin:media|get_metadata'); } async getPlaybackInfo() { return await invoke('plugin:media|get_playback_info'); } async getPlaybackStatus() { return await invoke('plugin:media|get_playback_status'); } async getPosition() { return await invoke('plugin:media|get_position'); } async isEnabled() { return await invoke('plugin:media|is_enabled'); } setEventHandler(handler) { // This would need actual event listener implementation console.warn('Event handler not yet implemented'); } async clear() { await clearMetadata(); } } // Export a default instance const mediaControls = new MediaControls(); export { MediaControlEventType, MediaControls, PlaybackStatus, RepeatMode, clearMetadata, getMetadata, getPlaybackInfo, getPlaybackStatus, getPosition, initializeSession, isEnabled, mediaControls, setMetadata, setPlaybackInfo, setPlaybackStatus, setPosition };