[tracker-miners/wip/carlosg/split-dataobject-informationelement] tracker-extract: Drop specific XMP module



commit 94a72cf73edabfe3841a42a5abc18269605581c0
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Apr 30 12:48:30 2020 +0200

    tracker-extract: Drop specific XMP module
    
    This instead will be handled for the formats we expect a sidecar
    file for. This makes metadata from the real file and its sidecar
    point both to the same resource, as it conceptually is.

 src/tracker-extract/10-xmp.rule            |   4 -
 src/tracker-extract/meson.build            |   4 -
 src/tracker-extract/tracker-extract-gif.c  |  18 ++-
 src/tracker-extract/tracker-extract-jpeg.c |  16 ++
 src/tracker-extract/tracker-extract-pdf.c  |  21 ++-
 src/tracker-extract/tracker-extract-png.c  |  19 ++-
 src/tracker-extract/tracker-extract-tiff.c |  14 ++
 src/tracker-extract/tracker-extract-xmp.c  | 225 -----------------------------
 8 files changed, 84 insertions(+), 237 deletions(-)
---
diff --git a/src/tracker-extract/meson.build b/src/tracker-extract/meson.build
index 51b679f68..bd76ee9f5 100644
--- a/src/tracker-extract/meson.build
+++ b/src/tracker-extract/meson.build
@@ -106,10 +106,6 @@ if libvorbis.found()
   modules += [['extract-vorbis', 'tracker-extract-vorbis.c', ['10-vorbis.rule'], [libvorbis, 
tracker_miners_common_dep]]]
 endif
 
-if exempi.found()
-  modules += [['extract-xmp', 'tracker-extract-xmp.c', ['10-xmp.rule'], []]]
-endif
-
 if libgxps.found()
   modules += [['extract-xps', 'tracker-extract-xps.c', ['10-xps.rule'], [libgxps, 
tracker_miners_common_dep]]]
 endif
