Mercurial > hg > forks > geeqie
diff src/remote.c @ 2878:8b1c451c8ff2
Additional remote commands
--get-filelist:[<FOLDER>] Get list of files and class
--get-filelist-recurse:[<FOLDER>] Get list of files and class recursive
--get-collection:<COLLECTION> Get collection content
--get-collection-list Get list of collections
Changed command:
--tell Print filename of current image [and Collection, if collection
being displayed]
author | Colin Clark <colin.clark@cclark.uk> |
---|---|
date | Fri, 04 Jan 2019 13:44:58 +0000 |
parents | ed4e22060177 |
children | 288ea5f33bf7 |
line wrap: on
line diff
--- a/src/remote.c Thu Dec 20 11:45:20 2018 +0000 +++ b/src/remote.c Fri Jan 04 13:44:58 2019 +0000 @@ -24,7 +24,9 @@ #include "cache_maint.h" #include "collect.h" +#include "collect-io.h" #include "filedata.h" +#include "filefilter.h" #include "image.h" #include "img-view.h" #include "layout.h" @@ -747,14 +749,173 @@ g_free(render_intent); } +static void get_filelist(const gchar *text, GIOChannel *channel, gboolean recurse) +{ + GList *list = NULL; + FileFormatClass class; + FileData *dir_fd; + FileData *fd; + GString *out_string = g_string_new(NULL); + GList *work; + + if (strcmp(text, "") == 0) + { + if (layout_valid(&lw_id)) + { + dir_fd = file_data_new_dir(lw_id->dir_fd->path); + } + else + { + return; + } + } + else + { + if (isdir(text)) + { + dir_fd = file_data_new_dir(text); + } + else + { + return; + } + } + + if (recurse) + { + list = filelist_recursive(dir_fd); + } + else + { + filelist_read(dir_fd, &list, NULL); + } + + work = list; + while (work) + { + fd = work->data; + g_string_append_printf(out_string, "%s", fd->path); + class = filter_file_get_class(fd->path); + + switch (class) + { + case FORMAT_CLASS_IMAGE: + out_string = g_string_append(out_string, " Class: Image"); + break; + case FORMAT_CLASS_RAWIMAGE: + out_string = g_string_append(out_string, " Class: RAW image"); + break; + case FORMAT_CLASS_META: + out_string = g_string_append(out_string, " Class: Metadata"); + break; + case FORMAT_CLASS_VIDEO: + out_string = g_string_append(out_string, " Class: Video"); + break; + case FORMAT_CLASS_COLLECTION: + out_string = g_string_append(out_string, " Class: Collection"); + break; + case FORMAT_CLASS_PDF: + out_string = g_string_append(out_string, " Class: PDF"); + break; + case FORMAT_CLASS_UNKNOWN: + out_string = g_string_append(out_string, " Class: Unknown"); + break; + default: + out_string = g_string_append(out_string, " Class: Unknown"); + break; + } + out_string = g_string_append(out_string, "\n"); + work = work->next; + } + + g_io_channel_write_chars(channel, out_string->str, -1, NULL, NULL); + g_io_channel_write_chars(channel, "\n", -1, NULL, NULL); + + g_string_free(out_string, TRUE); + filelist_free(list); + file_data_unref(dir_fd); +} + +static void gr_collection(const gchar *text, GIOChannel *channel, gpointer data) +{ + GString *contents = g_string_new(NULL); + + if (is_collection(text)) + { + collection_contents(text, &contents); + } + else + { + return; + } + + g_io_channel_write_chars(channel, contents->str, -1, NULL, NULL); + g_io_channel_write_chars(channel, "\n", -1, NULL, NULL); + + g_string_free(contents, TRUE); +} + +static void gr_collection_list(const gchar *text, GIOChannel *channel, gpointer data) +{ + + GList *collection_list = NULL; + GList *work; + GString *out_string = g_string_new(NULL); + + collect_manager_list(&collection_list, NULL, NULL); + + work = collection_list; + while (work) + { + const gchar *collection_name = work->data; + out_string = g_string_append(out_string, g_strdup(collection_name)); + out_string = g_string_append(out_string, "\n"); + + work = work->next; + } + + g_io_channel_write_chars(channel, out_string->str, -1, NULL, NULL); + g_io_channel_write_chars(channel, "\n", -1, NULL, NULL); + + string_list_free(collection_list); + g_string_free(out_string, TRUE); +} + + +static void gr_filelist(const gchar *text, GIOChannel *channel, gpointer data) +{ + get_filelist(text, channel, FALSE); +} + +static void gr_filelist_recurse(const gchar *text, GIOChannel *channel, gpointer data) +{ + get_filelist(text, channel, TRUE); +} + static void gr_file_tell(const gchar *text, GIOChannel *channel, gpointer data) { + gchar *out_string; + gchar *collection_name = NULL; + if (!layout_valid(&lw_id)) return; if (image_get_path(lw_id->image)) { - g_io_channel_write_chars(channel, image_get_path(lw_id->image), -1, NULL, NULL); + if (lw_id->image->collection && lw_id->image->collection->name) + { + collection_name = remove_extension_from_path(lw_id->image->collection->name); + out_string = g_strconcat(image_get_path(lw_id->image), " Collection: ", collection_name, NULL); + } + else + { + out_string = g_strconcat(image_get_path(lw_id->image), NULL); + } + + g_io_channel_write_chars(channel, out_string, -1, NULL, NULL); g_io_channel_write_chars(channel, "\n", -1, NULL, NULL); + + g_free(collection_name); + g_free(out_string); } } @@ -936,10 +1097,14 @@ { NULL, "--get-destination:", gr_get_destination, TRUE, FALSE, N_("<FILE>"), N_("get destination path of FILE") }, { NULL, "file:", gr_file_load, TRUE, FALSE, N_("<FILE>"), N_("open FILE, bring Geeqie window to the top") }, { NULL, "File:", gr_file_load_no_raise, TRUE, FALSE, N_("<FILE>"), N_("open FILE, do not bring Geeqie window to the top") }, - { NULL, "--tell", gr_file_tell, FALSE, FALSE, NULL, N_("print filename of current image") }, + { NULL, "--tell", gr_file_tell, FALSE, FALSE, NULL, N_("print filename [and Collection] of current image") }, { NULL, "--pixel-info", gr_pixel_info, FALSE, FALSE, NULL, N_("print pixel info of mouse pointer on current image") }, { NULL, "--get-rectangle", gr_rectangle, FALSE, FALSE, NULL, N_("get rectangle co-ordinates") }, { NULL, "--get-render-intent", gr_render_intent, FALSE, FALSE, NULL, N_("get render intent") }, + { NULL, "--get-filelist:", gr_filelist, TRUE, FALSE, N_("[<FOLDER>]"), N_("get list of files and class") }, + { NULL, "--get-filelist-recurse:", gr_filelist_recurse, TRUE, FALSE, N_("[<FOLDER>]"), N_("get list of files and class recursive") }, + { NULL, "--get-collection:", gr_collection, TRUE, FALSE, N_("<COLLECTION>"), N_("get collection content") }, + { NULL, "--get-collection-list", gr_collection_list, FALSE, FALSE, NULL, N_("get collection list") }, { NULL, "view:", gr_file_view, TRUE, FALSE, N_("<FILE>"), N_("open FILE in new window") }, { NULL, "--list-clear", gr_list_clear, FALSE, FALSE, NULL, N_("clear command line collection list") }, { NULL, "--list-add:", gr_list_add, TRUE, FALSE, N_("<FILE>"), N_("add FILE to command line collection list") },