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
JavaScript
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 };