/* $Id: clist_items.c,v 1.1.1.1 2000/01/30 16:39:34 benediktroth Exp $ */ #include #include #include #include #include #include #include #include #include "yamt.h" #include "clist_items.h" #include "edit.h" #include "rename.h" #include "mass.h" #include "auto.h" /* This function is borrowed from Balsa */ /* * get_selected_rows : * * return the rows currently selected in the index * * @widget : GtkCList to retrieve the selection from * @rows : a pointer on the return array of rows. This array will * contain tyhe selected rows. * @nb_rows : a pointer on the returned number of selected rows * */ void get_selected_rows( GtkWidget *widget, guint **rows, guint *nb_rows ) { GList *list_of_selected_rows; GtkCList *clist; guint nb_selected_rows; guint *selected_rows; guint row_count; clist = GTK_CLIST(widget); /* retreive the selection */ list_of_selected_rows = clist->selection; nb_selected_rows = g_list_length( list_of_selected_rows ); selected_rows = (guint *)g_malloc( nb_selected_rows * sizeof(guint) ); for (row_count=0; row_countdata); list_of_selected_rows = list_of_selected_rows->next; } /* return the result of the search */ *nb_rows = nb_selected_rows; *rows = selected_rows; return; } void clist_items_sort( GtkCList *clist, gint column, gpointer user_data) { gchar buffer[BUFFERSIZE]; gtk_clist_set_sort_column( GTK_CLIST(clist), column); gtk_clist_sort(GTK_CLIST(clist)); snprintf( buffer, BUFFERSIZE, "%i", column ); yamtlog("%s %s", _("Sorted clist after column: "), buffer ); } void clist_items_play( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar list[1024]; gchar *dir; gchar *file; gchar *dirandfile=NULL; gchar buffer[80]; gchar buffer2[80]; gint i; GtkCList *clist=GTK_CLIST(data); list[0]='\0'; get_selected_rows ( GTK_WIDGET (clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: "), nb_selected_rows );*/ yamtlog("%s", _("Building Playlist") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { /* This clist has more than one column so I use the first one */ /* as the dir and the second as the filename */ gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); dirandfile = g_concat_dir_and_file( buffer, file ); } else { /* This clist has not more than one column so I use the first one */ /* as the filename */ dir = selected_directory; strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); dirandfile = g_concat_dir_and_file( buffer, file ); } strcpy( buffer2, dirandfile ); strcat( buffer2, "\"" ); /* Append the file to the list */ strcat( list, buffer2 ); strcat( list, " " ); yamtlog("%s %s", _("Processing "), dirandfile ); } g_free(dirandfile); } play_file( list ); } void clist_items_edit( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile; gchar *tmp; GtkCList *clist=GTK_CLIST(data); get_selected_rows ( GTK_WIDGET(clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Loading file to edit") ); if( nb_selected_rows != 0 ) { if( clist->columns > 1) { gtk_clist_get_text(GTK_CLIST(clist), selected_rows[0], 0, &dir); gtk_clist_get_text(GTK_CLIST(clist), selected_rows[0], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[0], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); yamtlog("%s %s", _("Processing "), dirandfile ); gtk_notebook_set_page( GTK_NOTEBOOK(notebook), 0 ); /* Load the directory where the file is to the browse list */ tmp = g_strdup( selected_directory ); selected_directory = dir; edit_browse_load( ); selected_directory = tmp; /* Select the file */ edit_file_load( dirandfile ); /* row = gtk_clist_find_row_from_data( find_results_list, file ); */ /* g_print("row: %i\n", row); */ /* gtk_clist_select_row( edit_browse_list, row, 0 ); */ g_free(dirandfile); } else gnome_error_dialog( _("You must select a file!") ); return; } void clist_items_rename( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gchar *buffer=NULL; gchar *format; gint i; GtkCList *clist=GTK_CLIST(data); get_selected_rows ( GTK_WIDGET (clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Renameing files") ); format = rename_get_format(); yamtlog("%s %s", _("Rename-Format: "), format ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); getcwd( buffer, sizeof(buffer) ); chdir(dir); yamtlog("%s %s", _("Processing "), file ); id3tag_rename( file, format ); chdir(dirandfile); } g_free(dirandfile); } /* Update the browse clist */ edit_browse_load(); } void clist_items_mass( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gchar *buffer=NULL; gint i; GtkCList *clist=GTK_CLIST(data); struct id3tag tag; tag = mass_get_tag( ); get_selected_rows ( GTK_WIDGET (clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Mass tagging") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); getcwd( buffer, sizeof(buffer) ); chdir(dir); yamtlog("%s %s", _("Processing "), file ); id3tag_set( file, tag ); chdir(dirandfile); } g_free(dirandfile); } /* Update the browse clist */ edit_browse_load(); } void clist_items_auto( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gchar *buffer=NULL; gint i; gchar *part1; gchar *part2; gchar *tmp; gchar separator; gint mptc; struct id3tag tag; GtkCList *clist = GTK_CLIST(data); get_selected_rows ( GTK_WIDGET(clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Auto tagging") ); part1 = auto_get_part1(); yamtlog("%s %s", "Auto-Part Level1: ", part1); part2 = auto_get_part2(); yamtlog("%s %s", "Auto-Part Level2: ", part2); tmp = auto_get_separator(); separator = tmp[0]; yamtlog("%s %s", "Separator: ", tmp); mptc = auto_get_mptc(); yamtlog("%s %s", _("Auto-mptc: "), mptc ? "TRUE" : "FALSE" ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); getcwd( buffer, sizeof(buffer) ); chdir(dir); tag = id3tag_get_from_filename( dirandfile, part1, part2, separator, mptc ); /* No valid tag was returned */ if( id3tag_is_valid( tag ) != 1 ) { yamtlog("%s %s", _("Skipped "), file ); continue; } yamtlog("%s %s", _("Processing "), file ); id3tag_set( file, tag ); chdir(dirandfile); } } /* Update the browse clist */ edit_browse_load(); edit_file_close(); } void clist_items_fix( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile; gchar *buffer=NULL; gint i; GtkCList *clist = GTK_CLIST(data); get_selected_rows ( GTK_WIDGET(clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Fixing filenames") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); getcwd( buffer, sizeof(buffer) ); chdir(dir); /* yamtlog("%s %s", _("Processing ", file ); */ chdir(dirandfile); } } /* Update the browse clist */ edit_browse_load(); edit_file_close(); } void clist_items_xchange( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile; gchar *buffer=NULL; gint i; GtkCList *clist = GTK_CLIST(data); get_selected_rows ( GTK_WIDGET(clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Exchanging tags") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); getcwd( buffer, sizeof(buffer) ); chdir(dir); /* yamtlog("%s %s", _("Processing ", file ); */ chdir(dirandfile); } } /* Update the browse clist */ edit_browse_load(); edit_file_close(); } void clist_items_select_filename( GtkWidget *widget, gpointer *data ) { GtkWidget *filew; cda.clist = GTK_CLIST(data); cda.string = NULL; filew = gtk_file_selection_new( _("Select a Directory") ); gtk_file_selection_set_filename( GTK_FILE_SELECTION(filew), prop_mp3_dir ); gtk_file_selection_set_filename( GTK_FILE_SELECTION(filew), "newlist.m3u" ); gtk_signal_connect( GTK_OBJECT (filew), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), filew); /* Connect the ok button */ gtk_signal_connect( GTK_OBJECT(GTK_FILE_SELECTION(filew)->ok_button), "clicked", GTK_SIGNAL_FUNC(clist_items_lf), filew ); gtk_signal_connect( GTK_OBJECT(GTK_FILE_SELECTION (filew)->ok_button), "clicked", GTK_SIGNAL_FUNC(destroy), filew ); /* Connect the cancel button to destroy */ gtk_signal_connect( GTK_OBJECT(GTK_FILE_SELECTION(filew)->cancel_button), "clicked", GTK_SIGNAL_FUNC(destroy), filew ); gtk_widget_show(filew); } void clist_items_lf( GtkWidget *widget, GtkFileSelection *file_selection ) { cda.string=gtk_file_selection_get_filename( GTK_FILE_SELECTION(file_selection) ); clist_items_save( cda.clist, cda.string ); } void clist_items_save( GtkCList *clist, gchar *filename ) { FILE *filept; guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gint i; yamtlog("%s %s", _("Saving list using filename: "), filename); if ( (filept=fopen(filename, "w")) == 0) { gnome_error_dialog( _("Could not write List!") ); return; } get_selected_rows ( GTK_WIDGET(clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); /* if( strcmp( dirandfile, last)==0 ) */ /* break; */ yamtlog("%s %s", _("Processing "), dirandfile ); fputs( dirandfile, filept); fputc( '\n', filept); /* last = dirandfile; */ } } else { gnome_error_dialog( _("You must select at least one file!") ); return; } g_free(dirandfile); fclose(filept); gnome_ok_dialog( _("Wrote List!") ); } void clist_items_copy_dialog( GtkWidget *widget, gpointer *data ) { GtkWidget *dialog; GtkWidget *file_entry; gint result; dialog = gnome_dialog_new( _("Copy ?"), GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL); file_entry = gnome_file_entry_new( NULL, _("Select the Destination") ); gtk_entry_set_text( GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(file_entry))), prop_mp3_dir ); gtk_box_pack_start( GTK_BOX (GNOME_DIALOG(dialog)->vbox), file_entry, FALSE, TRUE, 0); gtk_widget_show(file_entry); result = gnome_dialog_run( GNOME_DIALOG(dialog) ); if( result==0 ) { clist_items_copy( GTK_CLIST(data), gtk_entry_get_text( GTK_ENTRY(gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY(file_entry))) ) ); } gnome_dialog_close( GNOME_DIALOG(dialog) ); } void clist_items_copy( GtkCList *clist, gchar *target ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gchar buffer[80]; gchar buffer2[80]; gchar command[200]; gint i; g_print("target dir: %s\n", target ); get_selected_rows ( GTK_WIDGET (clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Copying files") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( buffer, file ); strcpy( buffer2, dirandfile ); strcat( buffer2, "\"" ); /* Copy the file */ strcpy( command, "cp " ); strcat( command, buffer2 ); strcat( command, " " ); strcat( command, target ); /* g_print("command: %s\n", command ); */ yamtlog("%s %s", _("Processing "), dirandfile ); system( command ); } g_free(dirandfile); } else gnome_error_dialog( _("You must select at least one file!") ); } void clist_items_move_dialog( GtkWidget *widget, gpointer *data ) { GtkWidget *dialog; GtkWidget *file_entry; gint result; dialog = gnome_dialog_new( _("Move ?"), GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL); file_entry = gnome_file_entry_new( NULL, _("Select the Destination") ); gtk_entry_set_text( GTK_ENTRY(gnome_file_entry_gtk_entry(GNOME_FILE_ENTRY(file_entry))), prop_mp3_dir ); gtk_box_pack_start( GTK_BOX (GNOME_DIALOG(dialog)->vbox), file_entry, FALSE, TRUE, 0); gtk_widget_show(file_entry); result = gnome_dialog_run( GNOME_DIALOG(dialog) ); if( result==0 ) { clist_items_move( GTK_CLIST(data), gtk_entry_get_text( GTK_ENTRY(gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY(file_entry))) ) ); } gnome_dialog_close( GNOME_DIALOG(dialog) ); } void clist_items_move( GtkCList *clist, gchar *target ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gchar buffer[80]; gchar buffer2[80]; gchar command[200]; gint i; g_print("target dir: %s\n", target ); get_selected_rows ( GTK_WIDGET (clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Moving files") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( buffer, file ); strcpy( buffer2, dirandfile ); strcat( buffer2, "\"" ); /* Move the file */ strcpy( command, "mv " ); strcat( command, buffer2 ); strcat( command, " " ); strcat( command, target ); /* g_print("command: %s\n", command ); */ yamtlog("%s %s", _("Processing "), dirandfile ); system( command ); /* Remove the row from the clist */ gtk_clist_remove( GTK_CLIST(clist), selected_rows[i] ); } g_free(dirandfile); } else gnome_error_dialog( _("You must select at least one file!") ); } void clist_items_delete_dialog( GtkWidget *widget, gpointer *data ) { gnome_app_question_modal( GNOME_APP (app),_("Really delete file(s) ?"), GTK_SIGNAL_FUNC(clist_items_delete), data ); } void clist_items_delete( gint reply, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gchar buffer[80]; gchar buffer2[80]; gchar command[200]; gint i; GtkCList *clist=GTK_CLIST(data); /* No was selected */ if( reply != 0 ) return; get_selected_rows ( GTK_WIDGET (clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Deleting files") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; strcpy( buffer, "\"" ); strcat( buffer, dir ); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( buffer, file ); strcpy( buffer2, dirandfile ); strcat( buffer2, "\"" ); /* Remove the file */ strcpy( command, "rm " ); strcat( command, buffer2 ); /* g_print("command: %s\n", command ); */ yamtlog("%s %s", _("Processing "), dirandfile ); system( command ); /* Remove the row from the clist */ gtk_clist_remove( GTK_CLIST(clist), selected_rows[i] ); } g_free(dirandfile); } else gnome_error_dialog( _("You must select at least one file!") ); } void clist_items_select_all( GtkWidget *widget, gpointer *data ) { gtk_clist_select_all( GTK_CLIST(data) ); } void clist_items_unselect_all( GtkWidget *widget, gpointer *data ) { gtk_clist_unselect_all( GTK_CLIST(data) ); } void clist_items_remove( GtkWidget *widget, gpointer *data ) { guint *selected_rows; guint nb_selected_rows; gchar *dir; gchar *file; gchar *dirandfile=NULL; gint i; GtkCList *clist=GTK_CLIST(data); get_selected_rows ( GTK_WIDGET (clist), &selected_rows, &nb_selected_rows); /* yamtlog("%s %s", _("Items to process: ", nb_selected_rows );*/ yamtlog("%s", _("Removing files") ); if( nb_selected_rows != 0 ) { for( i=0; i < nb_selected_rows; i++) { /* g_print("Selected row number %i is row %i!\n", i, selected_rows[i] ); */ if( clist->columns > 1) { gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &dir); gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 1, &file); } else { dir = selected_directory; gtk_clist_get_text( GTK_CLIST(clist), selected_rows[i], 0, &file); } dirandfile = g_concat_dir_and_file( dir, file ); yamtlog("%s %s", _("Processing "), dirandfile ); /* Remove the row from the clist */ gtk_clist_remove( GTK_CLIST(clist), selected_rows[i] ); } g_free(dirandfile); } else gnome_error_dialog( _("You must select at least one file!") ); }