+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);
+}
+