Feature: Added new commands navigate active media players and tracks. (#979)

This commit is contained in:
Jas Singh
2025-06-01 23:42:54 -07:00
committed by GitHub
parent a026a35735
commit 83affe1605

View File

@@ -1,7 +1,10 @@
import { errorHandler } from 'src/core/errors/handler';
import { Command } from '../../../types';
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();
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);
}
},
},
];