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