[grilo-plugins] grl-tracker-source-api: Add more keys to writable keys list
- From: Victor Toso <victortoso src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins] grl-tracker-source-api: Add more keys to writable keys list
- Date: Wed, 11 Sep 2019 14:57:33 +0000 (UTC)
commit 7fa5126eace8d9931643f21df6b8fd6e936f8236
Author: Sumaid Syed <sumaidsyed gmail com>
Date: Wed Jul 17 15:23:44 2019 +0530
grl-tracker-source-api: Add more keys to writable keys list
Add Recording and Track MusicBrainz IDs, chromaprint key and basic
tags like title, creation date and track number.
GRL_METADATA_KEY_TITLE is a special case. Indeed, it can be retrieved
from two different properties: nfo:fileName and
nie:title (nfo:fileName is used to guess the title from the filename
if nie:title is not set). But, only nie:title can be modified. So, a
check is added to prevent changing nfo:fileName.
https://gitlab.gnome.org/GNOME/gnome-music/issues/293
src/tracker/grl-tracker-source-api.c | 12 ++++++++++++
src/tracker/grl-tracker-utils.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)
---
diff --git a/src/tracker/grl-tracker-source-api.c b/src/tracker/grl-tracker-source-api.c
index 0bd8147c..382165e9 100644
--- a/src/tracker/grl-tracker-source-api.c
+++ b/src/tracker/grl-tracker-source-api.c
@@ -657,11 +657,23 @@ const GList *
grl_tracker_source_writable_keys (GrlSource *source)
{
static GList *keys = NULL;
+ GrlRegistry *registry;
+ GrlKeyID grl_metadata_key_chromaprint;
+
if (!keys) {
+ registry = grl_registry_get_default ();
+ grl_metadata_key_chromaprint = grl_registry_lookup_metadata_key (registry, "chromaprint");
+
keys = grl_metadata_key_list_new (GRL_METADATA_KEY_PLAY_COUNT,
GRL_METADATA_KEY_LAST_PLAYED,
GRL_METADATA_KEY_LAST_POSITION,
GRL_METADATA_KEY_FAVOURITE,
+ GRL_METADATA_KEY_MB_TRACK_ID,
+ GRL_METADATA_KEY_MB_RECORDING_ID,
+ GRL_METADATA_KEY_TITLE,
+ GRL_METADATA_KEY_TRACK_NUMBER,
+ GRL_METADATA_KEY_CREATION_DATE,
+ grl_metadata_key_chromaprint,
NULL);
}
return keys;
diff --git a/src/tracker/grl-tracker-utils.c b/src/tracker/grl-tracker-utils.c
index 74b790dc..70341a9e 100644
--- a/src/tracker/grl-tracker-utils.c
+++ b/src/tracker/grl-tracker-utils.c
@@ -220,6 +220,7 @@ void
grl_tracker_setup_key_mappings (void)
{
GrlRegistry *registry = grl_registry_get_default ();
+ GrlKeyID grl_metadata_key_chromaprint;
grl_metadata_key_tracker_urn =
grl_registry_lookup_metadata_key (registry, "tracker-urn");
@@ -227,6 +228,9 @@ grl_tracker_setup_key_mappings (void)
grl_metadata_key_gibest_hash =
grl_registry_lookup_metadata_key (registry, "gibest-hash");
+ grl_metadata_key_chromaprint =
+ grl_registry_lookup_metadata_key (registry, "chromaprint");
+
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);
@@ -323,6 +327,12 @@ grl_tracker_setup_key_mappings (void)
"nmm:mbReleaseGroupID(?urn)",
"audio");
+ insert_key_mapping_with_setter (grl_metadata_key_chromaprint,
+ NULL,
+ "(select nfo:hashValue(?h) { ?urn nfo:hasHash ?h . ?h nfo:hashAlgorithm
\"chromaprint\" })",
+ "audio",
+ set_string_metadata_keys);
+
insert_key_mapping (GRL_METADATA_KEY_FRAMERATE,
"nfo:frameRate",
"nfo:frameRate(?urn)",
@@ -606,6 +616,14 @@ grl_tracker_tracker_get_insert_string (GrlMedia *media, const GList *keys)
if (!grl_data_has_key (GRL_DATA (media), key_id))
continue;
+ /* Special case for key title, nfo:fileName is read-only.
+ * It cannot be modified.
+ */
+ if (assoc->grl_key == GRL_METADATA_KEY_TITLE &&
+ g_strcmp0 (assoc->sparql_key_attr, "nfo:fileName") == 0) {
+ continue;
+ }
+
if (!first)
g_string_append (gstr, " ; ");
@@ -632,6 +650,15 @@ grl_tracker_get_delete_string (const GList *keys)
while (assoc_list != NULL) {
assoc = (tracker_grl_sparql_t *) assoc_list->data;
if (assoc != NULL) {
+ /* Special case for key title, nfo:fileName is read-only.
+ * It cannot be modified.
+ */
+ if (assoc->grl_key == GRL_METADATA_KEY_TITLE &&
+ g_strcmp0 (assoc->sparql_key_attr, "nfo:fileName") == 0) {
+ assoc_list = assoc_list->next;
+ continue;
+ }
+
if (first) {
g_string_append_printf (gstr, "%s ?v%i",
assoc->sparql_key_attr, var_n);
@@ -669,6 +696,15 @@ grl_tracker_get_delete_conditional_string (const gchar *urn,
while (assoc_list != NULL) {
assoc = (tracker_grl_sparql_t *) assoc_list->data;
if (assoc != NULL) {
+ /* Special case for key title, nfo:fileName is read-only.
+ * It cannot be modified.
+ */
+ if (assoc->grl_key == GRL_METADATA_KEY_TITLE &&
+ g_strcmp0 (assoc->sparql_key_attr, "nfo:fileName") == 0) {
+ assoc_list = assoc_list->next;
+ continue;
+ }
+
if (first) {
g_string_append_printf (gstr, "OPTIONAL { <%s> %s ?v%i }",
urn, assoc->sparql_key_attr, var_n);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]