static gboolean request_album_art_idle (RequestAlbumArtData *data) { RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (data->source); const char *album; /* pretty sure we don't need any extra locking here - we only touch the artwork * request map on the main thread anyway. */ album = rhythmdb_entry_get_string (data->entry, RHYTHMDB_PROP_ALBUM); if (g_hash_table_lookup (priv->artwork_request_map, album) == NULL) { GValue *metadata; RhythmDB *db = get_db_for_source (data->source); rb_debug ("requesting cover art image for album %s", album); g_hash_table_insert (priv->artwork_request_map, (gpointer) album, GINT_TO_POINTER (1)); metadata = rhythmdb_entry_request_extra_metadata (db, data->entry, "rb:coverArt"); if (metadata) { artwork_notify_cb (db, data->entry, "rb:coverArt", metadata, data->source); g_value_unset (metadata); g_free (metadata); } g_object_unref (db); } g_object_unref (data->source); rhythmdb_entry_unref (data->entry); g_free (data); return FALSE; }
static gboolean impl_track_added (RBRemovableMediaSource *isource, RhythmDBEntry *entry, const char *dest, guint64 filesize, const char *mimetype) { RBMtpSource *source = RB_MTP_SOURCE (isource); RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (source); GFile *file; char *path; LIBMTP_track_t *track = NULL; file = g_file_new_for_uri (dest); path = g_file_get_path (file); track = transfer_track (source, priv->device, entry, path, filesize, mimetype); g_free (path); g_file_delete (file, NULL, NULL); if (track != NULL) { RhythmDB *db = get_db_for_source (source); if (priv->album_art_supported) { const char *album; album = rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_ALBUM); if (g_hash_table_lookup (priv->artwork_request_map, album) == NULL) { GValue *metadata; rb_debug ("requesting cover art image for album %s", album); g_hash_table_insert (priv->artwork_request_map, (gpointer) album, GINT_TO_POINTER (1)); metadata = rhythmdb_entry_request_extra_metadata (db, entry, "rb:coverArt"); if (metadata) { artwork_notify_cb (db, entry, "rb:coverArt", metadata, source); g_value_unset (metadata); g_free (metadata); } } } add_mtp_track_to_db (source, db, track); g_object_unref (db); } return FALSE; }