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); } }
gchar * pragha_database_get_filename_from_location_id (PraghaDatabase *database, gint location_id) { PraghaPreparedStatement *statement; const gchar *sql; gchar *file = NULL; sql = "SELECT name FROM LOCATION WHERE id = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_int (statement, 1, location_id); if (pragha_prepared_statement_step (statement)) file = g_strdup (pragha_prepared_statement_get_string (statement, 0)); else g_warning ("Unable to find filename for location id: %d", location_id); pragha_prepared_statement_free (statement); return file; }
void pragha_scanner_update_library(PraghaScanner *scanner) { PraghaPreferences *preferences; PraghaDatabase *database; PraghaPreparedStatement *statement; PraghaMusicobject *mobj = NULL; gchar *mask = NULL, *last_scan_time = NULL; const gchar *sql = NULL; guint location_id; GSList *list; if(scanner->update_timeout) return; preferences = pragha_preferences_get(); /* Get last time that update the library and folders to analyze */ last_scan_time = pragha_preferences_get_string(preferences, GROUP_LIBRARY, KEY_LIBRARY_LAST_SCANNED); if (last_scan_time) { if (!g_time_val_from_iso8601(last_scan_time, &scanner->last_update)) g_warning("Unable to convert last rescan time"); g_free(last_scan_time); } scanner->folder_list = pragha_preferences_get_filename_list(preferences, GROUP_LIBRARY, KEY_LIBRARY_DIR); scanner->folder_scanned = pragha_preferences_get_filename_list(preferences, GROUP_LIBRARY, KEY_LIBRARY_SCANNED); g_object_unref(G_OBJECT(preferences)); /* Update the gui */ scanner->update_timeout = g_timeout_add_seconds(1, (GSourceFunc)pragha_scanner_update_progress, scanner); pragha_preferences_set_show_status_bar (preferences, TRUE); gtk_widget_show_all(scanner->hbox); /* Append the files from database that no changed. */ database = pragha_database_get(); for(list = scanner->folder_scanned ; list != NULL; list = list->next) { if(is_present_str_list(list->data, scanner->folder_list)) { sql = "SELECT id FROM LOCATION WHERE name LIKE ?"; statement = pragha_database_create_statement (database, sql); mask = g_strconcat (list->data, "%", NULL); pragha_prepared_statement_bind_string (statement, 1, mask); while (pragha_prepared_statement_step (statement)) { location_id = pragha_prepared_statement_get_int (statement, 0); mobj = new_musicobject_from_db(database, location_id); if (G_LIKELY(mobj)) { g_hash_table_insert(scanner->tracks_table, g_strdup(pragha_musicobject_get_file(mobj)), mobj); } pragha_process_gtk_events (); } pragha_prepared_statement_free (statement); g_free(mask); } } g_object_unref(database); /* Launch threads */ scanner->no_files_thread = g_thread_new("Count no files", pragha_scanner_count_no_files_worker, scanner); scanner->worker_thread = pragha_async_launch_full(pragha_scanner_update_worker, pragha_scanner_worker_finished, scanner); }
static void pragha_database_update_track (PraghaDatabase *database, gint location_id, gint changed, gint track_no, const gchar *title, gint artist_id, gint album_id, gint genre_id, gint year_id, gint comment_id) { const gchar *sql; PraghaPreparedStatement *statement; if (changed & TAG_TNO_CHANGED) { sql = "UPDATE TRACK SET track_no = ? WHERE LOCATION = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_int (statement, 1, track_no); pragha_prepared_statement_bind_int (statement, 2, location_id); pragha_prepared_statement_step (statement); pragha_prepared_statement_free (statement); } if (changed & TAG_TITLE_CHANGED) { sql = "UPDATE TRACK SET title = ? WHERE LOCATION = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_string (statement, 1, title); pragha_prepared_statement_bind_int (statement, 2, location_id); pragha_prepared_statement_step (statement); pragha_prepared_statement_free (statement); } if (changed & TAG_ARTIST_CHANGED) { sql = "UPDATE TRACK SET artist = ? WHERE LOCATION = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_int (statement, 1, artist_id); pragha_prepared_statement_bind_int (statement, 2, location_id); pragha_prepared_statement_step (statement); pragha_prepared_statement_free (statement); } if (changed & TAG_ALBUM_CHANGED) { sql = "UPDATE TRACK SET album = ? WHERE LOCATION = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_int (statement, 1, album_id); pragha_prepared_statement_bind_int (statement, 2, location_id); pragha_prepared_statement_step (statement); pragha_prepared_statement_free (statement); } if (changed & TAG_GENRE_CHANGED) { sql = "UPDATE TRACK SET genre = ? WHERE LOCATION = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_int (statement, 1, genre_id); pragha_prepared_statement_bind_int (statement, 2, location_id); pragha_prepared_statement_step (statement); pragha_prepared_statement_free (statement); } if (changed & TAG_YEAR_CHANGED) { sql = "UPDATE TRACK SET year = ? WHERE LOCATION = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_int (statement, 1, year_id); pragha_prepared_statement_bind_int (statement, 2, location_id); pragha_prepared_statement_step (statement); pragha_prepared_statement_free (statement); } if (changed & TAG_COMMENT_CHANGED) { sql = "UPDATE TRACK SET comment = ? WHERE LOCATION = ?"; statement = pragha_database_create_statement (database, sql); pragha_prepared_statement_bind_int (statement, 1, comment_id); pragha_prepared_statement_bind_int (statement, 2, location_id); pragha_prepared_statement_step (statement); pragha_prepared_statement_free (statement); } }
PraghaMusicobject * new_musicobject_from_db(PraghaDatabase *cdbase, gint location_id) { PraghaMusicobject *mobj = NULL; CDEBUG(DBG_MOBJ, "Creating new musicobject with location id: %d", location_id); const gchar *sql = "SELECT \ MIME_TYPE.name, \ TRACK.samplerate, \ TRACK.channels, \ TRACK.length, \ TRACK.bitrate, \ COMMENT.name, \ YEAR.year, \ TRACK.track_no, \ GENRE.name, \ ALBUM.name, \ ARTIST.name, \ TRACK.title, \ LOCATION.name \ FROM MIME_TYPE, TRACK, COMMENT, YEAR, GENRE, ALBUM, ARTIST, LOCATION \ WHERE TRACK.location = ? \ AND MIME_TYPE.id = TRACK.file_type \ AND COMMENT.id = TRACK.comment \ AND YEAR.id = TRACK.year \ AND GENRE.id = TRACK.genre \ AND ALBUM.id = TRACK.album \ AND ARTIST.id = TRACK.artist \ AND LOCATION.id = ?"; PraghaPreparedStatement *statement = pragha_database_create_statement (cdbase, sql); pragha_prepared_statement_bind_int (statement, 1, location_id); pragha_prepared_statement_bind_int (statement, 2, location_id); if (pragha_prepared_statement_step (statement)) { mobj = g_object_new (PRAGHA_TYPE_MUSICOBJECT, "file", pragha_prepared_statement_get_string (statement, 12), "source", FILE_LOCAL, "mime-type", pragha_prepared_statement_get_string (statement, 0), "title", pragha_prepared_statement_get_string (statement, 11), "artist", pragha_prepared_statement_get_string (statement, 10), "album", pragha_prepared_statement_get_string (statement, 9), "genre", pragha_prepared_statement_get_string (statement, 8), "comment", pragha_prepared_statement_get_string (statement, 5), "year", pragha_prepared_statement_get_int (statement, 6), "track-no", pragha_prepared_statement_get_int (statement, 7), "length", pragha_prepared_statement_get_int (statement, 3), "bitrate", pragha_prepared_statement_get_int (statement, 4), "channels", pragha_prepared_statement_get_int (statement, 2), "samplerate", pragha_prepared_statement_get_int (statement, 1), NULL); } else { g_critical("Track with location id : %d not found in DB", location_id); } pragha_prepared_statement_free (statement); return mobj; }