|  |  |  | MAFW Manual |  | 
|---|
Another important use case of a source is to provide metadata about particular media. This can be achieved using mafw_source_get_metadata like this:
static void
metadata_cb(MafwSource *source,
            const gchar *objectid,
            GHashTable *metadata,
            gpointer user_data,
            const GError *error)
{
        if (error != NULL) {
                g_print("Error %d: %s\n", error->code, error->message);
        } else {
                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(" Title: %s\n", title);
                g_print("Artist: %s\n", artist);
                g_print(" Album: %s\n", album);
                g_print("  Mime: %s\n", mime);
        }
}
static void
metadata_example (MafwSource *source, gchar *objectid)
{
        const gchar *const *keys;
        keys = MAFW_SOURCE_LIST(
                MAFW_METADATA_KEY_MIME,
                MAFW_METADATA_KEY_ARTIST,
                MAFW_METADATA_KEY_ALBUM,
                MAFW_METADATA_KEY_TITLE);
        mafw_source_get_metadata(
                source,       /* The source object */
                objectid,     /* The media resource we want metadata from */
                keys,         /* The metadata we are interested in */
                metadata_cb,  /* Callback */
                NULL);        /* User data for Callback */
}
The example queries metadata for a particular object ID (which should be valid for the source being queried, returned by a previous browse operation). The parameters passed to mafw_source_get_metadata are:
Source, the MafwSource to be queried.
Object ID, the object ID to get metadata from.
Keys, metadata information we are interested in.
Callback, the callback used to get the results.
User data, the user data for the callback.
The result of the metadata operation is returned using the callback provided. The parameters passed to the callback function are:
Source, the MafwSource that produced the result.
Object ID, the object ID the metadata comes from.
Metadata, the metadata values.
User data, the user data for the callback.
Error, a GError that, if set, informs of an
error in the metadata retrieval operation.
This callback should be called only once.