summarylogtreecommitdiffstats
path: root/fixes.patch
blob: dd64531c8f4a44daeed9d116c2841d536519acac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
--- a/src/main.c	2023-07-30 13:01:01.901012583 -0400
+++ b/src/main.c	2023-07-30 13:04:24.822841732 -0400
@@ -96,7 +96,12 @@
 calculate_file_interestingness (GFileInfo *file_info, GFile *file, GnomeDesktopThumbnailFactory *factory)
 {
 	guint interestingness = 1;
+#ifdef GLIB_VERSION_2_62
+	GDateTime *file_mtime = NULL;
+#else
 	GTimeVal file_mtime;
+#endif//GLIB_VERSION_2_62
+	gint64 file_mtime_unix;
 	gchar *file_uri, *file_mime_type;
 	const gchar *content_type;
 
@@ -130,15 +135,26 @@
 
 	/* Weight un-thumbnailable files or files with a valid failed thumbnail a lot less. */
 	file_uri = g_file_get_uri (file);
+#ifdef GLIB_VERSION_2_62
+	file_mtime = g_file_info_get_modification_date_time (file_info);
+	file_mtime_unix = file_mtime ? g_date_time_to_unix (file_mtime) : 0;
+#else
 	g_file_info_get_modification_time (file_info, &file_mtime);
+	file_mtime_unix = file_mtime.tv_sec;
+#endif  /* GLIB_VERSION_2_62 */
+
 	file_mime_type = g_content_type_get_mime_type (g_file_info_get_content_type (file_info));
 
-	if (gnome_desktop_thumbnail_factory_has_valid_failed_thumbnail (factory, file_uri, file_mtime.tv_sec) == TRUE ||
-	    gnome_desktop_thumbnail_factory_can_thumbnail (factory, file_uri, file_mime_type, file_mtime.tv_sec) == FALSE) {
+	if (gnome_desktop_thumbnail_factory_has_valid_failed_thumbnail (factory, file_uri, file_mtime_unix) == TRUE ||
+	    gnome_desktop_thumbnail_factory_can_thumbnail (factory, file_uri, file_mime_type, file_mtime_unix) == FALSE) {
 		DEC (20);
 	}
 
 	g_free (file_uri);
+#ifdef GLIB_VERSION_2_62
+	if (file_mtime)
+		g_date_time_unref (file_mtime);
+#endif  /* GLIB_VERSION_2_62 */
 	g_free (file_mime_type);
 
 	/* Weight image files more than audio files. This covers the case where a directory for an MP3 album contains music
@@ -318,18 +334,18 @@
  * Return value: pixbuf representing the thumbnail for the given file, or %NULL on error
  */
 static GdkPixbuf *
-copy_thumbnail_from_file (GnomeDesktopThumbnailFactory *factory, const gchar *file_uri, const GTimeVal *file_mtime, const gchar *file_mime_type, GError **error)
+copy_thumbnail_from_file (GnomeDesktopThumbnailFactory *factory, const gchar *file_uri, gint64 file_mtime_unix, const gchar *file_mime_type, GError **error)
 {
 	gchar *thumbnail_path;
 	GdkPixbuf *pixbuf = NULL;
 
-	thumbnail_path = gnome_desktop_thumbnail_factory_lookup (factory, file_uri, file_mtime->tv_sec);
+	thumbnail_path = gnome_desktop_thumbnail_factory_lookup (factory, file_uri, file_mtime_unix);
 
 	g_debug ("Getting thumbnail for file ‘%s’ from path ‘%s’.", file_uri, thumbnail_path);
 
 	if (thumbnail_path == NULL) {
 		/* No thumbnail exists for the file. Try and generate one. */
-		if (gnome_desktop_thumbnail_factory_can_thumbnail (factory, file_uri, file_mime_type, file_mtime->tv_sec) == TRUE) {
+		if (gnome_desktop_thumbnail_factory_can_thumbnail (factory, file_uri, file_mime_type, file_mtime_unix) == TRUE) {
 			/* Set an environment variable to limit the recursion depth. The program can end up recursing if the most interesting child
 			 * of this directory is another directory. Although measures have been taken to avoid symlink directory loops, it’s still
 			 * possible to enter a directory loop using bind mounts. By limiting the recursion depth, this can be avoided. */
@@ -357,12 +373,16 @@
 				g_setenv ("GNOME_DIRECTORY_THUMBNAILER_RECURSION_LIMIT", new_recursion_limit_str, TRUE);
 				g_free (new_recursion_limit_str);
 
+#if defined(GNOME_DESKTOP_PLATFORM_VERSION) && GNOME_DESKTOP_PLATFORM_VERSION >= 43
+				pixbuf = gnome_desktop_thumbnail_factory_generate_thumbnail (factory, file_uri, file_mime_type, NULL, error);
+#else
 				pixbuf = gnome_desktop_thumbnail_factory_generate_thumbnail (factory, file_uri, file_mime_type);
 				if (pixbuf == NULL) {
 					/* gnome-desktop doesn't set an error so we have to. */
 					g_debug ("Error generating thumbnail.");
 					g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT, _("Error generating thumbnail for file ‘%s’."), file_uri);
 				}
+#endif
 			} else {
 				g_debug ("Didn’t generate thumbnail due to hitting the recursion limit.");
 				g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT, _("Error generating thumbnail for file ‘%s’: recursion limit reached."), file_uri);
@@ -404,7 +424,12 @@
 	GFile *interesting_file = NULL;
 	GFileInfo *interesting_file_info = NULL;
 	gchar *interesting_file_uri = NULL, *interesting_file_mime_type = NULL;
+#ifdef GLIB_VERSION_2_62
+	GDateTime *interesting_file_mtime = NULL;
+#else
 	GTimeVal interesting_file_mtime;
+#endif  /* GLIB_VERSION_2_62 */
+	gint64 interesting_file_mtime_unix;
 	GdkPixbuf *pixbuf = NULL;
 	GError *child_error = NULL;
 
@@ -418,12 +443,22 @@
 	}
 
 	interesting_file_uri = g_file_get_uri (interesting_file);
+#ifdef GLIB_VERSION_2_62
+	interesting_file_mtime = g_file_info_get_modification_date_time (interesting_file_info);
+	interesting_file_mtime_unix = interesting_file_mtime ? g_date_time_to_unix (interesting_file_mtime) : 0;
+#else
 	g_file_info_get_modification_time (interesting_file_info, &interesting_file_mtime);
+	interesting_file_mtime_unix = interesting_file_mtime.tv_sec;
+#endif  /* GLIB_VERSION_2_62 */
 	interesting_file_mime_type = g_content_type_get_mime_type (g_file_info_get_content_type (interesting_file_info));
-	pixbuf = copy_thumbnail_from_file (factory, interesting_file_uri, &interesting_file_mtime, interesting_file_mime_type, &child_error);
+	pixbuf = copy_thumbnail_from_file (factory, interesting_file_uri, interesting_file_mtime_unix, interesting_file_mime_type, &child_error);
 
 done:
 	g_free (interesting_file_uri);
+#ifdef GLIB_VERSION_2_62
+	if (interesting_file_mtime)
+		g_date_time_unref (interesting_file_mtime);
+#endif  /* GLIB_VERSION_2_62 */
 	g_free (interesting_file_mime_type);
 	g_clear_object (&interesting_file_info);
 	g_clear_object (&interesting_file);