diff options
author | Martyn Russell <martyn@lanedo.com> | 2013-08-15 16:12:33 +0100 |
---|---|---|
committer | Martyn Russell <martyn@lanedo.com> | 2013-08-15 17:28:28 +0100 |
commit | 5f8d6f3dff0d8c1968cf52d17f810fe7bd9e0f15 (patch) | |
tree | 73b8ea8ba5f84cb63ba14954c25aa3b54c192e1c /libmediaart/extract.c | |
parent | 6f6815b670d259ba0d74fdbe47b25c8b99e28d1c (diff) | |
download | libmediaart-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.c | 76 |
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))) { |