static tracker_grl_sparql_t * insert_key_mapping_with_setter (GrlKeyID grl_key, const gchar *sparql_key_attr, const gchar *sparql_key_attr_call, const gchar *sparql_key_flavor, tracker_grl_sparql_setter_cb_t setter) { tracker_grl_sparql_t *assoc; assoc = insert_key_mapping (grl_key, sparql_key_attr, sparql_key_attr_call, sparql_key_flavor); assoc->set_value = setter; return assoc; }
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"); } }
void grl_tracker_setup_key_mappings (void) { GrlRegistry *registry = grl_registry_get_default (); grl_metadata_key_tracker_urn = grl_registry_lookup_metadata_key (registry, "tracker-urn"); grl_metadata_key_gibest_hash = grl_registry_lookup_metadata_key (registry, "gibest-hash"); 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_ALBUM_DISC_NUMBER, NULL, "nmm:setNumber(nmm:musicAlbumDisc(?urn))", "audio"); insert_key_mapping (GRL_METADATA_KEY_ARTIST, NULL, "nmm:artistName(nmm:performer(?urn))", "audio"); insert_key_mapping (GRL_METADATA_KEY_ALBUM_ARTIST, NULL, "nmm:artistName(nmm:albumArtist(nmm:musicAlbum(?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_COMPOSER, NULL, "nmm:artistName(nmm:composer(?urn))", "audio"); 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_with_setter (GRL_METADATA_KEY_LAST_PLAYED, "nfo:fileLastAccessed", "nfo:fileLastAccessed(?urn)", "file", set_date); 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_with_setter (GRL_METADATA_KEY_LAST_PLAYED, "nie:contentAccessed", "nie:contentAccessed(?urn)", "media", set_date); 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"); } insert_key_mapping (GRL_METADATA_KEY_TRACK_NUMBER, "nmm:trackNumber", "nmm:trackNumber(?urn)", "audio"); insert_key_mapping_with_setter (GRL_METADATA_KEY_FAVOURITE, "nao:hasTag", "nao:hasTag(?urn)", "audio", set_favourite); }