summaryrefslogtreecommitdiff
path: root/src/tracker-extract/tracker-extract-xmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracker-extract/tracker-extract-xmp.c')
-rw-r--r--src/tracker-extract/tracker-extract-xmp.c225
1 files changed, 0 insertions, 225 deletions
diff --git a/src/tracker-extract/tracker-extract-xmp.c b/src/tracker-extract/tracker-extract-xmp.c
deleted file mode 100644
index 44c035c40..000000000
--- a/src/tracker-extract/tracker-extract-xmp.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2007, Jason Kivlighn <jkivlighn@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include "config.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <sys/mman.h>
-
-#include <glib.h>
-#include <glib/gstdio.h>
-
-#include <gio/gio.h>
-
-#include <libtracker-common/tracker-file-utils.h>
-
-#include <libtracker-extract/tracker-extract.h>
-
-/* This function is used to find the URI for a file.xmp file. The point here is
- * that the URI for file.xmp is not file:///file.xmp but instead for example
- * file:///file.jpeg or file:///file.png. The reason is that file.xmp is a
- * sidekick, and a sidekick doesn't describe itself, it describes another file. */
-
-static gchar *
-find_orig_uri (const gchar *xmp_filename)
-{
- GFile *file;
- GFile *dir;
- GFileEnumerator *iter;
- GFileInfo *orig_info;
- const gchar *filename_a;
- gchar *found_file = NULL;
-
- file = g_file_new_for_path (xmp_filename);
- dir = g_file_get_parent (file);
-
- orig_info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_NAME,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
-
- filename_a = g_file_info_get_name (orig_info);
-
- iter = g_file_enumerate_children (dir, G_FILE_ATTRIBUTE_STANDARD_NAME,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
-
- if (iter) {
- GFileInfo *info;
-
- while ((info = g_file_enumerator_next_file (iter, NULL, NULL)) && !found_file) {
- const gchar *filename_b;
- const gchar *ext_a, *ext_b;
- gchar *casefold_a, *casefold_b;
-
- /* OK, important:
- * 1. Files can't be the same.
- * 2. File names (without extension) must match
- * 3. Something else? */
-
- filename_b = g_file_info_get_name (info);
-
- ext_a = g_utf8_strrchr (filename_a, -1, '.');
- ext_b = g_utf8_strrchr (filename_b, -1, '.');
-
- /* Look for extension */
- if (!ext_a || !ext_b) {
- g_object_unref (info);
- continue;
- }
-
- /* Name part is the same length */
- if ((ext_a - filename_a) != (ext_b - filename_b)) {
- g_object_unref (info);
- continue;
- }
-
- /* Check extensions are not the same (i.e. same len and ext) */
- if (g_strcmp0 (ext_a, ext_b) == 0) {
- g_object_unref (info);
- continue;
- }
-
- /* Don't compare the ".xmp" with ".jpeg" and don't match the same file */
-
- /* Now compare name (without ext) and make
- * sure they are the same in a caseless
- * compare. */
-
- casefold_a = g_utf8_casefold (filename_a, (ext_a - filename_a));
- casefold_b = g_utf8_casefold (filename_b, (ext_b - filename_b));
-
- if (g_strcmp0 (casefold_a, casefold_b) == 0) {
- GFile *found;
-
- found = g_file_get_child (dir, filename_b);
- found_file = g_file_get_uri (found);
- g_object_unref (found);
- }
-
- g_free (casefold_a);
- g_free (casefold_b);
- g_object_unref (info);
- }
-
- g_object_unref (iter);
- }
-
- g_object_unref (orig_info);
- g_object_unref (file);
- g_object_unref (dir);
-
- return found_file;
-}
-
-G_MODULE_EXPORT gboolean
-tracker_extract_get_metadata (TrackerExtractInfo *info)
-{
- TrackerResource *resource;
- TrackerXmpData *xd = NULL;
- gchar *filename, *uri;
- gchar *contents;
- gsize length = 0;
- GFile *file;
- int fd;
- struct stat st;
-
- file = tracker_extract_info_get_file (info);
- filename = g_file_get_path (file);
-
- fd = tracker_file_open_fd (filename);
-
- if (fd == -1) {
- g_warning ("Could not open xmp file '%s': %s\n",
- filename,
- g_strerror (errno));
- g_free (filename);
- return FALSE;
- }
-
- if (fstat (fd, &st) == -1) {
- g_warning ("Could not fstat xmp file '%s': %s\n",
- filename,
- g_strerror (errno));
- close (fd);
- g_free (filename);
- return FALSE;
- }
-
- if (st.st_size == 0) {
- contents = NULL;
- length = 0;
- } else {
- contents = (gchar *) mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
- if (contents == NULL) {
- g_warning ("Could not mmap xmp file '%s': %s\n",
- filename,
- g_strerror (errno));
- close (fd);
- g_free (filename);
- return FALSE;
- }
- length = st.st_size;
- }
-
- uri = g_file_get_uri (file);
-
- if (contents) {
- gchar *original_uri;
-
- original_uri = find_orig_uri (filename);
-
- /* If no orig file is found for the sidekick, we use the sidekick to
- * describe itself instead, falling back to uri
- */
- xd = tracker_xmp_new (contents,
- length,
- original_uri ? original_uri : uri);
-
- if (xd) {
- resource = tracker_resource_new (NULL);
-
- tracker_xmp_apply_to_resource (resource, xd);
-
- tracker_extract_info_set_resource (info, resource);
- g_object_unref (resource);
- }
-
- g_free (original_uri);
- tracker_xmp_free (xd);
- g_free (filename);
- g_free (uri);
-
- munmap (contents, length);
-
- close (fd);
-
- return TRUE;
- }
-
- close (fd);
- g_free (filename);
- g_free (uri);
-
- return FALSE;
-}