[tracker-miners/wip/jfelder/desktop-link: 2/2] tracker-extract-desktop: Add support for Link type
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/wip/jfelder/desktop-link: 2/2] tracker-extract-desktop: Add support for Link type
- Date: Tue, 21 Apr 2020 17:00:27 +0000 (UTC)
commit e978a11804a7101ab9cc94b221f57f6a55b35886
Author: Jean Felder <jfelder src gnome org>
Date: Tue Apr 21 18:52:56 2020 +0200
tracker-extract-desktop: Add support for Link type
This adds support for desktop files that point to web locations. These
files have the "Link" type and must at least have an "URL" key.
A unit test is also added.
src/tracker-extract/tracker-extract-desktop.c | 44 ++++++++++++++++++++++
tests/functional-tests/meson.build | 3 +-
.../desktop/link-wikipedia-tracker.desktop | 4 ++
.../desktop/link-wikipedia-tracker.expected.json | 14 +++++++
4 files changed, 64 insertions(+), 1 deletion(-)
---
diff --git a/src/tracker-extract/tracker-extract-desktop.c b/src/tracker-extract/tracker-extract-desktop.c
index 8af503415..c6cc0bd74 100644
--- a/src/tracker-extract/tracker-extract-desktop.c
+++ b/src/tracker-extract/tracker-extract-desktop.c
@@ -30,6 +30,7 @@
#define SOFTWARE_CATEGORY_URN_PREFIX "urn:software-category:"
#define THEME_ICON_URN_PREFIX "urn:theme-icon:"
+#define WEBSITE_URN_PREFIX "urn:website:"
static GKeyFile *
get_desktop_key_file (GFile *file,
@@ -161,6 +162,49 @@ process_desktop_file (TrackerResource *resource,
if (name && g_ascii_strcasecmp (type, "Application") == 0) {
tracker_resource_add_uri (resource, "rdf:type", "nfo:SoftwareApplication");
is_software = TRUE;
+ } else if (name && g_ascii_strcasecmp (type, "Link") == 0) {
+ gchar *website_url;
+
+ website_url = g_key_file_get_string (key_file, GROUP_DESKTOP_ENTRY, "URL", NULL);
+
+ if (website_url) {
+ TrackerResource *website_resource;
+ gchar *escaped_website_url;
+ gchar *website_uri;
+
+ g_strstrip (website_url);
+ escaped_website_url = g_uri_escape_string (website_url,
+ G_URI_RESERVED_CHARS_ALLOWED_IN_PATH,
+ FALSE);
+ website_uri = g_strdup_printf (WEBSITE_URN_PREFIX "%s", escaped_website_url);
+
+ website_resource = tracker_resource_new (website_uri);
+ tracker_resource_add_uri (website_resource, "rdf:type", "nfo:Website");
+ insert_data_from_desktop_file (website_resource,
+ "nie:url",
+ key_file,
+ "URL",
+ lang);
+ tracker_resource_set_take_relation (resource, "nie:isStoredAs", website_resource);
+
+ g_free (website_url);
+ g_free (escaped_website_url);
+ g_free (website_uri);
+ } else {
+ /* a Link desktop entry must have an URL */
+ gchar *uri;
+
+ uri = g_file_get_uri (file);
+ g_warning ("Link desktop entry '%s' does not have an url", uri);
+
+ g_free (uri);
+ g_free (type);
+ g_key_file_free (key_file);
+ g_strfreev (cats);
+ g_free (lang);
+ g_free (name);
+ return FALSE;
+ }
} else {
/* Invalid type, all valid types are already listed above */
g_warning ("Unknown desktop entry type '%s'", type);
diff --git a/tests/functional-tests/meson.build b/tests/functional-tests/meson.build
index 58e8dcab0..402423eda 100644
--- a/tests/functional-tests/meson.build
+++ b/tests/functional-tests/meson.build
@@ -35,7 +35,8 @@ extractor_tests = [
'audio/mp3-id3v2.3-empty-artist-album',
'audio/mp3-id3v2.4-2',
'audio/flac',
- 'desktop/application'
+ 'desktop/application',
+ 'desktop/link-wikipedia-tracker'
]
if libvorbis.found()
diff --git a/tests/functional-tests/test-extraction-data/desktop/link-wikipedia-tracker.desktop
b/tests/functional-tests/test-extraction-data/desktop/link-wikipedia-tracker.desktop
new file mode 100644
index 000000000..1a7125a8d
--- /dev/null
+++ b/tests/functional-tests/test-extraction-data/desktop/link-wikipedia-tracker.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Link
+Name=Wikipedia Tracker
+URL=https://en.wikipedia.org/wiki/Tracker_(search_software)
diff --git a/tests/functional-tests/test-extraction-data/desktop/link-wikipedia-tracker.expected.json
b/tests/functional-tests/test-extraction-data/desktop/link-wikipedia-tracker.expected.json
new file mode 100644
index 000000000..b4d3456b0
--- /dev/null
+++ b/tests/functional-tests/test-extraction-data/desktop/link-wikipedia-tracker.expected.json
@@ -0,0 +1,14 @@
+{
+ "test": {
+ "Filename": "link-wikipedia-tracker.desktop"
+ },
+ "metadata": {
+ "nie:title" : "Wikipedia Tracker",
+ "nie:isStoredAs": {
+ "@type": [
+ "nfo:Website"
+ ],
+ "nie:url": "https://en.wikipedia.org/wiki/Tracker_(search_software)"
+ }
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]