Example #1
0
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);
	}
}
Example #2
0
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;
}
Example #3
0
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);
}
Example #4
0
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;
}