Shuffle code around
This commit is contained in:
parent
abf4f1a792
commit
dd1d6647dc
150
fiv.c
150
fiv.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user