summaryrefslogtreecommitdiff
path: root/libmediaart/extract.c
diff options
context:
space:
mode:
authorMartyn Russell <martyn@lanedo.com>2013-08-15 16:12:33 +0100
committerMartyn Russell <martyn@lanedo.com>2013-08-15 17:28:28 +0100
commit5f8d6f3dff0d8c1968cf52d17f810fe7bd9e0f15 (patch)
tree73b8ea8ba5f84cb63ba14954c25aa3b54c192e1c /libmediaart/extract.c
parent6f6815b670d259ba0d74fdbe47b25c8b99e28d1c (diff)
downloadlibmediaart-5f8d6f3dff0d8c1968cf52d17f810fe7bd9e0f15.tar.gz
libmediaart: Don't depend on tracker file utils to get file mtime
Diffstat (limited to 'libmediaart/extract.c')
-rw-r--r--libmediaart/extract.c76
1 files changed, 72 insertions, 4 deletions
diff --git a/libmediaart/extract.c b/libmediaart/extract.c
index b703d34..2ee2df4 100644
--- a/libmediaart/extract.c
+++ b/libmediaart/extract.c
@@ -990,15 +990,83 @@ media_art_shutdown (void)
}
static void
-set_mtime (const gchar *filename, guint64 mtime)
+set_mtime (const gchar *filename,
+ guint64 mtime)
{
-
struct utimbuf buf;
buf.actime = buf.modtime = mtime;
utime (filename, &buf);
}
+static
+guint64
+get_mtime (GFile *file)
+{
+ GFileInfo *info;
+ GError *error = NULL;
+ guint64 mtime;
+
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ G_FILE_QUERY_INFO_NONE,
+ NULL,
+ &error);
+
+ if (G_UNLIKELY (error)) {
+ gchar *uri;
+
+ uri = g_file_get_uri (file);
+ g_message ("Could not get mtime for '%s': %s",
+ uri,
+ error->message);
+ g_free (uri);
+ g_error_free (error);
+ mtime = 0;
+ } else {
+ mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ g_object_unref (info);
+ }
+
+ return mtime;
+}
+
+guint64
+get_mtime_by_path (const gchar *path)
+{
+ GFile *file;
+ guint64 mtime;
+
+ g_return_val_if_fail (path != NULL, 0);
+
+ file = g_file_new_for_path (path);
+
+ mtime = get_mtime (file);
+
+ g_object_unref (file);
+
+ return mtime;
+}
+
+
+guint64
+get_mtime_by_uri (const gchar *uri)
+{
+ GFile *file;
+ guint64 mtime;
+
+ g_return_val_if_fail (uri != NULL, 0);
+
+ file = g_file_new_for_uri (uri);
+
+ mtime = get_mtime (file);
+
+ g_object_unref (file);
+
+ return mtime;
+}
+
+
gboolean
media_art_process (const unsigned char *buffer,
size_t len,
@@ -1025,7 +1093,7 @@ media_art_process (const unsigned char *buffer,
/* TODO: We can definitely work with GFiles better here */
- mtime = tracker_file_get_mtime_uri (uri);
+ mtime = get_mtime_by_uri (uri);
media_art_get_path (artist,
title,
@@ -1045,7 +1113,7 @@ media_art_process (const unsigned char *buffer,
a_exists = g_file_test (art_path, G_FILE_TEST_EXISTS);
if (a_exists) {
- a_mtime = tracker_file_get_mtime (art_path);
+ a_mtime = get_mtime_by_path (art_path);
}
if ((buffer && len > 0) && ((!a_exists) || (a_exists && mtime > a_mtime))) {