static void playing_song_changed_cb (RBShellPlayer *player, RhythmDBEntry *entry, RBGriloPlugin *plugin) { const char *uri; RhythmDBEntryType *entry_type; RBGriloEntryData *data; if (entry == NULL) return; entry_type = rhythmdb_entry_get_entry_type (entry); if (RB_IS_GRILO_ENTRY_TYPE (entry_type) == FALSE) { return; } data = RHYTHMDB_ENTRY_GET_TYPE_DATA (entry, RBGriloEntryData); uri = grl_data_get_string (data->grilo_data, GRL_METADATA_KEY_THUMBNAIL); if (uri != NULL) { RBExtDBKey *key; key = rb_ext_db_key_create_storage ("album", rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_ALBUM)); rb_ext_db_key_add_field (key, "artist", rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_ARTIST)); rb_ext_db_store_uri (plugin->art_store, key, RB_EXT_DB_SOURCE_SEARCH, uri); rb_ext_db_key_free (key); } }
static RBExtDBKey * create_store_key (RBExtDBKey *key, int option) { RBExtDBKey *skey = NULL; GList *l; g_assert (key->lookup); if (key->multi_field != NULL && option > key->multi_field->values->len && key->multi_field->match_null == FALSE) { return NULL; } else if (key->multi_field == NULL && option != 0) { return NULL; } for (l = key->fields; l != NULL; l = l->next) { RBExtDBField *f = l->data; const char *value; if (f != key->multi_field) { value = g_ptr_array_index (f->values, 0); } else if (option < f->values->len) { value = g_ptr_array_index (f->values, option); } else { continue; } if (skey == NULL) skey = rb_ext_db_key_create_storage (f->name, value); else rb_ext_db_key_add_field (skey, f->name, value); } return skey; }
static RBExtDBKey * do_create (const char *field, const char *value, gboolean lookup) { RBExtDBKey *key; key = g_slice_new0 (RBExtDBKey); key->lookup = lookup; rb_ext_db_key_add_field (key, field, value); return key; }
static gboolean impl_track_added (RBTransferTarget *target, RhythmDBEntry *entry, const char *dest, guint64 filesize, const char *media_type) { LIBMTP_track_t *track = NULL; RBMtpSourcePrivate *priv = MTP_SOURCE_GET_PRIVATE (target); RhythmDB *db; track = g_hash_table_lookup (priv->track_transfer_map, dest); if (track == NULL) { rb_debug ("track-added called, but can't find a track for dest URI %s", dest); return FALSE; } g_hash_table_remove (priv->track_transfer_map, dest); if (strcmp (track->album, _("Unknown")) != 0) { rb_mtp_thread_add_to_album (priv->device_thread, track, track->album); if (priv->album_art_supported) { RBExtDBKey *key; /* need to do this in an idle handler? */ key = rb_ext_db_key_create_lookup ("album", track->album); rb_ext_db_key_add_field (key, "artist", track->artist); rb_ext_db_request (priv->art_store, key, (RBExtDBRequestCallback) art_request_cb, g_object_ref (target), (GDestroyNotify) g_object_unref); rb_ext_db_key_free (key); } } db = get_db_for_source (RB_MTP_SOURCE (target)); add_mtp_track_to_db (RB_MTP_SOURCE (target), db, track); g_object_unref (db); queue_free_space_update (RB_MTP_SOURCE (target)); return FALSE; }