gchar* get_display_name(PraghaMusicobject *mobj) { gchar *name = NULL; if (pragha_musicobject_get_file_type(mobj) == FILE_CDDA) { name = g_strdup(pragha_musicobject_get_file(mobj)); } else { name = get_display_filename(pragha_musicobject_get_file(mobj), FALSE); } return name; }
gchar* get_display_name(PraghaMusicobject *mobj) { gchar *name = NULL; if (!pragha_musicobject_is_local_file(mobj)) { name = g_strdup(pragha_musicobject_get_file(mobj)); } else { name = get_display_filename(pragha_musicobject_get_file(mobj), FALSE); } return name; }
static void pragha_scanner_scan_handler(PraghaScanner *scanner, const gchar *dir_name) { GDir *dir; const gchar *next_file = NULL; gchar *ab_file; GError *error = NULL; PraghaMusicobject *mobj = NULL; PraghaMediaType file_type; if(g_cancellable_is_cancelled (scanner->cancellable)) return; dir = g_dir_open(dir_name, 0, &error); if (!dir) { g_critical("Unable to open library : %s", dir_name); return; } next_file = g_dir_read_name(dir); while (next_file) { if(g_cancellable_is_cancelled (scanner->cancellable)) { g_dir_close(dir); return; } ab_file = g_strconcat(dir_name, G_DIR_SEPARATOR_S, next_file, NULL); if (g_file_test(ab_file, G_FILE_TEST_IS_DIR)) pragha_scanner_scan_handler(scanner, ab_file); else { file_type = pragha_file_get_media_type (ab_file); switch (file_type) { case MEDIA_TYPE_AUDIO: mobj = new_musicobject_from_file(ab_file); if (G_LIKELY(mobj)) g_hash_table_insert(scanner->tracks_table, g_strdup(pragha_musicobject_get_file(mobj)), mobj); break; case MEDIA_TYPE_PLAYLIST: scanner->playlists = g_slist_prepend (scanner->playlists, g_strdup(ab_file)); break; case MEDIA_TYPE_IMAGE: case MEDIA_TYPE_UNKNOWN: default: break; } g_mutex_lock (&scanner->files_scanned_mutex); scanner->files_scanned++; g_mutex_unlock (&scanner->files_scanned_mutex); } g_free(ab_file); next_file = g_dir_read_name(dir); } g_dir_close(dir); }
gchar * pragha_mtp_plugin_get_temp_filename (PraghaMusicobject *mobj) { const gchar *track_id, *file; file = pragha_musicobject_get_file (mobj); track_id = file + strlen ("mtp://"); return g_strdup_printf ("/tmp/%s", track_id); }
gint pragha_mtp_plugin_get_track_id (PraghaMusicobject *mobj) { const gchar *track_id, *file; file = pragha_musicobject_get_file (mobj); track_id = file + strlen ("mtp://"); return atoi(track_id); }
static void pragha_filter_dialog_fill_model (GtkListStore *filter_model, PraghaPlaylist *cplaylist) { GtkTreeIter filter_iter; PraghaMusicobject *mobj = NULL; gchar *ch_title = NULL, *ch_artist = NULL, *ch_album = NULL; const gchar *file, *title, *artist, *album; gchar *track_data_markup = NULL; gint track_i = 0; GList *list = NULL, *i; list = pragha_playlist_get_mobj_list(cplaylist); track_i = pragha_playlist_get_no_tracks(cplaylist); if(list != NULL) { for (i=list; i != NULL; i = i->next) { mobj = i->data; file = pragha_musicobject_get_file(mobj); title = pragha_musicobject_get_title(mobj); artist = pragha_musicobject_get_artist(mobj); album = pragha_musicobject_get_album(mobj); ch_title = string_is_not_empty(title) ? g_strdup(title) : get_display_filename (file, FALSE); ch_artist = string_is_not_empty(artist) ? g_strdup(artist) : g_strdup(_("Unknown Artist")); ch_album = string_is_not_empty(album) ? g_strdup(album) : g_strdup(_("Unknown Album")); track_data_markup = g_markup_printf_escaped ("%s - %s - %s", ch_title, ch_artist, ch_album); if (track_data_markup != NULL) { gtk_list_store_prepend (filter_model, &filter_iter); gtk_list_store_set (filter_model, &filter_iter, 0, track_i, 1, track_data_markup, -1); } track_i--; g_free (ch_title); g_free (ch_artist); g_free (ch_album); g_free (track_data_markup); } g_list_free(list); } }
void pragha_toolbar_set_title (PraghaToolbar *toolbar, PraghaMusicobject *mobj) { gchar *str = NULL, *str_title = NULL; const gchar *file = pragha_musicobject_get_file (mobj); const gchar *title = pragha_musicobject_get_title (mobj); const gchar *artist = pragha_musicobject_get_artist (mobj); const gchar *album = pragha_musicobject_get_album (mobj); if(string_is_not_empty(title)) str_title = g_strdup(title); else str_title = get_display_filename(file, FALSE); if(string_is_not_empty(artist) && string_is_not_empty(album)) str = g_markup_printf_escaped (_("%s <small><span weight=\"light\">by</span></small> %s <small><span weight=\"light\">in</span></small> %s"), str_title, artist, album); else if(string_is_not_empty(artist)) str = g_markup_printf_escaped (_("%s <small><span weight=\"light\">by</span></small> %s"), str_title, artist); else if(string_is_not_empty(album)) str = g_markup_printf_escaped (_("%s <small><span weight=\"light\">in</span></small> %s"), str_title, album); else str = g_markup_printf_escaped("%s", str_title); gtk_label_set_markup(GTK_LABEL(toolbar->now_playing_label), str); g_free(str_title); g_free(str); }
LIBMTP_track_t * mtp_track_new_from_pragha_musicobject (LIBMTP_mtpdevice_t *mtp_device, PraghaMusicobject *mobj) { LIBMTP_track_t *tr; LIBMTP_filetype_t filetype; gchar *filename; const gchar *mime_type; struct stat sbuf; mime_type = pragha_musicobject_get_mime_type (mobj); if (is_valid_mime(mime_type, mime_flac)) filetype = LIBMTP_FILETYPE_FLAC; else if (is_valid_mime(mime_type, mime_mpeg)) filetype = LIBMTP_FILETYPE_MP3; else if (is_valid_mime(mime_type, mime_ogg)) filetype = LIBMTP_FILETYPE_OGG; else if (is_valid_mime(mime_type, mime_wav)) filetype = LIBMTP_FILETYPE_WAV; else if (is_valid_mime(mime_type, mime_asf)) filetype = LIBMTP_FILETYPE_WMA; else if (is_valid_mime(mime_type, mime_mp4)) filetype = LIBMTP_FILETYPE_MP4; else filetype = LIBMTP_FILETYPE_UNKNOWN; if (filetype == LIBMTP_FILETYPE_UNKNOWN) return NULL; filename = g_strdup(pragha_musicobject_get_file(mobj)); if (g_stat(filename, &sbuf) == -1) { g_free(filename); return NULL; } tr = LIBMTP_new_track_t(); /* Minimun data. */ tr->filesize = (uint64_t) sbuf.st_size; tr->filename = get_display_name(mobj); tr->filetype = filetype; /* Metadata. */ tr->title = g_strdup(pragha_musicobject_get_title(mobj)); tr->artist = g_strdup(pragha_musicobject_get_artist(mobj)); tr->album = g_strdup(pragha_musicobject_get_album(mobj)); tr->duration = (1000 * pragha_musicobject_get_length(mobj)); tr->genre = g_strdup(pragha_musicobject_get_genre (mobj)); tr->date = g_strdup_printf("%d", pragha_musicobject_get_year (mobj)); /* Storage data. */ tr->parent_id = mtp_device->default_music_folder; tr->storage_id = 0; g_free(filename); return tr; }
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_scanner_update_handler(PraghaScanner *scanner, const gchar *dir_name) { GDir *dir; const gchar *next_file = NULL; gchar *ab_file = NULL, *s_ab_file = NULL; GError *error = NULL; struct stat sbuf; PraghaMusicobject *mobj = NULL; if(g_cancellable_is_cancelled (scanner->cancellable)) return; dir = g_dir_open(dir_name, 0, &error); if (!dir) { g_critical("Unable to open library : %s", dir_name); return; } next_file = g_dir_read_name(dir); while (next_file) { if(g_cancellable_is_cancelled (scanner->cancellable)) return; ab_file = g_strconcat(dir_name, G_DIR_SEPARATOR_S, next_file, NULL); if (g_file_test(ab_file, G_FILE_TEST_IS_DIR)) { pragha_scanner_update_handler(scanner, ab_file); } else { mobj = g_hash_table_lookup(scanner->tracks_table, ab_file); if(!mobj) { mobj = new_musicobject_from_file(ab_file); if (G_LIKELY(mobj)) g_hash_table_insert(scanner->tracks_table, g_strdup(pragha_musicobject_get_file(mobj)), mobj); } else { if ((g_stat(ab_file, &sbuf) == 0) && (sbuf.st_mtime > scanner->last_update.tv_sec)) { mobj = new_musicobject_from_file(ab_file); if (G_LIKELY(mobj)) { g_hash_table_replace(scanner->tracks_table, g_strdup(pragha_musicobject_get_file(mobj)), mobj); } } } g_mutex_lock (&scanner->files_scanned_mutex); scanner->files_scanned++; g_mutex_unlock (&scanner->files_scanned_mutex); g_free(s_ab_file); } g_free(ab_file); next_file = g_dir_read_name(dir); } g_dir_close(dir); }
void pragha_database_add_new_musicobject (PraghaDatabase *database, PraghaMusicobject *mobj) { const gchar *file, *mime_type, *artist, *album, *genre, *comment; gint location_id = 0, mime_type_id = 0, artist_id = 0, album_id = 0, genre_id = 0, year_id = 0, comment_id; if (mobj) { file = pragha_musicobject_get_file (mobj); mime_type = pragha_musicobject_get_mime_type (mobj); artist = pragha_musicobject_get_artist (mobj); album = pragha_musicobject_get_album (mobj); genre = pragha_musicobject_get_genre (mobj); comment = pragha_musicobject_get_comment (mobj); /* Write location */ if ((location_id = pragha_database_find_location (database, file)) == 0) location_id = pragha_database_add_new_location (database, file); /* Write mime_type */ if ((mime_type_id = pragha_database_find_mime_type (database, mime_type)) == 0) mime_type_id = pragha_database_add_new_mime_type (database, mime_type); /* Write artist */ if ((artist_id = pragha_database_find_artist (database, artist)) == 0) artist_id = pragha_database_add_new_artist (database, artist); /* Write album */ if ((album_id = pragha_database_find_album (database, album)) == 0) album_id = pragha_database_add_new_album (database, album); /* Write genre */ if ((genre_id = pragha_database_find_genre (database, genre)) == 0) genre_id = pragha_database_add_new_genre (database, genre); /* Write year */ if ((year_id = pragha_database_find_year (database, pragha_musicobject_get_year (mobj))) == 0) year_id = pragha_database_add_new_year (database, pragha_musicobject_get_year (mobj)); /* Write comment */ if ((comment_id = pragha_database_find_comment (database, comment)) == 0) comment_id = pragha_database_add_new_comment (database, comment); /* Write track */ pragha_database_add_new_track (database, location_id, mime_type_id, artist_id, album_id, genre_id, year_id, comment_id, pragha_musicobject_get_track_no (mobj), pragha_musicobject_get_length (mobj), pragha_musicobject_get_channels (mobj), pragha_musicobject_get_bitrate (mobj), pragha_musicobject_get_samplerate (mobj), pragha_musicobject_get_title (mobj)); } }