[tracker-miners/wip/jfelder/tracker-extract-musicbrainz-external-resources: 2/2] extract-mp3: Use ExtractReference to store musicbrainz tags
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/wip/jfelder/tracker-extract-musicbrainz-external-resources: 2/2] extract-mp3: Use ExtractReference to store musicbrainz tags
- Date: Mon, 15 Jul 2019 19:28:14 +0000 (UTC)
commit 90b4f053908b5a31c9ff9318bffc46bb72fdb2ac
Author: Jean Felder <jean felder estimages com>
Date: Mon Jul 15 17:40:30 2019 +0200
extract-mp3: Use ExtractReference to store musicbrainz tags
Store MusicBrainz IDs as ExternalResources instead of a list of
properties. This approach is more generic.
Extraction of MusicBrainz IDs is done based on tags used by Picard.
Tags Mapping: https://picard.musicbrainz.org/docs/mappings/
src/libtracker-extract/tracker-resource-helpers.c | 29 ++++++++++++++++
src/libtracker-extract/tracker-resource-helpers.h | 1 +
src/tracker-extract/tracker-extract-mp3.c | 40 ++++++++++++++++++----
.../audio/audio-test-1.expected.json | 34 +++++++++++++++---
.../audio/audio-test-2.expected.json | 34 +++++++++++++++---
5 files changed, 122 insertions(+), 16 deletions(-)
---
diff --git a/src/libtracker-extract/tracker-resource-helpers.c
b/src/libtracker-extract/tracker-resource-helpers.c
index bc80a4942..58a44beb6 100644
--- a/src/libtracker-extract/tracker-resource-helpers.c
+++ b/src/libtracker-extract/tracker-resource-helpers.c
@@ -140,6 +140,35 @@ tracker_extract_new_equipment (const char *make,
return equipment;
}
+/**
+ * tracker_extract_new_external_resource:
+ * @source: the source of the external reference
+ * @identifier: the identifier of the external reference
+ *
+ * Create a new tracker:ExternalReference resource and set its source and its
+ * identifier. Both @source and @identifer must be non-%NULL.
+ *
+ * Returns: a newly allocated #TrackerResource instance, of type tracker:ExternalReference
+ *
+ * Since: 2.3.0
+ */
+TrackerResource *
+tracker_extract_new_external_resource (const char *source,
+ const char *identifier)
+{
+ TrackerResource *external_resource;
+
+ g_return_val_if_fail (source != NULL && identifier != NULL, NULL);
+
+ external_resource = tracker_resource_new (NULL);
+ tracker_resource_set_uri (external_resource, "rdf:type", "tracker:ExternalReference");
+
+ tracker_resource_set_string (external_resource, "tracker:referenceSource", source);
+ tracker_resource_set_string (external_resource, "tracker:referenceIdentifier", identifier);
+
+ return external_resource;
+}
+
/**
* tracker_extract_new_location:
* @street_address: (allow none): main part of postal address, or %NULL
diff --git a/src/libtracker-extract/tracker-resource-helpers.h
b/src/libtracker-extract/tracker-resource-helpers.h
index dc5b0dc33..7b0ba65d3 100644
--- a/src/libtracker-extract/tracker-resource-helpers.h
+++ b/src/libtracker-extract/tracker-resource-helpers.h
@@ -32,6 +32,7 @@ G_BEGIN_DECLS
TrackerResource *tracker_extract_new_artist (const char *name);
TrackerResource *tracker_extract_new_contact (const char *fullname);
TrackerResource *tracker_extract_new_equipment (const char *make, const char *model);
+TrackerResource *tracker_extract_new_external_resource (const char *source, const char *identifier);
TrackerResource *tracker_extract_new_location (const char *address, const char *state, const char *city,
const char *country, const char *gps_altitude, const char *gps_latitude, const char *gps_longitude);
TrackerResource *tracker_extract_new_music_album_disc (const char *album_title, TrackerResource
*album_artist, int disc_number, const char *date);
TrackerResource *tracker_extract_new_tag (const char *label);
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index 98a29e119..770a34d42 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -2729,12 +2729,24 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
tracker_resource_set_relation (main_resource, "nmm:musicAlbumDisc", album_disc);
if (md.mb_release_id) {
- tracker_resource_set_string (md.album, "nmm:mbReleaseID", md.mb_release_id);
+ TrackerResource *mb_release_id = tracker_extract_new_external_resource("MusicBrainz
Release Id",
+
md.mb_release_id);
+
+ tracker_resource_set_relation (md.album, "nfo:hasExternalReference", mb_release_id);
+ g_object_unref (mb_release_id);
+
}
if (md.mb_release_group_id) {
- tracker_resource_set_string (md.album, "nmm:mbReleaseGroupID",
- md.mb_release_group_id);
+ TrackerResource *mb_release_group_id =
tracker_extract_new_external_resource("MusicBrainz Release Group Id",
+
md.mb_release_group_id);
+
+ if (md.mb_release_id) {
+ tracker_resource_add_relation (md.album, "nfo:hasExternalReference",
mb_release_group_id);
+ } else
+ tracker_resource_set_relation (md.album, "nfo:hasExternalReference",
mb_release_group_id);
+
+ g_object_unref (mb_release_group_id);
}
if (md.track_count > 0) {
@@ -2762,7 +2774,10 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
if (md.performer) {
tracker_resource_set_relation (main_resource, "nmm:performer", md.performer);
if (md.mb_artist_id) {
- tracker_resource_set_string (md.performer, "nmm:mbArtistID", md.mb_artist_id);
+ TrackerResource *mb_artist_id = tracker_extract_new_external_resource("MusicBrainz
Artist Id", md.mb_artist_id);
+
+ tracker_resource_set_relation (md.performer, "nfo:hasExternalReference",
mb_artist_id);
+ g_object_unref (mb_artist_id);
}
}
@@ -2806,11 +2821,24 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
}
if (md.mb_recording_id) {
- tracker_resource_set_string (main_resource, "nmm:mbRecordingID", md.mb_recording_id);
+ TrackerResource *mb_recording_id = tracker_extract_new_external_resource("MusicBrainz
Recording Id",
+
md.mb_recording_id);
+
+ tracker_resource_set_relation (main_resource, "nfo:hasExternalReference",
mb_recording_id);
+ g_object_unref (mb_recording_id);
}
if (md.mb_track_id) {
- tracker_resource_set_string (main_resource, "nmm:mbTrackID", md.mb_track_id);
+ TrackerResource *mb_track_id = tracker_extract_new_external_resource("MusicBrainz
Track Id",
+ md.mb_track_id);
+
+ if (md.mb_recording_id) {
+ tracker_resource_add_relation (main_resource, "nfo:hasExternalReference",
mb_track_id);
+ } else {
+ tracker_resource_set_relation (main_resource, "nfo:hasExternalReference",
mb_track_id);
+ }
+
+ g_object_unref (mb_track_id);
}
if (md.acoustid_fingerprint) {
diff --git a/tests/functional-tests/test-extraction-data/audio/audio-test-1.expected.json
b/tests/functional-tests/test-extraction-data/audio/audio-test-1.expected.json
index a1e72a2b8..a73b0bdac 100644
--- a/tests/functional-tests/test-extraction-data/audio/audio-test-1.expected.json
+++ b/tests/functional-tests/test-extraction-data/audio/audio-test-1.expected.json
@@ -16,19 +16,43 @@
"nfo:duration": "15",
"nfo:sampleRate": "22050",
"nfo:averageBitrate": "32000",
- "nmm:mbTrackID": "123456",
- "nmm:mbRecordingID": "456123",
"nmm:performer": {
"@type": "nmm:Artist",
"nmm:artistName": "AbBaby",
- "nmm:mbArtistID": "234561"
+ "nfo:hasExternalReference": {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Artist Id",
+ "tracker:referenceIdentifier": "234561"
+ }
},
"nmm:musicAlbum": {
"@type": "nmm:MusicAlbum",
"nie:title": "SinCos",
- "nmm:mbReleaseGroupID": "561234",
- "nmm:mbReleaseID": "345612"
+ "nfo:hasExternalReference": [
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Release Id",
+ "tracker:referenceIdentifier": "345612"
+ },
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Release Group Id",
+ "tracker:referenceIdentifier": "561234"
+ }
+ ]
},
+ "nfo:hasExternalReference": [
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Recording Id",
+ "tracker:referenceIdentifier": "456123"
+ },
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Track Id",
+ "tracker:referenceIdentifier": "123456"
+ }
+ ],
"nfo:hasHash": {
"@type": "nfo:hasHash",
"nfo:hashAlgorithm": "chromaprint",
diff --git a/tests/functional-tests/test-extraction-data/audio/audio-test-2.expected.json
b/tests/functional-tests/test-extraction-data/audio/audio-test-2.expected.json
index d4dd0089e..c9fd3c5bd 100644
--- a/tests/functional-tests/test-extraction-data/audio/audio-test-2.expected.json
+++ b/tests/functional-tests/test-extraction-data/audio/audio-test-2.expected.json
@@ -14,18 +14,42 @@
"nfo:channels": "2",
"nfo:sampleRate": "44100",
"nfo:averageBitrate": "256000",
- "nmm:mbTrackID": "123456",
- "nmm:mbRecordingID": "456123",
"nmm:performer": {
"@type": "nmm:Artist",
"nmm:artistName": "Anna Abreu",
- "nmm:mbArtistID": "234561"
+ "nfo:hasExternalReference": {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Artist Id",
+ "tracker:referenceIdentifier": "234561"
+ }
},
"nmm:musicAlbum": {
"@type": "nmm:MusicAlbum",
- "nmm:mbReleaseGroupID": "561234",
- "nmm:mbReleaseID": "345612"
+ "nfo:hasExternalReference": [
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Release Id",
+ "tracker:referenceIdentifier": "345612"
+ },
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Release Group Id",
+ "tracker:referenceIdentifier": "561234"
+ }
+ ]
},
+ "nfo:hasExternalReference": [
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Recording Id",
+ "tracker:referenceIdentifier": "456123"
+ },
+ {
+ "@type": "tracker:ExternalReference",
+ "tracker:referenceSource": "MusicBrainz Track Id",
+ "tracker:referenceIdentifier": "123456"
+ }
+ ],
"nfo:hasHash": {
"@type": "nfo:hasHash",
"nfo:hashAlgorithm": "chromaprint",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]