/* $Id: rename.c,v 1.1.1.1 2000/01/30 16:39:25 benediktroth Exp $ */ #include #include #include #include #include #include #include #include #include "yamt.h" #include "rename.h" GtkWidget *rename_box_new( ) { GtkWidget *box; GtkWidget *rename_frame_directory; GtkWidget *rename_frame_format; GtkWidget *rename_table_directory; GtkWidget *rename_table_format; GtkWidget *rename_label_directory; GtkWidget *rename_label_format; GtkWidget *rename_label_select; GtkWidget *rename_button_select; GtkWidget *rename_button_t; GtkWidget *rename_button_a; GtkWidget *rename_button_b; GtkWidget *rename_button_c; GtkWidget *rename_button_y; GtkWidget *rename_button_g; GtkWidget *rename_buttons_box; GtkWidget *rename_buttons_quit; GtkWidget *rename_buttons_start; /* The box it which everything is put */ box = gtk_vbox_new( FALSE, 0); /* Frame for directory */ rename_frame_directory = gtk_frame_new( NULL ); gtk_box_pack_start( GTK_BOX (box), rename_frame_directory, TRUE, FALSE, 0 ); gtk_widget_show( rename_frame_directory ); /* Table for directory */ rename_table_directory = gtk_table_new( 1, 1, TRUE); gtk_container_set_border_width( GTK_CONTAINER (rename_table_directory), 5); gtk_container_add( GTK_CONTAINER (rename_frame_directory), rename_table_directory ); gtk_widget_show( rename_table_directory ); /* Directory */ rename_label_directory=gtk_label_new( _("Directory: ")); gtk_table_attach_defaults( GTK_TABLE (rename_table_directory), rename_label_directory, 0, 1, 0, 1); gtk_widget_show( rename_label_directory ); rename_directory=gtk_label_new("[no dir selected]"); gtk_table_attach_defaults( GTK_TABLE (rename_table_directory), rename_directory, 1, 2, 0, 1); gtk_widget_show( rename_directory ); /* The select button */ rename_button_select = gnome_stock_or_ordinary_button( GNOME_STOCK_PIXMAP_OPEN ); gtk_signal_connect( GTK_OBJECT (rename_button_select), "clicked", GTK_SIGNAL_FUNC (rename_directory_select), _("Select Directory") ); gtk_table_attach_defaults( GTK_TABLE (rename_table_directory), rename_button_select, 2, 3, 0, 1); gtk_widget_show( rename_button_select ); /* The recursive button */ rename_button_recursive = gtk_check_button_new_with_label( _("Recurse Subdirs") ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON (rename_button_recursive), FALSE ); gtk_table_attach_defaults( GTK_TABLE (rename_table_directory), rename_button_recursive, 1, 2, 1, 2); gtk_widget_show( rename_button_recursive ); /* The format frame */ rename_frame_format = gtk_frame_new( NULL ); gtk_frame_set_label( GTK_FRAME (rename_frame_format), _("Format") ); gtk_box_pack_start( GTK_BOX (box), rename_frame_format, TRUE, FALSE, 0 ); gtk_widget_show( rename_frame_format ); /* Table */ rename_table_format = gtk_table_new( 5, 3, TRUE); gtk_container_add( GTK_CONTAINER (rename_frame_format), rename_table_format ); gtk_widget_show( rename_table_format ); /* The format label */ rename_label_format=gtk_label_new( _("Format: ") ); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_label_format, 0, 1, 0, 1); gtk_widget_show( rename_label_format ); /* The format text entry */ rename_entry_format = gtk_entry_new_with_max_length(30); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_entry_format, 1, 3, 0, 1); gtk_widget_show( rename_entry_format ); rename_label_select=gtk_label_new( _("Please select a format: ") ); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_label_select, 0, 1, 2, 3); gtk_widget_show( rename_label_select ); /* The format buttons */ rename_button_t = gtk_check_button_new_with_label( _("Title") ); gtk_signal_connect( GTK_OBJECT (rename_button_t), "clicked", GTK_SIGNAL_FUNC (rename_button_toggled), "t"); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_button_t, 1, 2, 2, 3); gtk_widget_show( rename_button_t ); rename_button_a = gtk_check_button_new_with_label( _("Artist") ); gtk_signal_connect( GTK_OBJECT (rename_button_a), "clicked", GTK_SIGNAL_FUNC (rename_button_toggled), "a"); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_button_a, 1, 2, 3, 4); gtk_widget_show( rename_button_a ); rename_button_b = gtk_check_button_new_with_label( _("Album") ); gtk_signal_connect( GTK_OBJECT (rename_button_b), "clicked", GTK_SIGNAL_FUNC (rename_button_toggled), "b"); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_button_b, 1, 2, 4, 5); gtk_widget_show( rename_button_b ); rename_button_c = gtk_check_button_new_with_label( _("Comment") ); gtk_signal_connect( GTK_OBJECT (rename_button_c), "clicked", GTK_SIGNAL_FUNC (rename_button_toggled), "c"); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_button_c, 2, 3, 2, 3); gtk_widget_show( rename_button_c ); rename_button_y = gtk_check_button_new_with_label( _("Year") ); gtk_signal_connect( GTK_OBJECT (rename_button_y), "clicked", GTK_SIGNAL_FUNC (rename_button_toggled), "y"); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_button_y, 2, 3, 3, 4); gtk_widget_show( rename_button_y ); rename_button_g = gtk_check_button_new_with_label( _("Genre") ); gtk_signal_connect( GTK_OBJECT (rename_button_g), "clicked", GTK_SIGNAL_FUNC (rename_button_toggled), "g"); gtk_table_attach_defaults( GTK_TABLE (rename_table_format), rename_button_g, 2, 3, 4, 5); gtk_widget_show( rename_button_g ); /* Set the standard */ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON (rename_button_a), TRUE ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON (rename_button_t), TRUE ); /* The Box for the buttons */ rename_buttons_box = gtk_hbox_new( TRUE, 10); /* gtk_container_set_border_width( GTK_CONTAINER (rename_buttons_box), 3); */ gtk_box_pack_start( GTK_BOX (box), rename_buttons_box, TRUE, FALSE, 0 ); gtk_widget_show( rename_buttons_box ); /* The Buttons */ rename_buttons_start = gnome_stock_or_ordinary_button( GNOME_STOCK_PIXMAP_EXEC ); gtk_signal_connect( GTK_OBJECT (rename_buttons_start), "clicked", GTK_SIGNAL_FUNC (rename_start), NULL ); gtk_box_pack_start( GTK_BOX (rename_buttons_box), rename_buttons_start, TRUE, TRUE, 0 ); gtk_widget_show( rename_buttons_start ); rename_buttons_quit = gnome_stock_or_ordinary_button( GNOME_STOCK_PIXMAP_QUIT ); gtk_signal_connect( GTK_OBJECT (rename_buttons_quit), "clicked", GTK_SIGNAL_FUNC (gtk_exit), NULL ); gtk_box_pack_start( GTK_BOX (rename_buttons_box), rename_buttons_quit, TRUE, TRUE, 0 ); gtk_widget_show( rename_buttons_quit ); return(box); } void rename_load_properties( void ) { gtk_label_set_text( GTK_LABEL (rename_directory), prop_mp3_dir); } void rename_button_toggled( GtkWidget *widget, gchar *data ) { gchar *buffer; gchar buffer2[80]; gchar buffer3[80]; gint i; gint i2; buffer = gtk_entry_get_text( GTK_ENTRY (rename_entry_format) ); if( GTK_TOGGLE_BUTTON (widget)->active ) { strcpy( buffer2, buffer ); if ( buffer[0] != '\0' ) strcat( buffer2, " - " ); strcat( buffer2, "%" ); strcat( buffer2, data ); } else { for( i=0, i2=0; iok_button), "clicked", GTK_SIGNAL_FUNC (rename_lf), filew); gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button), "clicked", GTK_SIGNAL_FUNC (destroy), filew); /* Connect the cancel buton to destroy */ gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button), "clicked", GTK_SIGNAL_FUNC (destroy), filew); gtk_widget_show(filew); } /* I don't know how to pass the filename directly to load_file so I use this function */ void rename_lf( GtkWidget *widget, GtkFileSelection *file_selection ) { gchar *filename=gtk_file_selection_get_filename( GTK_FILE_SELECTION (file_selection)); rename_directory_load( filename ); } void rename_directory_load( gchar *dirname ) { gtk_label_set_text( GTK_LABEL(rename_directory), dirname ); /* g_print("dir: %s\n", dirname ); */ } gchar *rename_get_format( void ) { return( gtk_entry_get_text( GTK_ENTRY(rename_entry_format) ) ); } void rename_start( void ) { gchar *format; gchar *directory; gboolean recursive; format = rename_get_format(); yamtlog("%s %s", _("Rename-Format: "), format ); gtk_label_get( GTK_LABEL(rename_directory), &directory ); yamtlog("%s %s", _("Rename-Directory: "), directory ); recursive = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(rename_button_recursive) ); yamtlog("%s %s", _("Rename-Recursive: "), recursive ? "TRUE" : "FALSE" ); rename_go( directory, 0 , recursive, format); } void rename_go( gchar *dir, gint depth, gboolean recursive, gchar *format ) { DIR *dp; struct dirent *entry; struct stat statbuf; if( (dp = opendir(dir))==NULL ) { yamtlog("%s %s", _("ERROR while opening "), dir); gnome_error_dialog( _("Could not open directory!") ); return; } chdir(dir); while( (entry = readdir(dp)) != NULL ) { update_progress_bar(); lstat( entry->d_name, &statbuf); if( S_ISDIR(statbuf.st_mode)) { /* Shall it be recursive ? */ if( recursive == 0 ) continue; /* Found a directory, ignore "." and ".." */ if( strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0 ) continue; /* printf("%*s%s/\n", depth, " ", entry->d_name ); */ /* Recurse but increase the indent level */ rename_go( entry->d_name, depth+4, recursive, format ); } else { /* printf("%*s%s\n", depth, " ", entry->d_name ); */ id3tag_rename( entry->d_name, format ); } } chdir(".."); closedir(dp); }