void pragha_application_append_entery_libary (PraghaApplication *pragha) { PraghaPlaylist *playlist; PraghaDatabase *cdbase; GList *list = NULL; PraghaMusicobject *mobj; /* Query and insert entries */ set_watch_cursor (pragha_application_get_window(pragha)); cdbase = pragha_application_get_database (pragha); const gchar *sql = "SELECT id FROM LOCATION"; PraghaPreparedStatement *statement = pragha_database_create_statement (cdbase, sql); while (pragha_prepared_statement_step (statement)) { gint location_id = pragha_prepared_statement_get_int (statement, 0); mobj = new_musicobject_from_db (cdbase, location_id); if (G_LIKELY(mobj)) list = g_list_prepend (list, mobj); else g_warning ("Unable to retrieve details for" " location_id : %d", location_id); pragha_process_gtk_events (); } pragha_prepared_statement_free (statement); remove_watch_cursor (pragha_application_get_window(pragha)); if (list) { list = g_list_reverse(list); playlist = pragha_application_get_playlist (pragha); pragha_playlist_append_mobj_list (playlist, list); g_list_free(list); } }
static gboolean glyr_finished_thread_update (gpointer data) { PraghaApplication *pragha; GtkWidget *window; glyr_struct *glyr_info = data; pragha = pragha_songinfo_plugin_get_application (glyr_info->plugin); window = pragha_application_get_window (pragha); remove_watch_cursor (window); if(glyr_info->head != NULL) glyr_finished_successfully (glyr_info); else glyr_finished_incorrectly (glyr_info); glyr_query_destroy (&glyr_info->query); g_slice_free (glyr_struct, glyr_info); return FALSE; }
static gboolean pragha_scanner_worker_finished (gpointer data) { GtkWidget *msg_dialog; gchar *last_scan_time = NULL; PraghaPreferences *preferences; PraghaDatabase *database; GSList *list; PraghaScanner *scanner = data; /* Stop updates */ g_source_remove(scanner->update_timeout); /* Ensure that the other thread has finished */ g_thread_join (scanner->no_files_thread); /* If not cancelled, update database and show a dialog */ if(!g_cancellable_is_cancelled (scanner->cancellable)) { /* Hide the scanner and show the dialog */ gtk_widget_hide(scanner->hbox); msg_dialog = gtk_message_dialog_new(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(scanner->hbox))), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s", _("Library scan complete")); g_signal_connect(G_OBJECT(msg_dialog), "response", G_CALLBACK(pragha_scanner_finished_dialog_response_cb), scanner); g_signal_connect(G_OBJECT(msg_dialog), "delete-event", G_CALLBACK(pragha_scanner_finished_dialog_delete), scanner); gtk_widget_show_all(msg_dialog); /* Save new database and update the library view */ set_watch_cursor(msg_dialog); set_watch_cursor(scanner->hbox); database = pragha_database_get(); pragha_database_begin_transaction (database); pragha_database_flush (database); g_hash_table_foreach (scanner->tracks_table, pragha_scanner_add_track_db, database); /* Import playlist detected. */ for (list = scanner->playlists ; list != NULL; list = list->next) pragha_scanner_import_playlist(database, list->data); pragha_database_commit_transaction (database); pragha_database_change_tracks_done (database); g_object_unref(database); remove_watch_cursor(scanner->hbox); remove_watch_cursor(msg_dialog); /* Save finished time and folders scanned. */ g_get_current_time(&scanner->last_update); last_scan_time = g_time_val_to_iso8601(&scanner->last_update); preferences = pragha_preferences_get(); pragha_preferences_set_string(preferences, GROUP_LIBRARY, KEY_LIBRARY_LAST_SCANNED, last_scan_time); g_free(last_scan_time); pragha_preferences_set_filename_list(preferences, GROUP_LIBRARY, KEY_LIBRARY_SCANNED, scanner->folder_list); g_object_unref(G_OBJECT(preferences)); } else { gtk_widget_hide(scanner->hbox); } gtk_progress_bar_set_text(GTK_PROGRESS_BAR(scanner->progress_bar), NULL); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(scanner->progress_bar), 0.0); /* Clean memory */ g_hash_table_remove_all(scanner->tracks_table); free_str_list(scanner->folder_list); scanner->folder_list = NULL; free_str_list(scanner->folder_scanned); scanner->folder_scanned = NULL; free_str_list(scanner->playlists); scanner->playlists = NULL; scanner->no_files = 0; scanner->files_scanned = 0; g_cancellable_reset (scanner->cancellable); scanner->update_timeout = 0; return FALSE; }