diff --git a/src/services/cli/commander/commands/modules/media/index.ts b/src/services/cli/commander/commands/modules/media/index.ts index 2fcb8b1..6699347 100644 --- a/src/services/cli/commander/commands/modules/media/index.ts +++ b/src/services/cli/commander/commands/modules/media/index.ts @@ -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); + } + }, + }, ];