diff options
-rw-r--r-- | fiv.c | 150 |
1 files changed, 76 insertions, 74 deletions
@@ -2087,80 +2087,6 @@ static const char stylesheet[] = "@define-color fiv-tile @content_view_bg; \ } \ .fiv-information label { padding: 0 4px; }"; -static FivThumbnailSize -output_thumbnail_prologue(gchar **uris, const char *size_arg) -{ - if (!uris) - exit_fatal("No path given"); - if (uris[1]) - exit_fatal("Only one thumbnail at a time may be produced"); - - FivThumbnailSize size = FIV_THUMBNAIL_SIZE_COUNT; - if (size_arg) { - for (size = 0; size < FIV_THUMBNAIL_SIZE_COUNT; size++) { - if (!strcmp( - fiv_thumbnail_sizes[size].thumbnail_spec_name, size_arg)) - break; - } - if (size >= FIV_THUMBNAIL_SIZE_COUNT) - exit_fatal("unknown thumbnail size: %s", size_arg); - } - -#ifdef G_OS_WIN32 - _setmode(fileno(stdout), _O_BINARY); -#endif - return size; -} - -static void -output_thumbnail_for_search(gchar **uris, const char *size_arg) -{ - FivThumbnailSize size = output_thumbnail_prologue(uris, size_arg); - - GError *error = NULL; - GFile *file = g_file_new_for_uri(uris[0]); - cairo_surface_t *surface = NULL; - GBytes *bytes = NULL; - if ((surface = fiv_thumbnail_produce(file, size, &error)) && - (bytes = fiv_io_serialize_for_search(surface, &error))) { - fwrite( - g_bytes_get_data(bytes, NULL), 1, g_bytes_get_size(bytes), stdout); - g_bytes_unref(bytes); - } else { - g_assert(error != NULL); - } - - g_object_unref(file); - if (error) - exit_fatal("%s", error->message); - - cairo_surface_destroy(surface); -} - -static void -output_thumbnail(gchar **uris, gboolean extract, const char *size_arg) -{ - FivThumbnailSize size = output_thumbnail_prologue(uris, size_arg); - - GError *error = NULL; - GFile *file = g_file_new_for_uri(uris[0]); - cairo_surface_t *surface = NULL; - if (extract && (surface = fiv_thumbnail_extract(file, size, &error))) - fiv_io_serialize_to_stdout(surface, FIV_IO_SERIALIZE_LOW_QUALITY); - else if (size_arg && - (g_clear_error(&error), - (surface = fiv_thumbnail_produce(file, size, &error)))) - fiv_io_serialize_to_stdout(surface, 0); - else - g_assert(error != NULL); - - g_object_unref(file); - if (error) - exit_fatal("%s", error->message); - - cairo_surface_destroy(surface); -} - static void on_app_startup(GApplication *app, G_GNUC_UNUSED gpointer user_data) { @@ -2359,6 +2285,82 @@ on_app_activate( gtk_widget_show(g.window); } +// --- Plumbing ---------------------------------------------------------------- + +static FivThumbnailSize +output_thumbnail_prologue(gchar **uris, const char *size_arg) +{ + if (!uris) + exit_fatal("No path given"); + if (uris[1]) + exit_fatal("Only one thumbnail at a time may be produced"); + + FivThumbnailSize size = FIV_THUMBNAIL_SIZE_COUNT; + if (size_arg) { + for (size = 0; size < FIV_THUMBNAIL_SIZE_COUNT; size++) { + if (!strcmp( + fiv_thumbnail_sizes[size].thumbnail_spec_name, size_arg)) + break; + } + if (size >= FIV_THUMBNAIL_SIZE_COUNT) + exit_fatal("unknown thumbnail size: %s", size_arg); + } + +#ifdef G_OS_WIN32 + _setmode(fileno(stdout), _O_BINARY); +#endif + return size; +} + +static void +output_thumbnail_for_search(gchar **uris, const char *size_arg) +{ + FivThumbnailSize size = output_thumbnail_prologue(uris, size_arg); + + GError *error = NULL; + GFile *file = g_file_new_for_uri(uris[0]); + cairo_surface_t *surface = NULL; + GBytes *bytes = NULL; + if ((surface = fiv_thumbnail_produce(file, size, &error)) && + (bytes = fiv_io_serialize_for_search(surface, &error))) { + fwrite( + g_bytes_get_data(bytes, NULL), 1, g_bytes_get_size(bytes), stdout); + g_bytes_unref(bytes); + } else { + g_assert(error != NULL); + } + + g_object_unref(file); + if (error) + exit_fatal("%s", error->message); + + cairo_surface_destroy(surface); +} + +static void +output_thumbnail(gchar **uris, gboolean extract, const char *size_arg) +{ + FivThumbnailSize size = output_thumbnail_prologue(uris, size_arg); + + GError *error = NULL; + GFile *file = g_file_new_for_uri(uris[0]); + cairo_surface_t *surface = NULL; + if (extract && (surface = fiv_thumbnail_extract(file, size, &error))) + fiv_io_serialize_to_stdout(surface, FIV_IO_SERIALIZE_LOW_QUALITY); + else if (size_arg && + (g_clear_error(&error), + (surface = fiv_thumbnail_produce(file, size, &error)))) + fiv_io_serialize_to_stdout(surface, 0); + else + g_assert(error != NULL); + + g_object_unref(file); + if (error) + exit_fatal("%s", error->message); + + cairo_surface_destroy(surface); +} + static gint on_app_handle_local_options(G_GNUC_UNUSED GApplication *app, GVariantDict *options, G_GNUC_UNUSED gpointer user_data) |