Handling playlists elements

Inserting items

Adding elements to the playlist is done by using mafw_playlist_insert_item and specifying the index where the item should be inserted.

{
        gchar *object_id = get_object_id();
	mafw_playlist_insert_item(playlist, index, object_id, &error);
	g_free(oid);

	if (error != NULL)
	{
          /* Error handling */
	}
	else
	{
          /* Elements insertion */
	}
}

A signal will be emitted whenever a playlist is modified. Notice that other MAFW based applications may be modifying the playlists in use by your application at any moment. By connecting to these signals, your application should be able to handle this situation properly:

{
	g_signal_connect (playlist, "contents-changed",
			  (GCallback) on_mafw_playlist_contents_changed, NULL);
}

static void
on_mafw_playlist_contents_changed(MafwPlaylist *playlist, guint from,
				  guint nremoved, guint nreplaced)
{
  /* Update application accordingly */
}

This "contents-changed" signal is used to signal changes of any kind. The from parameter is the index of the first element affected by the change, nremoved is the number of removed elements and nreplaced represents the number of elements replaced. For example, in case of insertion, the signal will be emitted with the insertion index as from, 0 as nremoved and 1 as nreplaced. More information is available in the Mafw API reference.

Also, the convenience function mafw\_playlist\_append\_item can be used to append items to the tail of a playlist.

Removing items

As in the case of insertion, one only needs to call the method on the playlist proxy object with the index of the element to remove:

{
	mafw_playlist_remove_item (playlist, (guint) index, &error);

	if (error != NULL) {
         /* Error handling */
	}
}

The signal received when modifying the playlist is the same as when removing elements. In this case nremoved would be 1 and nreplaced would be the difference between the number of elements in the playlist and the index of the removed element plus the number of items that were removed (1). There are more examples available in the Mafw API reference.

Moving items

Moving one element from one index to another can be done by calling mafw_playlist_move_item :

{
	mafw_playlist_move_item (playlist, 3, 1, &error);

	if (error != NULL) {
          /* Error handling */
	}
}

The example moves the element at position 3 to position 1, moving elements in positions 1 and 2 forward to positions 2 and 3. When invoking this method, the signal item-moved is emitted:

{
	g_signal_connect (playlist, "item-moved",
			  (GCallback) on_mafw_playlist_item_moved, NULL);
}

static void
on_mafw_playlist_item_moved(MafwPlaylist *playlist, guint from, guint to)
{
	/* Handle item movement */
}