diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2020-05-23 19:34:37 +0200 |
---|---|---|
committer | Jean Felder <jean.felder@gmail.com> | 2020-08-21 15:05:10 +0000 |
commit | e3eaa4ec1fbb9f677ce26cbd00e7d2d0ff14c87a (patch) | |
tree | 0fd46e84b3be8d7990a82d11045c535237a08db0 | |
parent | 4f2467b7e07b686bb73af0756e48234d6613eec3 (diff) | |
download | grilo-plugins-e3eaa4ec1fbb9f677ce26cbd00e7d2d0ff14c87a.tar.gz |
tracker3: Add a getter for the property path/subselect for a metadata key
We match by GrlTypeFilter, so it's easy to discard those that don't apply.
-rw-r--r-- | src/tracker3/grl-tracker-utils.c | 144 | ||||
-rw-r--r-- | src/tracker3/grl-tracker-utils.h | 3 |
2 files changed, 108 insertions, 39 deletions
diff --git a/src/tracker3/grl-tracker-utils.c b/src/tracker3/grl-tracker-utils.c index 74ccc62..6bd8606 100644 --- a/src/tracker3/grl-tracker-utils.c +++ b/src/tracker3/grl-tracker-utils.c @@ -152,11 +152,12 @@ set_int_metadata_keys (TrackerSparqlCursor *cursor, } static tracker_grl_sparql_t * -insert_key_mapping (GrlKeyID grl_key, - const gchar *sparql_var_name, - const gchar *sparql_key_attr, - const gchar *sparql_key_attr_call, - const gchar *sparql_key_flavor) +insert_key_mapping (GrlKeyID grl_key, + const gchar *sparql_var_name, + const gchar *sparql_key_attr, + const gchar *sparql_key_attr_call, + const gchar *sparql_key_flavor, + GrlTypeFilter filter) { tracker_grl_sparql_t *assoc; GList *assoc_list; @@ -177,6 +178,7 @@ insert_key_mapping (GrlKeyID grl_key, assoc->sparql_key_attr = sparql_key_attr; assoc->sparql_key_attr_call = sparql_key_attr_call; assoc->sparql_key_flavor = sparql_key_flavor; + assoc->filter = filter; assoc_list = g_list_append (assoc_list, assoc); @@ -211,6 +213,7 @@ insert_key_mapping_with_setter (GrlKeyID grl_key, const gchar *sparql_key_attr, const gchar *sparql_key_attr_call, const gchar *sparql_key_flavor, + GrlTypeFilter filter, tracker_grl_sparql_setter_cb_t setter) { tracker_grl_sparql_t *assoc; @@ -219,7 +222,8 @@ insert_key_mapping_with_setter (GrlKeyID grl_key, sparql_var_name, sparql_key_attr, sparql_key_attr_call, - sparql_key_flavor); + sparql_key_flavor, + filter); assoc->set_value = setter; @@ -248,110 +252,128 @@ grl_tracker_setup_key_mappings (void) "urn", NULL, "?urn", - "file"); + "file", + GRL_TYPE_FILTER_ALL); insert_key_mapping (GRL_METADATA_KEY_ALBUM, "album", NULL, "nie:title(nmm:musicAlbum(?urn))", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_ALBUM_DISC_NUMBER, "albumDiscNumber", NULL, "nmm:setNumber(nmm:musicAlbumDisc(?urn))", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_ARTIST, "artist", NULL, "nmm:artistName(nmm:performer(?urn))", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_ALBUM_ARTIST, "albumArtist", NULL, "nmm:artistName(nmm:albumArtist(nmm:musicAlbum(?urn)))", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_AUTHOR, "author", NULL, "nmm:artistName(nmm:performer(?urn))", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_BITRATE, "bitrate", "nfo:averageBitrate", "nfo:averageBitrate(?urn)", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO | GRL_TYPE_FILTER_VIDEO); insert_key_mapping (GRL_METADATA_KEY_CHILDCOUNT, "childCount", "nfo:entryCounter", "nfo:entryCounter(?urn)", - "directory"); + "directory", + GRL_TYPE_FILTER_ALL); insert_key_mapping (GRL_METADATA_KEY_COMPOSER, "composer", NULL, "nmm:artistName(nmm:composer(?urn))", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_SIZE, "size", NULL, "nfo:fileSize(?urn)", - "file"); + "file", + GRL_TYPE_FILTER_ALL); insert_key_mapping (grl_metadata_key_gibest_hash, "gibestHash", NULL, "(select nfo:hashValue(?h) { ?urn nfo:hasHash ?h . ?h nfo:hashAlgorithm \"gibest\" })", - "video"); + "video", + GRL_TYPE_FILTER_VIDEO); insert_key_mapping_with_setter (GRL_METADATA_KEY_MODIFICATION_DATE, "lastModified", "nfo:fileLastModified", "nfo:fileLastModified(?urn)", "file", + GRL_TYPE_FILTER_ALL, set_date); insert_key_mapping (GRL_METADATA_KEY_DURATION, "duration", "nfo:duration", "nfo:duration(?urn)", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO | GRL_TYPE_FILTER_VIDEO); insert_key_mapping (GRL_METADATA_KEY_MB_TRACK_ID, "mbTrack", NULL, "(SELECT tracker:referenceIdentifier(?t) AS ?t_id { ?urn tracker:hasExternalReference ?t . ?t tracker:referenceSource \"https://musicbrainz.org/doc/Track\" })", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_MB_ARTIST_ID, "mbArtist", NULL, "(SELECT tracker:referenceIdentifier(?a) AS ?a_id { ?urn nmm:performer ?artist . ?artist tracker:hasExternalReference ?a . ?a tracker:referenceSource \"https://musicbrainz.org/doc/Artist\" })", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_MB_RECORDING_ID, "mbRecording", NULL, "(SELECT tracker:referenceIdentifier(?r) AS ?r_id { ?urn tracker:hasExternalReference ?r . ?r tracker:referenceSource \"https://musicbrainz.org/doc/Recording\" })", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_MB_RELEASE_ID, "mbRelease", NULL, "(SELECT tracker:referenceIdentifier(?re) AS ?re_id { ?urn nmm:musicAlbum ?album . ?album tracker:hasExternalReference ?re . ?re tracker:referenceSource \"https://musicbrainz.org/doc/Release\" })", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping (GRL_METADATA_KEY_MB_RELEASE_GROUP_ID, "mbReleaseGroup", NULL, "(SELECT tracker:referenceIdentifier(?rg) AS ?rg_id { ?urn nmm:musicAlbum ?album . ?album tracker:hasExternalReference ?rg . ?rg tracker:referenceSource \"https://musicbrainz.org/doc/Release_Group\" })", - "audio"); + "audio", + GRL_TYPE_FILTER_AUDIO); if (grl_metadata_key_chromaprint != 0) { insert_key_mapping_with_setter (grl_metadata_key_chromaprint, @@ -359,6 +381,7 @@ grl_tracker_setup_key_mappings (void) NULL, "(select nfo:hashValue(?h) { ?urn nfo:hasHash ?h . ?h nfo:hashAlgorithm \"chromaprint\" })", "audio", + GRL_TYPE_FILTER_AUDIO, set_string_metadata_keys); }; @@ -366,44 +389,51 @@ grl_tracker_setup_key_mappings (void) "frameRate", "nfo:frameRate", "nfo:frameRate(?urn)", - "video"); + "video", + GRL_TYPE_FILTER_VIDEO); insert_key_mapping (GRL_METADATA_KEY_HEIGHT, "height", "nfo:height", "nfo:height(?urn)", - "video"); + "video", + GRL_TYPE_FILTER_VIDEO | GRL_TYPE_FILTER_IMAGE); insert_key_mapping (GRL_METADATA_KEY_ID, "id", "tracker:id", "tracker:id(?urn)", - "file"); + "file", + GRL_TYPE_FILTER_ALL); insert_key_mapping_with_setter (GRL_METADATA_KEY_LAST_PLAYED, "fileLastAccessed", "nfo:fileLastAccessed", "nfo:fileLastAccessed(?urn)", "file", + GRL_TYPE_FILTER_ALL, set_date); insert_key_mapping (GRL_METADATA_KEY_MIME, "mimeType", "nie:mimeType", "nie:mimeType(?urn)", - "file"); + "file", + GRL_TYPE_FILTER_ALL); insert_key_mapping (GRL_METADATA_KEY_SITE, "siteUrl", "nie:url", "nie:url(?urn)", - "file"); + "file", + GRL_TYPE_FILTER_ALL); insert_key_mapping_with_setter (GRL_METADATA_KEY_TITLE, "title", "nie:title", "nie:title(?urn)", "audio", + GRL_TYPE_FILTER_ALL, set_title); insert_key_mapping_with_setter (GRL_METADATA_KEY_TITLE, @@ -411,100 +441,116 @@ grl_tracker_setup_key_mappings (void) "nfo:fileName", "nfo:fileName(?urn)", "file", + GRL_TYPE_FILTER_ALL, set_title_from_filename); insert_key_mapping (GRL_METADATA_KEY_URL, "url", "nie:url", "nie:url(?urn)", - "file"); + "file", + GRL_TYPE_FILTER_ALL); insert_key_mapping (GRL_METADATA_KEY_WIDTH, "width", "nfo:width", "nfo:width(?urn)", - "video"); + "video", + GRL_TYPE_FILTER_VIDEO | GRL_TYPE_FILTER_IMAGE); insert_key_mapping (GRL_METADATA_KEY_SEASON, "season", NULL, "nmm:seasonNumber(nmm:isPartOfSeason(?urn))", - "video"); + "video", + GRL_TYPE_FILTER_VIDEO); insert_key_mapping (GRL_METADATA_KEY_EPISODE, "episode", "nmm:episodeNumber", "nmm:episodeNumber(?urn)", - "video"); + "video", + GRL_TYPE_FILTER_VIDEO); insert_key_mapping_with_setter (GRL_METADATA_KEY_CREATION_DATE, "creationDate", "nie:contentCreated", "nie:contentCreated(?urn)", "image", + GRL_TYPE_FILTER_ALL, set_date); insert_key_mapping (GRL_METADATA_KEY_CAMERA_MODEL, "cameraModel", NULL, "nfo:model(nfo:equipment(?urn))", - "image"); + "image", + GRL_TYPE_FILTER_IMAGE); insert_key_mapping (GRL_METADATA_KEY_FLASH_USED, "flashUsed", "nmm:flash", "nmm:flash(?urn)", - "image"); + "image", + GRL_TYPE_FILTER_IMAGE); insert_key_mapping (GRL_METADATA_KEY_EXPOSURE_TIME, "exposureTime", "nmm:exposureTime", "nmm:exposureTime(?urn)", - "image"); + "image", + GRL_TYPE_FILTER_IMAGE); insert_key_mapping (GRL_METADATA_KEY_ISO_SPEED, "isoSpeed", "nmm:isoSpeed", "nmm:isoSpeed(?urn)", - "image"); + "image", + GRL_TYPE_FILTER_IMAGE); insert_key_mapping_with_setter (GRL_METADATA_KEY_ORIENTATION, "orientation", "nfo:orientation", "nfo:orientation(?urn)", "image", + GRL_TYPE_FILTER_IMAGE, set_orientation); insert_key_mapping (GRL_METADATA_KEY_PLAY_COUNT, "playCount", "nie:usageCounter", "nie:usageCounter(?urn)", - "media"); + "media", + GRL_TYPE_FILTER_AUDIO | GRL_TYPE_FILTER_VIDEO); insert_key_mapping_with_setter (GRL_METADATA_KEY_LAST_PLAYED, "lastPlayed", "nie:contentAccessed", "nie:contentAccessed(?urn)", "media", + GRL_TYPE_FILTER_ALL, set_date); insert_key_mapping (GRL_METADATA_KEY_LAST_POSITION, "lastPlayPosition", "nfo:lastPlayedPosition", "nfo:lastPlayedPosition(?urn)", - "media"); + "media", + GRL_TYPE_FILTER_AUDIO | GRL_TYPE_FILTER_VIDEO); insert_key_mapping (GRL_METADATA_KEY_START_TIME, "startTime", "nfo:audioOffset", "nfo:audioOffset(?urn)", - "media"); + "media", + GRL_TYPE_FILTER_AUDIO); insert_key_mapping_with_setter (GRL_METADATA_KEY_TRACK_NUMBER, "trackNumber", "nmm:trackNumber", "nmm:trackNumber(?urn)", "audio", + GRL_TYPE_FILTER_AUDIO, set_int_metadata_keys); insert_key_mapping_with_setter (GRL_METADATA_KEY_FAVOURITE, @@ -512,6 +558,7 @@ grl_tracker_setup_key_mappings (void) "nao:hasTag", "nao:hasTag(?urn)", "audio", + GRL_TYPE_FILTER_ALL, set_favourite); } @@ -862,3 +909,22 @@ grl_tracker_key_get_variable_name (const GrlKeyID key) return assoc->sparql_var_name; } + +const gchar * +grl_tracker_key_get_sparql_statement (const GrlKeyID key, + GrlTypeFilter filter) +{ + tracker_grl_sparql_t *assoc; + GList *assoc_list; + + assoc_list = g_hash_table_lookup (grl_to_sparql_mapping, + GRLKEYID_TO_POINTER (key)); + if (!assoc_list) + return NULL; + + assoc = assoc_list->data; + if ((assoc->filter & filter) == 0) + return NULL; + + return assoc->sparql_key_attr_call; +} diff --git a/src/tracker3/grl-tracker-utils.h b/src/tracker3/grl-tracker-utils.h index 35e615c..7db2333 100644 --- a/src/tracker3/grl-tracker-utils.h +++ b/src/tracker3/grl-tracker-utils.h @@ -59,6 +59,7 @@ typedef struct { const gchar *sparql_key_attr; const gchar *sparql_key_attr_call; const gchar *sparql_key_flavor; + GrlTypeFilter filter; tracker_grl_sparql_setter_cb_t set_value; } tracker_grl_sparql_t; @@ -70,6 +71,8 @@ const GList *grl_tracker_supported_keys (GrlSource *source); gboolean grl_tracker_key_is_supported (const GrlKeyID key); const gchar * grl_tracker_key_get_variable_name (const GrlKeyID key); +const gchar * grl_tracker_key_get_sparql_statement (const GrlKeyID key, + GrlTypeFilter filter); void grl_tracker_setup_key_mappings (void); |