diff src/uicommon/gftpui.c @ 350:e5ad008e7ea8

2003-1-4 Brian Masney <masneyb@gftp.org> * src/uicommon/gftpui.c src/uicommon/gftpui.h src/uicommon/gftpuicallbacks.c - when switching between ascii/binary, set the option on a global basis. Converted chdir, chmod, delete, rename, rmdir commands over to using the new command run format so that it will work in the different UIs. Added site command to the command line.
author masneyb
date Sun, 04 Jan 2004 17:31:59 +0000
parents eedc2c5727fa
children 2ea37b3c0158
line wrap: on
line diff
--- a/src/uicommon/gftpui.c	Sun Jan 04 17:26:50 2004 +0000
+++ b/src/uicommon/gftpui.c	Sun Jan 04 17:31:59 2004 +0000
@@ -135,13 +135,7 @@
 static int
 gftpui_common_cmd_ascii (void *uidata, gftp_request * request, char *command)
 {
-  if (gftpui_common_local_request != NULL)
-    gftp_set_request_option (gftpui_common_local_request, "ascii_transfers",
-                             GINT_TO_POINTER(1));
-
-  if (gftpui_common_remote_request != NULL)
-    gftp_set_request_option (gftpui_common_remote_request, "ascii_transfers",
-                             GINT_TO_POINTER(1));
+  gftp_set_global_option ("ascii_transfers", GINT_TO_POINTER(1));
   return (1);
 }
 
@@ -149,13 +143,7 @@
 static int
 gftpui_common_cmd_binary (void *uidata, gftp_request * request, char *command)
 {
-  if (gftpui_common_local_request != NULL)
-    gftp_set_request_option (gftpui_common_local_request, "ascii_transfers",
-                             GINT_TO_POINTER(0));
-
-  if (gftpui_common_remote_request != NULL)
-    gftp_set_request_option (gftpui_common_remote_request, "ascii_transfers",
-                             GINT_TO_POINTER(0));
+  gftp_set_global_option ("ascii_transfers", GINT_TO_POINTER(0));
   return (1);
 }
 
@@ -163,6 +151,7 @@
 static int
 gftpui_common_cmd_chmod (void *uidata, gftp_request * request, char *command)
 {
+  gftpui_callback_data * cdata;
   char *pos;
 
   if (!GFTP_IS_CONNECTED (request))
@@ -183,8 +172,16 @@
     }
   else
     {
-      if (gftp_chmod (request, pos, strtol (command, NULL, 10)) == 0)
-        gftp_delete_cache_entry (request, NULL, 0);
+      cdata = g_malloc0 (sizeof (*cdata));
+      cdata->request = request;
+      cdata->uidata = uidata;
+      cdata->input_string = command;
+      cdata->source_string = pos;
+      cdata->run_function = gftpui_common_run_chmod;
+
+      gftpui_common_run_callback_function (cdata);
+
+      g_free (cdata);
     }
 
   return (1);
@@ -194,6 +191,7 @@
 static int
 gftpui_common_cmd_rename (void *uidata, gftp_request * request, char *command)
 {
+  gftpui_callback_data * cdata;
   char *pos;
   
   if (!GFTP_IS_CONNECTED (request))
@@ -213,8 +211,16 @@
     }
   else
     {
-      if (gftp_rename_file (request, command, pos) == 0)
-        gftp_delete_cache_entry (request, NULL, 0);
+      cdata = g_malloc0 (sizeof (*cdata));
+      cdata->request = request;
+      cdata->uidata = uidata;
+      cdata->source_string = command;
+      cdata->input_string = pos;
+      cdata->run_function = gftpui_common_run_rename;
+
+      gftpui_common_run_callback_function (cdata);
+
+      g_free (cdata);
     }
 
   return (1);
