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

190 lines (186 loc) 5.94 kB
'use strict'; var core = require('@tauri-apps/api/core'); // Playback status enum exports.PlaybackStatus = void 0; (function (PlaybackStatus) { PlaybackStatus["Playing"] = "playing"; PlaybackStatus["Paused"] = "paused"; PlaybackStatus["Stopped"] = "stopped"; })(exports.PlaybackStatus || (exports.PlaybackStatus = {})); // Repeat mode enum exports.RepeatMode = void 0; (function (RepeatMode) { RepeatMode["None"] = "none"; RepeatMode["Track"] = "track"; RepeatMode["List"] = "list"; })(exports.RepeatMode || (exports.RepeatMode = {})); // Media control event types exports.MediaControlEventType = void 0; (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"; })(exports.MediaControlEventType || (exports.MediaControlEventType = {})); // Initialize the media session async function initializeSession(appId, appName) { await core.invoke('plugin:media|initialize_session', { request: { appId, appName, }, }); } // Set media metadata async function setMetadata(metadata) { await core.invoke('plugin:media|set_metadata', { metadata, }); } // Set playback information async function setPlaybackInfo(info) { await core.invoke('plugin:media|set_playback_info', { info, }); } // Set playback status async function setPlaybackStatus(status) { await core.invoke('plugin:media|set_playback_status', { status, }); } // Set current playback position async function setPosition(position) { await core.invoke('plugin:media|set_position', { position, }); } // Clear all metadata async function clearMetadata() { await core.invoke('plugin:media|clear_metadata'); } // Get current metadata async function getMetadata() { return await core.invoke('plugin:media|get_metadata'); } // Get current playback info async function getPlaybackInfo() { return await core.invoke('plugin:media|get_playback_info'); } // Get current playback status async function getPlaybackStatus() { return await core.invoke('plugin:media|get_playback_status'); } // Get current position async function getPosition() { return await core.invoke('plugin:media|get_position'); } // Check if media controls are enabled async function isEnabled() { return await core.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 || exports.PlaybackStatus.Stopped, position: info.position || 0, shuffle: info.shuffle || false, repeatMode: info.repeatMode || exports.RepeatMode.None, playbackRate: info.playbackRate || 1.0, }; await setPlaybackInfo(fullInfo); } } async play() { await setPlaybackStatus(exports.PlaybackStatus.Playing); } async pause() { await setPlaybackStatus(exports.PlaybackStatus.Paused); } async stop() { await setPlaybackStatus(exports.PlaybackStatus.Stopped); } async togglePlayPause() { const status = await getPlaybackStatus(); if (status === exports.PlaybackStatus.Playing) { await this.pause(); } else { await this.play(); } } async next() { await core.invoke('plugin:media|next'); } async previous() { await core.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 core.invoke('plugin:media|get_metadata'); } async getPlaybackInfo() { return await core.invoke('plugin:media|get_playback_info'); } async getPlaybackStatus() { return await core.invoke('plugin:media|get_playback_status'); } async getPosition() { return await core.invoke('plugin:media|get_position'); } async isEnabled() { return await core.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(); exports.MediaControls = MediaControls; exports.clearMetadata = clearMetadata; exports.getMetadata = getMetadata; exports.getPlaybackInfo = getPlaybackInfo; exports.getPlaybackStatus = getPlaybackStatus; exports.getPosition = getPosition; exports.initializeSession = initializeSession; exports.isEnabled = isEnabled; exports.mediaControls = mediaControls; exports.setMetadata = setMetadata; exports.setPlaybackInfo = setPlaybackInfo; exports.setPlaybackStatus = setPlaybackStatus; exports.setPosition = setPosition;