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