@@ -224,6 +230,8 @@
 static int
 gftpui_common_cmd_delete (void *uidata, gftp_request * request, char *command)
 {
+  gftpui_callback_data * cdata;
+
   if (!GFTP_IS_CONNECTED (request))
     {
       request->logging_function (gftp_logging_error, request,
@@ -237,8 +245,15 @@
     }
   else
     {
-      if (gftp_remove_file (request, command) == 0)
-        gftp_delete_cache_entry (request, NULL, 0);
+      cdata = g_malloc0 (sizeof (*cdata));
+      cdata->request = request;
+      cdata->uidata = uidata;
+      cdata->input_string = command;
+      cdata->run_function = gftpui_common_run_delete;
+
+      gftpui_common_run_callback_function (cdata);
+
+      g_free (cdata);
     }
 
   return (1);
@@ -248,6 +263,8 @@
 static int
 gftpui_common_cmd_rmdir (void *uidata, gftp_request * request, char *command)
 {
+  gftpui_callback_data * cdata;
+
   if (!GFTP_IS_CONNECTED (request))
     {
       request->logging_function (gftp_logging_error, request,
@@ -261,8 +278,48 @@
     }
   else
     {
-      if (gftp_remove_directory (request, command) == 0)
-        gftp_delete_cache_entry (request, NULL, 0);
+      cdata = g_malloc0 (sizeof (*cdata));
+      cdata->request = request;
+      cdata->uidata = uidata;
+      cdata->input_string = command;
+      cdata->run_function = gftpui_common_run_rmdir;
+
+      gftpui_common_run_callback_function (cdata);
+
+      g_free (cdata);
+    }
+
+  return (1);
+}
+
+
+static int
+gftpui_common_cmd_site (void *uidata, gftp_request * request, char *command)
+{
+  gftpui_callback_data * cdata;
+
+  if (!GFTP_IS_CONNECTED (request))
+    {
+      request->logging_function (gftp_logging_error, request,
+                                 _("Error: Not connected to a remote site\n"));
+      return (1);
+    }
+  else if (*command == '\0')
+    {
+      request->logging_function (gftp_logging_error, request,
+                     _("usage: site <site command>\n"));
+    }
+  else
+    {
+      cdata = g_malloc0 (sizeof (*cdata));
+      cdata->request = request;
+      cdata->uidata = uidata;
+      cdata->input_string = command;
+      cdata->run_function = gftpui_common_run_site;
+
+      gftpui_common_run_callback_function (cdata);
+
+      g_free (cdata);
     }
 
   return (1);
@@ -274,7 +331,6 @@
 {
   gftpui_callback_data * cdata;
 
-
   if (!GFTP_IS_CONNECTED (request))
     {
       request->logging_function (gftp_logging_error, request,
@@ -306,6 +362,7 @@
 static int
 gftpui_common_cmd_chdir (void *uidata, gftp_request * request, char *command)
 {
+  gftpui_callback_data * cdata;
   char *tempstr, *newdir = NULL;
 
   if (!GFTP_IS_CONNECTED (request))
@@ -324,7 +381,7 @@
     {
       if (*command != '/' && request->directory != NULL)
         {
-          tempstr = g_strconcat (request->directory, "/", command, NULL);
+          tempstr = gftp_build_path (request->directory, command, NULL);
           newdir = expand_path (tempstr);
           g_free (tempstr);
         }
@@ -339,8 +396,15 @@
         }
     }
 
-  if (gftp_set_directory (request, newdir != NULL ? newdir : command) == 0)
-    gftpui_refresh (uidata);
+  cdata = g_malloc0 (sizeof (*cdata));
+  cdata->request = request;
+  cdata->uidata = uidata;
+  cdata->input_string = newdir != NULL ? newdir : command;
+  cdata->run_function = gftpui_common_run_chdir;
+
+  gftpui_common_run_callback_function (cdata);
+
+  g_free (cdata);
 
   if (newdir != NULL)
     g_free (newdir);
@@ -460,7 +524,8 @@
   while ((got = gftp_get_next_file (request, NULL, fle)) > 0 ||
          got == GFTP_ERETRYABLE)
     {
-      if (got < 0 || strcmp (fle->file, ".") == 0)
+      if (got < 0 || strcmp (fle->file, ".") == 0 ||
+          !gftp_match_filespec (fle->file, filespec))
         {
           gftp_file_destroy (fle);
           continue;
@@ -695,7 +760,7 @@
          N_("Available options: cache"), gftpui_common_clear_show_subhelp},
         {N_("close"),   3, gftpui_common_cmd_close, gftpui_common_request_remote,
          N_("Disconnects from the remote site"), NULL},
-        {N_("delete"),  1, gftpui_common_cmd_delete,    gftpui_common_request_remote,
+        {N_("delete"),  1, gftpui_common_cmd_delete, gftpui_common_request_remote,
          N_("Removes a remote file"), NULL},
 /* FIXME
         {N_("get"),     1, gftp_text_mget_file, gftpui_common_request_none,
@@ -747,6 +812,8 @@
          N_("Remove a remote directory"), NULL},
         {N_("set"),     1, gftpui_common_cmd_set, gftpui_common_request_none,
          N_("Show configuration file variables. You can also set variables by set var=val"), gftpui_common_set_show_subhelp},
+        {N_("site"),    2, gftpui_common_cmd_site, gftpui_common_request_remote,
+         N_("Run a site specific command"), NULL},
         {NULL,          0, NULL,                gftpui_common_request_none,
 	 NULL, NULL}};