summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-05-23 19:34:37 +0200
committerJean Felder <jean.felder@gmail.com>2020-08-21 15:05:10 +0000
commite3eaa4ec1fbb9f677ce26cbd00e7d2d0ff14c87a (patch)
tree0fd46e84b3be8d7990a82d11045c535237a08db0
parent4f2467b7e07b686bb73af0756e48234d6613eec3 (diff)
downloadgrilo-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.c144
-rw-r--r--src/tracker3/grl-tracker-utils.h3
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);