@@ -10,15 +10,19 @@ import { getMatches } from '@tauri-apps/api/cli';
1010import { listen } from '@tauri-apps/api/event' ;
1111
1212import { loadFile } from '@common/FileLoader.js' ;
13- import { startUp } from '@common/Player.js' ;
13+ import { startUp , toggleShortcutsPanel , goToNextChapter , goToPreviousChapter , SEEK_SECONDS , SPEED_STEP , MIN_SPEED , MAX_SPEED , VOLUME_STEP } from '@common/Player.js' ;
1414
15- function handleMP3FilePath ( filePath ) {
15+ async function handleMP3FilePath ( filePath ) {
1616 const url = convertFileSrc ( filePath ) ;
1717 console . log ( "Opening file: " + url ) ;
1818 player . src = { src : url , type : 'audio/mpeg' } ;
19- loadFile ( player , url ) ;
2019 const fileName = filePath . split ( '\\' ) . pop ( ) . split ( '/' ) . pop ( ) ;
21- appWindow . setTitle ( fileName ) ;
20+ const { id3Title } = await loadFile ( player , url ) ;
21+ if ( id3Title ) {
22+ appWindow . setTitle ( `${ id3Title } [${ fileName } ]` ) ;
23+ } else {
24+ appWindow . setTitle ( fileName ) ;
25+ }
2226}
2327
2428listen ( 'tauri://file-drop' , event => {
@@ -49,8 +53,60 @@ async function openFile() {
4953
5054const unlisten = await appWindow . onMenuClicked ( async ( { payload : menuId } ) => {
5155 console . log ( 'Menu clicked: ' + menuId ) ;
52- if ( menuId == 'open' ) {
53- openFile ( ) ;
56+ switch ( menuId ) {
57+ case 'open' :
58+ openFile ( ) ;
59+ break ;
60+ case 'keyboard_shortcuts' :
61+ toggleShortcutsPanel ( ) ;
62+ break ;
63+ // Playback controls
64+ case 'play_pause' :
65+ if ( player . paused ) {
66+ player . play ( ) ;
67+ } else {
68+ player . pause ( ) ;
69+ }
70+ break ;
71+ case 'mute' :
72+ player . muted = ! player . muted ;
73+ break ;
74+ case 'seek_forward' :
75+ player . currentTime = Math . min ( player . duration , player . currentTime + SEEK_SECONDS ) ;
76+ break ;
77+ case 'seek_backward' :
78+ player . currentTime = Math . max ( 0 , player . currentTime - SEEK_SECONDS ) ;
79+ break ;
80+ case 'go_to_beginning' :
81+ player . currentTime = 0 ;
82+ break ;
83+ case 'go_to_end' :
84+ player . currentTime = player . duration ;
85+ break ;
86+ // Volume controls
87+ case 'volume_up' :
88+ player . volume = Math . min ( 1 , player . volume + VOLUME_STEP ) ;
89+ break ;
90+ case 'volume_down' :
91+ player . volume = Math . max ( 0 , player . volume - VOLUME_STEP ) ;
92+ break ;
93+ // Speed controls
94+ case 'increase_speed' :
95+ player . playbackRate = Math . min ( MAX_SPEED , player . playbackRate + SPEED_STEP ) ;
96+ break ;
97+ case 'decrease_speed' :
98+ player . playbackRate = Math . max ( MIN_SPEED , player . playbackRate - SPEED_STEP ) ;
99+ break ;
100+ case 'reset_speed' :
101+ player . playbackRate = 1.0 ;
102+ break ;
103+ // Chapter navigation
104+ case 'next_chapter' :
105+ goToNextChapter ( player , window . chapters ) ;
106+ break ;
107+ case 'previous_chapter' :
108+ goToPreviousChapter ( player , window . chapters ) ;
109+ break ;
54110 }
55111} ) ;
56112
0 commit comments