From 97517b5bdf8f3a555a086b15ded0748aa700979c Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Mon, 20 Apr 2009 21:34:16 +0000 Subject: [PATCH] added remote interface for exporting additional info (sidecars, destination) to external commands see the symlink command for an example http://sourceforge.net/tracker/?func=detail&aid=2488845&group_id=222125&atid=1054680 --- plugins/symlink/Makefile.am | 1 + plugins/symlink/geeqie-symlink | 18 +++++++++++++++ plugins/symlink/symlink.desktop | 7 ++---- src/remote.c | 39 +++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 5 deletions(-) create mode 100755 plugins/symlink/geeqie-symlink diff --git a/plugins/symlink/Makefile.am b/plugins/symlink/Makefile.am index 90188c16..952f425b 100644 --- a/plugins/symlink/Makefile.am +++ b/plugins/symlink/Makefile.am @@ -1,3 +1,4 @@ +dist_bin_SCRIPTS = geeqie-symlink qq_desktopdir = $(pkgdatadir)/applications qq_desktop_DATA = symlink.desktop diff --git a/plugins/symlink/geeqie-symlink b/plugins/symlink/geeqie-symlink new file mode 100755 index 00000000..6a8465aa --- /dev/null +++ b/plugins/symlink/geeqie-symlink @@ -0,0 +1,18 @@ +#!/bin/sh + +# This is a helper script that symlinks grouped files +# it uses geeqie remote connection to get details about grouped files + + +# iterate over files on commandline +for file in "$@" ; do + # we got only one file for each group, typically the main one + # get the sidecars: + geeqie -r --get-sidecars:"$file" |while read sidecar ; do + # the main file is included in the sidecar file list, no special handling is required + # get destination path for each sidecar file: + geeqie -r --get-destination:"$sidecar" | if read destination ; then + ln -s "$sidecar" "$destination" + fi + done +done diff --git a/plugins/symlink/symlink.desktop b/plugins/symlink/symlink.desktop index 2306651a..88bb3da4 100644 --- a/plugins/symlink/symlink.desktop +++ b/plugins/symlink/symlink.desktop @@ -4,11 +4,8 @@ Type=Application Name=Symlink #Name[cs]= -# FIXME: this can't be an oneliner, it needs to be changed to a full -# featured script in separate file, with error handling etc. -# expansion of environment variables directly in Exec is not supported -# by the specification and it will be removed -Exec=ln -s %f "$GEEQIE_DESTINATION" +# call the helper script +Exec=geeqie-symlink %f # Desktop files that are usable only in Geeqie should be marked like this: Categories=X-Geeqie; diff --git a/src/remote.c b/src/remote.c index 39ae67fe..91a1cf84 100644 --- a/src/remote.c +++ b/src/remote.c @@ -321,6 +321,7 @@ static gboolean remote_client_send(RemoteConnection *rc, const gchar *text) if (buffer[0] == '\n') /* empty line finishes the command */ { g_free(buffer); + fflush(stdout); break; } buffer[termpos] = '\0'; @@ -528,6 +529,42 @@ static void gr_config_load(const gchar *text, GIOChannel *channel, gpointer data g_free(filename); } +static void gr_get_sidecars(const gchar *text, GIOChannel *channel, gpointer data) +{ + gchar *filename = expand_tilde(text); + FileData *fd = file_data_new_simple(filename); + + GList *work; + if (fd->parent) fd = fd->parent; + + g_io_channel_write_chars(channel, fd->path, -1, NULL, NULL); + g_io_channel_write_chars(channel, "\n", -1, NULL, NULL); + + work = fd->sidecar_files; + + while (work) + { + fd = work->data; + work = work->next; + g_io_channel_write_chars(channel, fd->path, -1, NULL, NULL); + g_io_channel_write_chars(channel, "\n", -1, NULL, NULL); + } + g_free(filename); +} + +static void gr_get_destination(const gchar *text, GIOChannel *channel, gpointer data) +{ + gchar *filename = expand_tilde(text); + FileData *fd = file_data_new_simple(filename); + + if (fd->change && fd->change->dest) + { + g_io_channel_write_chars(channel, fd->change->dest, -1, NULL, NULL); + g_io_channel_write_chars(channel, "\n", -1, NULL, NULL); + } + g_free(filename); +} + static void gr_file_view(const gchar *text, GIOChannel *channel, gpointer data) { gchar *filename = expand_tilde(text); @@ -615,6 +652,8 @@ static RemoteCommandEntry remote_commands[] = { { "-t", "--tools-hide", gr_tools_hide, FALSE, TRUE, N_("hide tools") }, { "-q", "--quit", gr_quit, FALSE, FALSE, N_("quit") }, { NULL, "--config-load:", gr_config_load, TRUE, FALSE, N_("load config file") }, + { NULL, "--get-sidecars:", gr_get_sidecars, TRUE, FALSE, N_("get list of sidecars of the given file") }, + { NULL, "--get-destination:", gr_get_destination, TRUE, FALSE, N_("get destination path for the given file") }, { NULL, "file:", gr_file_load, TRUE, FALSE, N_("open file") }, { NULL, "view:", gr_file_view, TRUE, FALSE, N_("open file in new window") }, { NULL, "--list-clear", gr_list_clear, FALSE, FALSE, NULL }, -- 2.20.1