static void pdf_load_job_gdata_refresh_cache (PdfLoadJob *job) { GDataDownloadStream *stream; GError *error = NULL; stream = gdata_documents_document_download (GDATA_DOCUMENTS_DOCUMENT (job->gdata_entry), GDATA_DOCUMENTS_SERVICE (job->gdata_service), "pdf", job->cancellable, &error); if (error != NULL) { pdf_load_job_complete_error (job, error); return; } job->stream = G_INPUT_STREAM (stream); job->download_file = g_file_new_for_path (job->pdf_path); g_file_replace_async (job->download_file, NULL, FALSE, G_FILE_CREATE_PRIVATE, G_PRIORITY_DEFAULT, job->cancellable, file_replace_ready_cb, job); }
static void photos_thumbnailer_generate_thumbnail_process (GObject *source_object, GAsyncResult *res, gpointer user_data) { GCancellable *cancellable; g_autoptr (GFile) thumbnail_file = NULL; g_autoptr (GTask) task = G_TASK (user_data); GeglNode *pipeline_node; GeglProcessor *processor = GEGL_PROCESSOR (source_object); PhotosThumbnailerGenerateData *data; g_autofree gchar *thumbnail_dir = NULL; gdouble zoom = 0.0; gint pixbuf_height; gint pixbuf_width; gint pixbuf_zoomed_height; gint pixbuf_zoomed_width; cancellable = g_task_get_cancellable (task); data = g_task_get_task_data (task); { g_autoptr (GError) error = NULL; if (!photos_gegl_processor_process_finish (processor, res, &error)) { g_task_return_error (task, g_steal_pointer (&error)); goto out; } } g_assert_null (data->pixbuf_thumbnail); pipeline_node = photos_pipeline_get_graph (data->pipeline); data->pixbuf_thumbnail = photos_gegl_create_pixbuf_from_node (pipeline_node); pixbuf_height = gdk_pixbuf_get_height (data->pixbuf_thumbnail); pixbuf_width = gdk_pixbuf_get_width (data->pixbuf_thumbnail); if (pixbuf_height > pixbuf_width && pixbuf_height > data->thumbnail_size) { zoom = (gdouble) data->thumbnail_size / (gdouble) pixbuf_height; pixbuf_zoomed_height = data->thumbnail_size; pixbuf_zoomed_width = (gint) (zoom * (gdouble) pixbuf_width + 0.5); } else if (pixbuf_height <= pixbuf_width && pixbuf_width > data->thumbnail_size) { zoom = (gdouble) data->thumbnail_size / (gdouble) pixbuf_width; pixbuf_zoomed_height = (gint) (zoom * (gdouble) pixbuf_height + 0.5); pixbuf_zoomed_width = data->thumbnail_size; } if (zoom > 0.0) { g_autoptr (GdkPixbuf) pixbuf_scaled = NULL; photos_debug (PHOTOS_DEBUG_THUMBNAILER, "Scaling thumbnail to %d×%d", pixbuf_zoomed_width, pixbuf_zoomed_height); pixbuf_scaled = gdk_pixbuf_scale_simple (data->pixbuf_thumbnail, pixbuf_zoomed_width, pixbuf_zoomed_height, GDK_INTERP_BILINEAR); g_set_object (&data->pixbuf_thumbnail, pixbuf_scaled); } thumbnail_dir = g_path_get_dirname (data->thumbnail_path); g_mkdir_with_parents (thumbnail_dir, 0700); thumbnail_file = g_file_new_for_path (data->thumbnail_path); photos_debug (PHOTOS_DEBUG_THUMBNAILER, "Saving thumbnail to %s", data->thumbnail_path); g_file_replace_async (thumbnail_file, NULL, FALSE, G_FILE_CREATE_PRIVATE | G_FILE_CREATE_REPLACE_DESTINATION, G_PRIORITY_DEFAULT, cancellable, photos_thumbnailer_generate_thumbnail_replace, g_object_ref (task)); out: return; }