From: Hans-Dieter K. <hd...@t-...> - 2007-03-24 01:27:00
|
Hi Michael, I'll review your patch and put it into my queue, please be patient, the overflow is near ;-) Maybe, I should add a TODO list to xine-ui CVS ... Cheers, Hans-Dieter Michael Hughes wrote: > > Diego > > > Can you please attach an unified diff? (cvs diff -u) > > I hope that this is correct; I am not very familiar with CVS. The > original attached file was generated with the "diff" command. > > Mike > > > ------------------------------------------------------------------------ > > ? xine-ui.diff > Index: src/xitk/actions.c > =================================================================== > RCS file: /cvsroot/xine/xine-ui/src/xitk/actions.c,v > retrieving revision 1.271 > diff -u -r1.271 actions.c > --- src/xitk/actions.c 31 Dec 2006 22:00:11 -0000 1.271 > +++ src/xitk/actions.c 16 Mar 2007 14:56:10 -0000 > @@ -2030,94 +2030,132 @@ > load_sub = NULL; > } > > + > +/* Callback function for file select button or double-click in file browser. > + Append selected file to the current playlist */ > static void fileselector_callback(filebrowser_t *fb) { > char *file; > char *cur_dir = filebrowser_get_current_dir(fb); > > + /* Upate configuration with the selected directory path */ > if(cur_dir && strlen(cur_dir)) { > snprintf(gGui->curdir, sizeof(gGui->curdir), "%s", cur_dir); > config_update_string("media.files.origin_path", gGui->curdir); > } > > + /* Get the file path/name */ > if(((file = filebrowser_get_full_filename(fb)) != NULL) && strlen(file)) { > int first = gGui->playlist.num; > + char *ident; > + > + /* get the name only to use as an identifier in the playlist display */ > + ident = filebrowser_get_current_filename(fb); > > - if(file) { > - gGui->playlist.control |= PLAYLIST_CONTROL_IGNORE; > - gui_dndcallback(file); > - gGui->playlist.control &= ~PLAYLIST_CONTROL_IGNORE; > - free(file); > + /* If the file has an extension which could be a playlist, attempt to append > + it to the current list as a list; otherwise, append it as an ordinary file. */ > + if(mrl_look_like_playlist(file)) { > + if(!mediamark_concat_mediamarks(file)) > + mediamark_append_entry(file, ident, NULL, 0, -1, 0, 0); > } > + else > + mediamark_append_entry(file, ident, NULL, 0, -1, 0, 0); > > - if((first != gGui->playlist.num) && gGui->smart_mode) { > - if(xine_get_status(gGui->stream) != XINE_STATUS_STOP) { > - gGui->ignore_next = 1; > - xine_stop(gGui->stream); > - gGui->ignore_next = 0; > - } > - > + playlist_update_playlist(); > + free(file); > + free(ident); > + > + /* Enable controls on display */ > + if((!is_playback_widgets_enabled()) && gGui->playlist.num) > + enable_playback_controls(1); > + > + /* If an MRL is not being played, select the first file appended. If in "smart mode" start > + playing the entry. If a an MRL is currently being played, let it continue normally */ > + if((first != gGui->playlist.num) && (xine_get_status(gGui->stream) == XINE_STATUS_STOP)) { > gGui->playlist.cur = first; > - gui_set_current_mmk(mediamark_get_current_mmk()); > - gui_play(NULL, NULL); > + if(gGui->smart_mode) { > + gui_set_current_mmk(mediamark_get_current_mmk()); > + gui_play(NULL, NULL); > + } > } > - } > + } /* If valid file name */ > > load_stream = NULL; > } > > + > +/* Callback function for "Select All" button in file browser. Append all files in the > + currently selected directory to the current playlist. */ > static void fileselector_all_callback(filebrowser_t *fb) { > char **files; > char *path = filebrowser_get_current_dir(fb); > > + /* Update the configuration with the current path */ > if(path && strlen(path)) { > snprintf(gGui->curdir, sizeof(gGui->curdir), "%s", path); > config_update_string("media.files.origin_path", gGui->curdir); > } > > + /* Get all of the file names in the current directory as an array of pointers to strings */ > if((files = filebrowser_get_all_files(fb)) != NULL) { > int i = 0; > > if(path && strlen(path)) { > char pathname[XITK_PATH_MAX + XITK_NAME_MAX + 1]; > char fullfilename[XITK_PATH_MAX + XITK_NAME_MAX + 1]; > - int first = gGui->playlist.num; > + int first = gGui->playlist.num; /* current count of entries in playlist */ > > + /* if the path is anything other than "/", append a slash to it so that it can > + be concatenated with the file name */ > if(strcasecmp(path, "/")) > - snprintf(pathname, sizeof(pathname), "%s/", path); > + snprintf(pathname, sizeof(pathname), "%s/", path); > else > - snprintf(pathname, sizeof(pathname), "%s", path); > + snprintf(pathname, sizeof(pathname), "%s", path); > > - gGui->playlist.control |= PLAYLIST_CONTROL_IGNORE; > + /* for each file, concatenate the path with the name and append it to the playlist */ > while(files[i]) { > - snprintf(fullfilename, sizeof(fullfilename), "%s%s", pathname, files[i++]); > - gui_dndcallback(fullfilename); > - } > - gGui->playlist.control &= ~PLAYLIST_CONTROL_IGNORE; > + snprintf(fullfilename, sizeof(fullfilename), "%s%s", pathname, files[i]); > + > + /* If the file has an extension which could be a playlist, attempt to append > + it to the current list as a list; otherwise, append it as an ordinary file. */ > + if(mrl_look_like_playlist(fullfilename)) { > + if(!mediamark_concat_mediamarks(fullfilename)) > + mediamark_append_entry(fullfilename, files[i], NULL, 0, -1, 0, 0); > + } > + else > + mediamark_append_entry(fullfilename, files[i], NULL, 0, -1, 0, 0); > + > + i++; > + } /* End while */ > > + playlist_update_playlist(); > free(path); > > - if((first != gGui->playlist.num) && gGui->smart_mode) { > - if(xine_get_status(gGui->stream) == XINE_STATUS_PLAY) { > - gGui->ignore_next = 1; > - xine_stop(gGui->stream); > - gGui->ignore_next = 0; > - } > - gGui->playlist.cur = first; > - gui_set_current_mmk(mediamark_get_current_mmk()); > - gui_play(NULL, NULL); > + /* Enable playback controls on display */ > + if((!is_playback_widgets_enabled()) && gGui->playlist.num) > + enable_playback_controls(1); > + > + /* If an MRL is not being played, select the first file appended. If in "smart mode" start > + playing the entry. If an MRL is currently being played, let it continue normally */ > + if((first != gGui->playlist.num) && (xine_get_status(gGui->stream) == XINE_STATUS_STOP)) { > + gGui->playlist.cur = first; > + if(gGui->smart_mode) { > + gui_set_current_mmk(mediamark_get_current_mmk()); > + gui_play(NULL, NULL); > + } > } > - } > + } /* If valid path */ > > i = 0; > while(files[i]) > free(files[i++]); > > free(files); > - } > + } /* If valid file list */ > > load_stream = NULL; > } > > + > void gui_file_selector(void) { > filebrowser_callback_button_t cbb[3]; |