static GrlKeyID register_metadata_key (GrlRegistry *registry, GrlKeyID bind_key, const char *name, const char *nick, const char *blurb) { GParamSpec *spec; GrlKeyID key; spec = g_param_spec_string (name, nick, blurb, NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); key = grl_registry_register_metadata_key (registry, spec, bind_key, NULL); if (key == GRL_METADATA_KEY_INVALID) { key = grl_registry_lookup_metadata_key (registry, name); if (grl_metadata_key_get_type (key) != G_TYPE_STRING) { key = GRL_METADATA_KEY_INVALID; } } return key; }
static GrlKeyID register_gravatar_key (GrlRegistry *registry, const gchar *name, const gchar *nick, const gchar *blurb) { GParamSpec *spec; GrlKeyID key; spec = g_param_spec_string (name, nick, blurb, NULL, G_PARAM_READWRITE); key = grl_registry_register_metadata_key (registry, spec, NULL); /* If key was not registered, could be that it is already registered. If so, check if type is the expected one, and reuse it */ if (key == GRL_METADATA_KEY_INVALID) { key = grl_registry_lookup_metadata_key (registry, name); if (grl_metadata_key_get_type (key) != G_TYPE_STRING) { key = GRL_METADATA_KEY_INVALID; } } return key; }
static gboolean grl_bookmarks_plugin_init (GrlRegistry *registry, GrlPlugin *plugin, GList *configs) { GParamSpec *spec; GRL_LOG_DOMAIN_INIT (bookmarks_log_domain, "bookmarks"); GRL_DEBUG ("grl_bookmarks_plugin_init"); /* Initialize i18n */ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); spec = g_param_spec_boxed ("bookmark-date", "Bookmark date", "When the media was bookmarked", G_TYPE_DATE_TIME, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_BOOKMARKS_KEY_BOOKMARK_TIME = grl_registry_register_metadata_key (registry, spec, NULL); /* If key was not registered, could be that it is already registered. If so, check if type is the expected one, and reuse it */ if (GRL_BOOKMARKS_KEY_BOOKMARK_TIME == GRL_METADATA_KEY_INVALID) { g_param_spec_unref (spec); GRL_BOOKMARKS_KEY_BOOKMARK_TIME = grl_registry_lookup_metadata_key (registry, "bookmark-date"); if (grl_metadata_key_get_type (GRL_BOOKMARKS_KEY_BOOKMARK_TIME) != G_TYPE_DATE_TIME) { GRL_BOOKMARKS_KEY_BOOKMARK_TIME = GRL_METADATA_KEY_INVALID; } } GrlBookmarksSource *source = grl_bookmarks_source_new (); grl_registry_register_source (registry, plugin, GRL_SOURCE (source), NULL); return TRUE; }
void grl_tracker_setup_key_mappings (void) { GrlRegistry *registry = grl_registry_get_default (); /* Check if "tracker-urn" is registered; if not, then register it */ grl_metadata_key_tracker_urn = grl_registry_lookup_metadata_key (registry, "tracker-urn"); if (grl_metadata_key_tracker_urn == GRL_METADATA_KEY_INVALID) { grl_metadata_key_tracker_urn = grl_registry_register_metadata_key (grl_registry_get_default (), g_param_spec_string ("tracker-urn", "Tracker URN", "Universal resource number in Tracker's store", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), NULL); } /* Check if "gibest-hash" is registered; if not, then register it */ grl_metadata_key_gibest_hash = grl_registry_lookup_metadata_key (registry, "gibest-hash"); if (grl_metadata_key_gibest_hash == GRL_METADATA_KEY_INVALID) { grl_metadata_key_gibest_hash = grl_registry_register_metadata_key (grl_registry_get_default (), g_param_spec_string ("gibest-hash", "Gibest hash", "Gibest hash of the video file", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), NULL); } grl_to_sparql_mapping = g_hash_table_new (g_direct_hash, g_direct_equal); sparql_to_grl_mapping = g_hash_table_new (g_str_hash, g_str_equal); insert_key_mapping (grl_metadata_key_tracker_urn, NULL, "?urn", "file"); insert_key_mapping (GRL_METADATA_KEY_ALBUM, NULL, "nmm:albumTitle(nmm:musicAlbum(?urn))", "audio"); insert_key_mapping (GRL_METADATA_KEY_ARTIST, NULL, "nmm:artistName(nmm:performer(?urn))", "audio"); insert_key_mapping (GRL_METADATA_KEY_AUTHOR, NULL, "nmm:artistName(nmm:performer(?urn))", "audio"); insert_key_mapping (GRL_METADATA_KEY_BITRATE, "nfo:averageBitrate", "nfo:averageBitrate(?urn)", "audio"); insert_key_mapping (GRL_METADATA_KEY_CHILDCOUNT, "nfo:entryCounter", "nfo:entryCounter(?urn)", "directory"); insert_key_mapping (GRL_METADATA_KEY_SIZE, NULL, "nfo:fileSize(?urn)", "file"); insert_key_mapping (grl_metadata_key_gibest_hash, NULL, "(select nfo:hashValue(?h) { ?urn nfo:hasHash ?h . ?h nfo:hashAlgorithm \"gibest\" })", "video"); insert_key_mapping_with_setter (GRL_METADATA_KEY_MODIFICATION_DATE, "nfo:fileLastModified", "nfo:fileLastModified(?urn)", "file", set_date); insert_key_mapping (GRL_METADATA_KEY_DURATION, "nfo:duration", "nfo:duration(?urn)", "audio"); insert_key_mapping (GRL_METADATA_KEY_FRAMERATE, "nfo:frameRate", "nfo:frameRate(?urn)", "video"); insert_key_mapping (GRL_METADATA_KEY_HEIGHT, "nfo:height", "nfo:height(?urn)", "video"); insert_key_mapping (GRL_METADATA_KEY_ID, "tracker:id", "tracker:id(?urn)", "file"); /* insert_key_mapping (GRL_METADATA_KEY_LAST_PLAYED, */ /* "nfo:fileLastAccessed(?urn)", */ /* "file"); */ insert_key_mapping (GRL_METADATA_KEY_MIME, "nie:mimeType", "nie:mimeType(?urn)", "file"); insert_key_mapping (GRL_METADATA_KEY_SITE, "nie:url", "nie:url(?urn)", "file"); insert_key_mapping_with_setter (GRL_METADATA_KEY_TITLE, "nie:title", "nie:title(?urn)", "audio", set_title); insert_key_mapping_with_setter (GRL_METADATA_KEY_TITLE, "nfo:fileName", "nfo:fileName(?urn)", "file", set_title_from_filename); insert_key_mapping (GRL_METADATA_KEY_URL, "nie:url", "nie:url(?urn)", "file"); insert_key_mapping (GRL_METADATA_KEY_WIDTH, "nfo:width", "nfo:width(?urn)", "video"); insert_key_mapping (GRL_METADATA_KEY_SEASON, "nmm:season", "nmm:season(?urn)", "video"); insert_key_mapping (GRL_METADATA_KEY_EPISODE, "nmm:episodeNumber", "nmm:episodeNumber(?urn)", "video"); insert_key_mapping_with_setter (GRL_METADATA_KEY_CREATION_DATE, "nie:contentCreated", "nie:contentCreated(?urn)", "image", set_date); insert_key_mapping (GRL_METADATA_KEY_CAMERA_MODEL, NULL, "nfo:model(nfo:equipment(?urn))", "image"); insert_key_mapping (GRL_METADATA_KEY_FLASH_USED, "nmm:flash", "nmm:flash(?urn)", "image"); insert_key_mapping (GRL_METADATA_KEY_EXPOSURE_TIME, "nmm:exposureTime", "nmm:exposureTime(?urn)", "image"); insert_key_mapping (GRL_METADATA_KEY_ISO_SPEED, "nmm:isoSpeed", "nmm:isoSpeed(?urn)", "image"); insert_key_mapping_with_setter (GRL_METADATA_KEY_ORIENTATION, "nfo:orientation", "nfo:orientation(?urn)", "image", set_orientation); insert_key_mapping (GRL_METADATA_KEY_PLAY_COUNT, "nie:usageCounter", "nie:usageCounter(?urn)", "media"); insert_key_mapping (GRL_METADATA_KEY_LAST_PLAYED, "nie:contentAccessed", "nie:contentAccessed(?urn)", "media"); insert_key_mapping (GRL_METADATA_KEY_LAST_POSITION, "nfo:lastPlayedPosition", "nfo:lastPlayedPosition(?urn)", "media"); insert_key_mapping (GRL_METADATA_KEY_START_TIME, "nfo:audioOffset", "nfo:audioOffset(?urn)", "media"); if (grl_tracker_upnp_present) { insert_key_mapping (GRL_METADATA_KEY_THUMBNAIL, "upnp:thumbnail", "upnp:thumbnail(?urn)", "media"); } }
/* Main program */ gint main (gint argc, gchar **argv) { GError *error = NULL; GOptionContext *context = NULL; gint i; context = g_option_context_new ("- run Grilo plugin as UPnP service"); g_option_context_add_main_entries (context, entries, NULL); g_option_context_add_group (context, grl_init_get_option_group ()); g_option_context_parse (context, &argc, &argv, &error); g_option_context_free (context); if (error) { g_printerr ("Invalid arguments, %s\n", error->message); g_clear_error (&error); return -1; } /* Adjust limits */ limit = CLAMP (limit, 0, G_MAXINT); if (limit == 0) { limit = G_MAXINT; } /* Initialize grilo */ grl_init (&argc, &argv); registry = grl_registry_get_default (); if (!registry) { g_printerr ("Unable to load Grilo registry\n"); return -1; } /* Register a key to store parent */ GRL_METADATA_KEY_GRILO_MS2_PARENT = grl_registry_register_metadata_key (registry, g_param_spec_string ("grilo-mediaserver2-parent", "GriloMediaServer2Parent", "Object path to parent container", NULL, G_PARAM_READWRITE), GRL_METADATA_KEY_INVALID, NULL); if (GRL_METADATA_KEY_GRILO_MS2_PARENT == GRL_METADATA_KEY_INVALID) { g_error ("Unable to register Parent key"); return 1; } /* Load configuration */ load_config (); /* Initialize <grilo-plugin, ms2-server> pairs */ servers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); g_signal_connect (registry, "source-added", G_CALLBACK (source_added_cb), NULL); g_signal_connect (registry, "source-removed", G_CALLBACK (source_removed_cb), NULL); if (!args || !args[0]) { grl_registry_load_all_plugins (registry, TRUE, NULL); } else { for (i = 0; args[i]; i++) { grl_registry_load_plugin (registry, args[i], NULL); } } g_main_loop_run (g_main_loop_new (NULL, FALSE)); }