diff --git a/src/tracker-extract/tracker-extract-gif.c b/src/tracker-extract/tracker-extract-gif.c
index b33170ee0..f30069797 100644
--- a/src/tracker-extract/tracker-extract-gif.c
+++ b/src/tracker-extract/tracker-extract-gif.c
@@ -104,6 +104,7 @@ static inline void print_gif_error()
 
 static TrackerResource *
 read_metadata (GifFileType          *gifFile,
+               GFile                *file,
                const gchar          *uri)
 {
        TrackerResource *metadata;
@@ -118,6 +119,7 @@ read_metadata (GifFileType          *gifFile,
        MergeData md = { 0 };
        GifData   gd = { 0 };
        TrackerXmpData *xd = NULL;
+       gchar *sidecar = NULL;
 
        do {
                GifByteType *ExtData;
@@ -239,6 +241,10 @@ read_metadata (GifFileType          *gifFile,
        } while (RecordType != TERMINATE_RECORD_TYPE);
 
 
+       if (!xd) {
+               xd = tracker_xmp_new_from_sidecar (file, &sidecar);
+       }
+
        if (!xd) {
                xd = g_new0 (TrackerXmpData, 1);
        }
@@ -251,6 +257,16 @@ read_metadata (GifFileType          *gifFile,
        tracker_resource_add_uri (metadata, "rdf:type", "nfo:Image");
        tracker_resource_add_uri (metadata, "rdf:type", "nmm:Photo");
 
+       if (sidecar) {
+               TrackerResource *sidecar_resource;
+
+               sidecar_resource = tracker_resource_new (sidecar);
+               tracker_resource_add_uri (sidecar_resource, "rdf:type", "nfo:FileDataObject");
+               tracker_resource_add_relation (sidecar_resource, "nie:interpretedAs", metadata);
+
+               tracker_resource_add_take_relation (metadata, "nie:isStoredAs", sidecar_resource);
+       }
+
        if (xd->license) {
                tracker_resource_set_string (metadata, "nie:license", xd->license);
        }
@@ -502,7 +518,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
 
        uri = g_file_get_uri (file);
 
-       metadata = read_metadata (gifFile, uri);
+       metadata = read_metadata (gifFile, file, uri);
 
        g_free (uri);
 
diff --git a/src/tracker-extract/tracker-extract-jpeg.c b/src/tracker-extract/tracker-extract-jpeg.c
index dce530f8a..c04942cdc 100644
--- a/src/tracker-extract/tracker-extract-jpeg.c
+++ b/src/tracker-extract/tracker-extract-jpeg.c
@@ -267,6 +267,22 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
                ed = g_new0 (TrackerExifData, 1);
        }
 
+       if (!xd) {
+               gchar *sidecar = NULL;
+
+               xd = tracker_xmp_new_from_sidecar (file, &sidecar);
+
+               if (sidecar) {
+                       TrackerResource *sidecar_resource;
+
+                       sidecar_resource = tracker_resource_new (sidecar);
+                       tracker_resource_add_uri (sidecar_resource, "rdf:type", "nfo:FileDataObject");
+                       tracker_resource_add_relation (sidecar_resource, "nie:interpretedAs", metadata);
+
+                       tracker_resource_add_take_relation (metadata, "nie:isStoredAs", sidecar_resource);
+               }
+       }
+
        if (!xd) {
                xd = g_new0 (TrackerXmpData, 1);
        }
diff --git a/src/tracker-extract/tracker-extract-pdf.c b/src/tracker-extract/tracker-extract-pdf.c
index 14bd881b7..130c364f5 100644
--- a/src/tracker-extract/tracker-extract-pdf.c
+++ b/src/tracker-extract/tracker-extract-pdf.c
@@ -399,8 +399,25 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
 
        keywords = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free);
 
-       if (xml && *xml &&
-           (xd = tracker_xmp_new (xml, strlen (xml), uri)) != NULL) {
+       if (xml && *xml) {
+               xd = tracker_xmp_new (xml, strlen (xml), uri);
+       } else {
+               gchar *sidecar = NULL;
+
+               xd = tracker_xmp_new_from_sidecar (file, &sidecar);
+
+               if (sidecar) {
+                       TrackerResource *sidecar_resource;
+
+                       sidecar_resource = tracker_resource_new (sidecar);
+                       tracker_resource_add_uri (sidecar_resource, "rdf:type", "nfo:FileDataObject");
+                       tracker_resource_add_relation (sidecar_resource, "nie:interpretedAs", metadata);
+
+                       tracker_resource_add_take_relation (metadata, "nie:isStoredAs", sidecar_resource);
+               }
+       }
+
+       if (xd) {
                /* The casts here are well understood and known */
                md.title = (gchar *) tracker_coalesce_strip (4, pd.title, xd->title, xd->title2, 
xd->pdf_title);
                md.subject = (gchar *) tracker_coalesce_strip (2, pd.subject, xd->subject);
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index d16fadcd9..18f061aa1 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -187,6 +187,7 @@ read_metadata (TrackerResource      *metadata,
                png_structp           png_ptr,
                png_infop             info_ptr,
                png_infop             end_ptr,
+               GFile                *file,
                const gchar          *uri)
 {
        MergeData md = { 0 };
@@ -335,6 +336,22 @@ read_metadata (TrackerResource      *metadata,
                ed = g_new0 (TrackerExifData, 1);
        }
 
+       if (!xd) {
+               gchar *sidecar = NULL;
+
+               xd = tracker_xmp_new_from_sidecar (file, &sidecar);
+
+               if (sidecar) {
+                       TrackerResource *sidecar_resource;
+
+                       sidecar_resource = tracker_resource_new (sidecar);
+                       tracker_resource_add_uri (sidecar_resource, "rdf:type", "nfo:FileDataObject");
+                       tracker_resource_add_relation (sidecar_resource, "nie:interpretedAs", metadata);
+
+                       tracker_resource_add_take_relation (metadata, "nie:isStoredAs", sidecar_resource);
+               }
+       }
+
        if (!xd) {
                xd = g_new0 (TrackerXmpData, 1);
        }
@@ -716,7 +733,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
 
        uri = g_file_get_uri (file);
 
-       read_metadata (metadata, png_ptr, info_ptr, end_ptr, uri);
+       read_metadata (metadata, png_ptr, info_ptr, end_ptr, file, uri);
        g_free (uri);
 
        tracker_resource_set_int64 (metadata, "nfo:width", width);
diff --git a/src/tracker-extract/tracker-extract-tiff.c b/src/tracker-extract/tracker-extract-tiff.c
index 389ce74cb..41a1ceeec 100644
--- a/src/tracker-extract/tracker-extract-tiff.c
+++ b/src/tracker-extract/tracker-extract-tiff.c
@@ -326,6 +326,20 @@ tracker_extract_get_metadata (TrackerExtractInfo *info)
 #ifdef HAVE_EXEMPI
        if (TIFFGetField (image, TIFFTAG_XMLPACKET, &size, &xmp_offset)) {
                xd = tracker_xmp_new (xmp_offset, size, uri);
+       } else {
+               gchar *sidecar = NULL;
+
+               xd = tracker_xmp_new_from_sidecar (file, &sidecar);
+
+               if (sidecar) {
+                       TrackerResource *sidecar_resource;
+
+                       sidecar_resource = tracker_resource_new (sidecar);
+                       tracker_resource_add_uri (sidecar_resource, "rdf:type", "nfo:FileDataObject");
+                       tracker_resource_add_relation (sidecar_resource, "nie:interpretedAs", metadata);
+
+                       tracker_resource_add_take_relation (metadata, "nie:isStoredAs", sidecar_resource);
+               }
        }
 #endif /* HAVE_EXEMPI */
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]