Feature: Added new commands navigate active media players and tracks. (#979)
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
import { errorHandler } from 'src/core/errors/handler';
|
import { errorHandler } from 'src/core/errors/handler';
|
||||||
import { Command } from '../../../types';
|
import { Command } from '../../../types';
|
||||||
import { MediaPlayerService } from 'src/services/media';
|
import { MediaPlayerService } from 'src/services/media';
|
||||||
|
import AstalMpris from 'gi://AstalMpris?version=0.1';
|
||||||
|
import { getNextPlayer, getPreviousPlayer } from 'src/components/menus/media/components/controls/helpers';
|
||||||
|
|
||||||
|
const mprisService = AstalMpris.get_default();
|
||||||
const mediaPlayerService = MediaPlayerService.getInstance();
|
const mediaPlayerService = MediaPlayerService.getInstance();
|
||||||
|
|
||||||
export const mediaCommands: Command[] = [
|
export const mediaCommands: Command[] = [
|
||||||
@@ -23,4 +26,98 @@ export const mediaCommands: Command[] = [
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'playNext',
|
||||||
|
aliases: ['pln'],
|
||||||
|
description: 'Plays the next track in the active media player.',
|
||||||
|
category: 'Media',
|
||||||
|
args: [],
|
||||||
|
handler: (): string => {
|
||||||
|
try {
|
||||||
|
const activeMediaPlayer = mediaPlayerService.activePlayer.get();
|
||||||
|
if (activeMediaPlayer === undefined) {
|
||||||
|
return 'No active media player';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!activeMediaPlayer.get_can_go_next()) {
|
||||||
|
return 'Not allowed';
|
||||||
|
}
|
||||||
|
|
||||||
|
activeMediaPlayer.next();
|
||||||
|
|
||||||
|
return 'Success';
|
||||||
|
} catch (error) {
|
||||||
|
errorHandler(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'playPrev',
|
||||||
|
aliases: ['plp'],
|
||||||
|
description: 'Plays the previous track in the active media player.',
|
||||||
|
category: 'Media',
|
||||||
|
args: [],
|
||||||
|
handler: (): string => {
|
||||||
|
try {
|
||||||
|
const activeMediaPlayer = mediaPlayerService.activePlayer.get();
|
||||||
|
if (activeMediaPlayer === undefined) {
|
||||||
|
return 'No active media player';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!activeMediaPlayer.get_can_go_previous()) {
|
||||||
|
return 'Not allowed';
|
||||||
|
}
|
||||||
|
|
||||||
|
activeMediaPlayer.previous();
|
||||||
|
|
||||||
|
return 'Success';
|
||||||
|
} catch (error) {
|
||||||
|
errorHandler(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mediaPlayerNext',
|
||||||
|
aliases: ['mpn'],
|
||||||
|
description: 'Goes to the next available media player (if it exists).',
|
||||||
|
category: 'Media',
|
||||||
|
args: [],
|
||||||
|
handler: (): string => {
|
||||||
|
try {
|
||||||
|
const totalMediaPlayers = mprisService.get_players().length;
|
||||||
|
|
||||||
|
if (totalMediaPlayers <= 1) {
|
||||||
|
return 'Not allowed';
|
||||||
|
}
|
||||||
|
getNextPlayer();
|
||||||
|
|
||||||
|
const activeMediaPlayerName = mediaPlayerService.activePlayer.get()?.busName;
|
||||||
|
return activeMediaPlayerName ?? 'Unknown Player';
|
||||||
|
} catch (error) {
|
||||||
|
errorHandler(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'mediaPlayerPrev',
|
||||||
|
aliases: ['mpp'],
|
||||||
|
description: 'Goes to the previous available media player (if it exists).',
|
||||||
|
category: 'Media',
|
||||||
|
args: [],
|
||||||
|
handler: (): string => {
|
||||||
|
try {
|
||||||
|
const totalMediaPlayers = mprisService.get_players().length;
|
||||||
|
|
||||||
|
if (totalMediaPlayers <= 1) {
|
||||||
|
return 'Not allowed';
|
||||||
|
}
|
||||||
|
getPreviousPlayer();
|
||||||
|
|
||||||
|
const activeMediaPlayerName = mediaPlayerService.activePlayer.get()?.busName;
|
||||||
|
return activeMediaPlayerName ?? 'Unknown Player';
|
||||||
|
} catch (error) {
|
||||||
|
errorHandler(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user