From: Francois B <mrs...@us...> - 2004-09-29 00:06:59
|
Update of /cvsroot/openneo/openneo/apps In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21230 Modified Files: dj.c Log Message: Various fixes to the playlist code Index: dj.c =================================================================== RCS file: /cvsroot/openneo/openneo/apps/dj.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** dj.c 9 Sep 2004 03:09:46 -0000 1.3 --- dj.c 29 Sep 2004 00:06:49 -0000 1.4 *************** *** 353,361 **** } ! static void shuffle_array(void) { int i; int index; unsigned short tmp; for(i=0; i< dj.playlist.count; i++ ) { --- 353,366 ---- } ! //returns the new playing index ! static int shuffle_array(void) { int i; int index; unsigned short tmp; + unsigned short playing_value; + + if( dj.playlist.playing_index != -1 ) + playing_value = dj.playlist.tracks[dj.playlist.playing_index]; for(i=0; i< dj.playlist.count; i++ ) { *************** *** 370,373 **** --- 375,390 ---- dj.playlist.tracks[i] = tmp; } + + if( dj.playlist.playing_index != -1 ) { + + //Find the new playing index + for(i=0; i<dj.playlist.count; i++ ) { + + if( dj.playlist.tracks[i] == playing_value ) + return i; + } + } + + return -1; } *************** *** 409,413 **** } ! static int insert_track_in_array( int pos, unsigned short record_number ) { int i; --- 426,430 ---- } ! static int insert_track_in_array( int pos, unsigned short record_number, bool recursive_direct_insert ) { int i; *************** *** 423,431 **** if( pNewArray ) dj.playlist.tracks = pNewArray; else { msg_splash( HZ, MSG_CENTER|MSG_VCENTER, "No more room"); return DJ_NO_MORE_RAM; } ! dj.playlist.max_count += PLAYLIST_STEP; } --- 440,468 ---- if( pNewArray ) dj.playlist.tracks = pNewArray; + else if( recursive_direct_insert ) { + + /* + The heap is not able to increase the current region and + it cannot find another region big enough to move the current + one. We will try yo help it by freeing the region used by + dir_buffer, increased the array and then reloead the dir. + */ + + dir_buffer_reset(); + pNewArray = (unsigned short*)heap_realloc( dj.playlist.tracks, (dj.playlist.max_count + PLAYLIST_STEP) * sizeof(unsigned short), false ); + dir_buffer_load( dir_buffer_path(), SHOW_MUSIC ); + + if( pNewArray ) + dj.playlist.tracks = pNewArray; + else { + msg_splash( HZ, MSG_CENTER|MSG_VCENTER, "No more room"); + return DJ_NO_MORE_RAM; + } + } else { msg_splash( HZ, MSG_CENTER|MSG_VCENTER, "No more room"); return DJ_NO_MORE_RAM; } ! dj.playlist.max_count += PLAYLIST_STEP; } *************** *** 562,566 **** } ! result = insert_track_in_array( pos,(unsigned short)(offset / ENTRY_SIZE) ); //Sync no mather the result --- 599,603 ---- } ! result = insert_track_in_array( pos,(unsigned short)(offset / ENTRY_SIZE), false ); //Sync no mather the result *************** *** 608,612 **** rec_items = dir_buffer_items(); ! for(i=0; i<rec_num_files; i++) { --- 645,649 ---- rec_items = dir_buffer_items(); ! for(i=0; i<rec_num_files; i++) { *************** *** 664,673 **** //Add offset to memory array ! ret = insert_track_in_array( rec_start_index + insert_count,(unsigned short)(rec_offset/ENTRY_SIZE) ); ! if( ret == DJ_NO_MORE_RAM ) { ! ret = DJ_NOERROR; break; - } else if( ret != DJ_NOERROR ) break; --- 701,708 ---- //Add offset to memory array ! ret = insert_track_in_array( rec_start_index + insert_count,(unsigned short)(rec_offset/ENTRY_SIZE), true ); ! if( ret == DJ_NO_MORE_RAM ) break; else if( ret != DJ_NOERROR ) break; *************** *** 813,817 **** shuffle_array(); ! write_entry( "", 'S', 0, 0 ); fsync(dj.fd); } --- 848,852 ---- shuffle_array(); ! write_entry( "", 'S', 0, -1 ); fsync(dj.fd); } *************** *** 920,924 **** //Add record number to memory array ! if( insert_track_in_array( info->pos + insert_count,(unsigned short)(rec_offset/ENTRY_SIZE) ) < 0 ) return DJ_NO_MORE_RAM; --- 955,959 ---- //Add record number to memory array ! if( insert_track_in_array( info->pos + insert_count,(unsigned short)(rec_offset/ENTRY_SIZE), false ) < 0 ) return DJ_NO_MORE_RAM; *************** *** 937,940 **** --- 972,980 ---- if(rec_button == BUTTON_STOP) return DJ_CANCELLED; + + yield(); + + //go to end of command file + lseek(dj.fd, 0, SEEK_END); } *************** *** 1009,1014 **** //Called when the mpeg driver is starting a track //Even for the first track of a playlist ! int dj_on_track_begin(int new_playing_index) { if( dj.type_playing == DJ_TYPE_PLAYLIST ) { --- 1049,1056 ---- //Called when the mpeg driver is starting a track //Even for the first track of a playlist ! int dj_on_track_begin(int new_playing_entry) { + int new_playing_index = entry_2_index(new_playing_entry); + if( dj.type_playing == DJ_TYPE_PLAYLIST ) { *************** *** 1034,1041 **** It returns the track path and the track index in the array. */ ! char* dj_on_get_track_info(int steps, int* index) { ! *index = dj_get_next_index( steps ); ! return dj_get_track_path( *index ); } --- 1076,1084 ---- It returns the track path and the track index in the array. */ ! char* dj_on_get_track_info(int steps, int* entry_nb) { ! int index = dj_get_next_index( steps ); ! *entry_nb = dj.playlist.tracks[index]; ! return dj_get_track_path( index ); } *************** *** 1307,1315 **** if( on ) { - shuffle_array(); - entry.cmd = 'S'; entry.index = (unsigned short)dj.playlist.playing_index; if( write( dj.fd, &entry, ENTRY_SIZE) != ENTRY_SIZE) { msg_error("Writing to command file"); --- 1350,1358 ---- if( on ) { entry.cmd = 'S'; entry.index = (unsigned short)dj.playlist.playing_index; + dj.playlist.playing_index = shuffle_array(); + if( write( dj.fd, &entry, ENTRY_SIZE) != ENTRY_SIZE) { msg_error("Writing to command file"); *************** *** 1382,1386 **** case 'Q': ! if( insert_track_in_array( entry.index, i ) < 0 ) return -1; --- 1425,1429 ---- case 'Q': ! if( insert_track_in_array( entry.index, i, false ) < 0 ) return -1; *************** *** 1395,1400 **** case 'S': ! ! shuffle_array(); break; --- 1438,1443 ---- case 'S': ! dj.playlist.playing_index = entry.index; ! dj.playlist.playing_index = shuffle_array(); break; *************** *** 1408,1412 **** if( command_count > 100 ) { ! int progress = (i*100)/command_count; if( !(progress % 10 )) { --- 1451,1455 ---- if( command_count > 100 ) { ! int progress = (i*100)/(command_count-1); if( !(progress % 10 )) { *************** *** 1419,1422 **** --- 1462,1475 ---- } + if(ret == 0) { + + //Set CWD so going to the browser will point to the current folder + + //Read the entry from the command file + lseek( dj.fd, dj.playlist.tracks[global_settings.resume_index] * ENTRY_SIZE, SEEK_SET ); + if( read( dj.fd, &entry, ENTRY_SIZE ) == ENTRY_SIZE ) + set_current_file(entry.path ); + } + if( ret < 0 ) { msg_error("Bad command file"); |