Browsing the contents of a source

The major use case of a source is browsing. Developers can explore the contents of a particular container exposed by the source using the method mafw_source_browse and the object identifier of the container. Here is an example that browses contents from the root container of a certain source:


static void
browse_cb(MafwSource *source, 
          guint browseid, 
          gint remaining,
          guint index, 
          const gchar *objectid, 
          GHashTable *metadata,
          gpointer user_data, 
          const GError *error)
{
        if (error != NULL) {
                g_print("Borwse error %d: %s\n", error->code, error->message);
        } else if (objectid != NULL) {
                gchar *title, *artist, *album, *mime;

                if (metadata) {
                        GValue *v;
                        v = mafw_metadata_first(metadata, 
                                                MAFW_METADATA_KEY_TITLE);
                        title = v ? g_value_get_string(v) : "Unknown";
                        v = mafw_metadata_first(metadata, 
                                                MAFW_METADATA_KEY_ARTIST);
                        artist = v ? g_value_get_string(v) : "Unknown";
                        v = mafw_metadata_first(metadata, 
                                                MAFW_METADATA_KEY_ALBUM);
                        album = v ? g_value_get_string(v) : "Unknown";
                        v = mafw_metadata_first(metadata, 
                                                MAFW_METADATA_KEY_MIME);
                        mime = v ? g_value_get_string(v) : "Unknown";
                } else {
                        title = "Unknown";
                        artist = "Unknown";
                        album = "Unknown";
                        mime = "Unknown";
                }

                g_print("Got object ID: %s\n", objectid);
                g_print("        Index: %u\n", index);
                g_print("        Title: %s\n", title);
                g_print("       Artist: %s\n", artist);
                g_print("        Album: %s\n", album);
                g_print("         Mime: %s\n", mime);
        } else {
                g_print("The query %d did not return any results\n", browseid);
        }
}

static void
browse_example (MafwSource *source, gchar *objectid)
{
        const gchar *const *keys;
        guint browseid;

        keys = MAFW_SOURCE_LIST(
                MAFW_METADATA_KEY_MIME,
                MAFW_METADATA_KEY_ARTIST,
                MAFW_METADATA_KEY_ALBUM,
                MAFW_METADATA_KEY_TITLE);

        browseid =
                mafw_source_browse(
                   source,            /* The source object */
                   objectid,          /* The object ID to browse */
                   FALSE,             /* Do recursive browse? */
                   NULL,              /* Filter */
                   NULL,              /* Sort criteria */
                   keys,              /* Metadata to retrieve */
                   0, 20,             /* Offset and count */
                   browse_cb,         /* Callback */
                   NULL);             /* Callback user data */
}

The example above browses the contents of a given objectid in particular source. The meaning of the parameters are:

For more details, please check the Mafw API reference.

The mafw_source_browse function returns a browse identifier that can be used to match browse results with the corresponding browse operations.

The results of the browse call are returned by means of the provided callback. This callback is invoked each time a matching result is found by the source. Each time the callback is called it informs about:

Also, in case that no results match the browse operation, the callback is invoked once, with the object ID parameter set to NULL.