[233] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[D-O-H] r410 - trunk/owl

daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:03:58 2009

Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
Date: Fri, 27 Oct 2006 13:17:20 -0400
To: dirty-owl-hackers@MIT.EDU
From: nelhage@MIT.EDU
Reply-To: dirty-owl-hackers@MIT.EDU

Author: nelhage
Date: 2006-10-27 13:17:18 -0400 (Fri, 27 Oct 2006)
New Revision: 410

Modified:
   trunk/owl/commands.c
   trunk/owl/functions.c
   trunk/owl/global.c
   trunk/owl/owl.h
   trunk/owl/perlglue.xs
Log:
Refactoring the editwin code somewhat, and adding the ability to hang
arbitrary reply commands off of messages.

Modified: trunk/owl/commands.c
===================================================================
--- trunk/owl/commands.c	2006-10-27 15:48:27 UTC (rev 409)
+++ trunk/owl/commands.c	2006-10-27 17:17:18 UTC (rev 410)
@@ -2378,7 +2378,7 @@
   /* if we get two arguments, ask for the password */
   if (argc==2) {
     owl_global_set_buffercommand(&g, argv[1]);
-    owl_global_set_buffercallback(&g, owl_function_aimlogin);
+    owl_global_set_buffercallback(&g, &owl_callback_aimlogin);
     owl_function_start_password("AIM Password: ");
     return(NULL);
   } else {

Modified: trunk/owl/functions.c
===================================================================
--- trunk/owl/functions.c	2006-10-27 15:48:27 UTC (rev 409)
+++ trunk/owl/functions.c	2006-10-27 17:17:18 UTC (rev 410)
@@ -319,7 +319,7 @@
   owl_global_set_typwin_active(&g);
 
   owl_global_set_buffercommand(&g, line);
-  owl_global_set_buffercallback(&g, &owl_function_zwrite);
+  owl_global_set_buffercallback(&g, &owl_callback_zwrite);
 }
 
 void owl_function_aimwrite_setup(char *line)
@@ -350,7 +350,7 @@
   owl_global_set_typwin_active(&g);
 
   owl_global_set_buffercommand(&g, line);
-  owl_global_set_buffercallback(&g, &owl_function_aimwrite);
+  owl_global_set_buffercallback(&g, &owl_callback_aimwrite);
 }
 
 void owl_function_loopwrite_setup()
@@ -375,9 +375,14 @@
   owl_global_set_typwin_active(&g);
 
   owl_global_set_buffercommand(&g, "loopwrite");
-  owl_global_set_buffercallback(&g, &owl_function_loopwrite);
+  owl_global_set_buffercallback(&g, &owl_callback_loopwrite);
 }
 
+void owl_callback_zwrite(owl_editwin *e) {
+  owl_function_zwrite(owl_editwin_get_command(e),
+                      owl_editwin_get_text(e));
+}
+
 /* send, log and display an outgoing zephyr.  If 'msg' is NULL
  * the message is expected to be set from the zwrite line itself
  */
@@ -485,6 +490,11 @@
   owl_zwrite_free(&z);
 }
 
+void owl_callback_aimwrite(owl_editwin *e) {
+  owl_function_aimwrite(owl_editwin_get_command(e),
+                        owl_editwin_get_text(e));
+}
+
 void owl_function_aimwrite(char *line, char *msg)
 {
   int ret;
@@ -561,7 +571,11 @@
   owl_free(format_msg);
 }
 
-void owl_function_loopwrite(char *line, char *msg)
+void owl_callback_loopwrite(owl_editwin *e) {
+  owl_function_loopwrite(owl_editwin_get_text(e));
+}
+
+void owl_function_loopwrite(char *msg)
 {
   owl_message *min, *mout;
 
@@ -933,6 +947,11 @@
   }
 }
 
+void owl_callback_aimlogin(owl_editwin *e) {
+  owl_function_aimlogin(owl_editwin_get_command(e),
+                        owl_global_get_response(&g));
+}
+
 void owl_function_aimlogin(char *user, char *passwd) {
   int ret;
 
@@ -1323,16 +1342,7 @@
 
 void owl_function_run_buffercommand()
 {
-  char *buff;
-  void (*cb)(char*, char*);
-
-  buff=owl_global_get_buffercommand(&g);
-  cb=owl_global_get_buffercallback(&g);
-  if(!cb) {
-    owl_function_error("Internal error: No callback for buffercommand %s", buff);
-  } else {
-    cb(buff, owl_editwin_get_text(owl_global_get_typwin(&g)));
-  }
+  owl_editwin_do_callback(owl_global_get_typwin(&g));
 }
 
 void owl_function_debugmsg(char *fmt, ...)
@@ -2166,17 +2176,21 @@
 	owl_free(tmp);
       }
       if (cc) owl_free(cc);
-    }
-
-    /* aim */
-    if (owl_message_is_type_aim(m)) {
+    } else if (owl_message_is_type_aim(m)) {
+      /* aim */
       if (owl_message_is_direction_out(m)) {
 	buff=owl_sprintf("aimwrite %s", owl_message_get_recipient(m));
       } else {
 	buff=owl_sprintf("aimwrite %s", owl_message_get_sender(m));
       }
+    } else {
+      char *cmd;
+      if((type==0 && (cmd=owl_message_get_attribute_value(m, "replycmd")))
+         || (type==1 && (cmd=owl_message_get_attribute_value(m, "replysendercmd")))) {
+        buff = owl_strdup(cmd);
+      }
     }
-    
+
     if (enter) {
       owl_history *hist = owl_global_get_cmd_history(&g);
       owl_history_store(hist, buff);

Modified: trunk/owl/global.c
===================================================================
--- trunk/owl/global.c	2006-10-27 15:48:27 UTC (rev 409)
+++ trunk/owl/global.c	2006-10-27 17:17:18 UTC (rev 410)
@@ -67,7 +67,6 @@
   g->searchactive=0;
   g->searchstring=NULL;
   g->starttime=time(NULL); /* assumes we call init only a start time */
-  g->buffercommand=NULL;
   g->newmsgproc_pid=0;
   
   owl_global_set_config_format(g, 0);
@@ -240,21 +239,19 @@
 /* buffercommand */
 
 void owl_global_set_buffercommand(owl_global *g, char *command) {
-  if (g->buffercommand) owl_free(g->buffercommand);
-  g->buffercommand=owl_strdup(command);
+  owl_editwin_set_command(owl_global_get_typwin(g), command);
 }
 
 char *owl_global_get_buffercommand(owl_global *g) {
-  if (g->buffercommand) return(g->buffercommand);
-  return("");
+  return owl_editwin_get_command(owl_global_get_typwin(g));
 }
 
-void owl_global_set_buffercallback(owl_global *g, void (*cb)(char*,char*)) {
-  g->buffercallback = cb;
+void owl_global_set_buffercallback(owl_global *g, void (*cb)(owl_editwin*)) {
+  owl_editwin_set_callback(owl_global_get_typwin(g), cb);
 }
 
-void (*owl_global_get_buffercallback(owl_global *g))(char*,char*) {
-  return g->buffercallback;
+void (*owl_global_get_buffercallback(owl_global *g))(owl_editwin*) {
+  return owl_editwin_get_callback(owl_global_get_typwin(g));
 }
 
 /* refresh */

Modified: trunk/owl/owl.h
===================================================================
--- trunk/owl/owl.h	2006-10-27 15:48:27 UTC (rev 409)
+++ trunk/owl/owl.h	2006-10-27 17:17:18 UTC (rev 410)
@@ -441,6 +441,10 @@
   int lock;
   int dotsend;
   int echochar;
+
+  char *command;
+  void (*callback)(struct _owl_editwin*);
+  void *cbdata;
 } owl_editwin;
 
 typedef struct _owl_mux {
@@ -535,8 +539,7 @@
   char *cur_zaway_msg;
   int haveconfig;
   int config_format;
-  char *buffercommand;
-  void (*buffercallback)(char *cmd, char *msg);
+  void *buffercbdata;
   owl_editwin tw;
   owl_viewwin vw;
   void *perl;

Modified: trunk/owl/perlglue.xs
===================================================================
--- trunk/owl/perlglue.xs	2006-10-27 15:48:27 UTC (rev 409)
+++ trunk/owl/perlglue.xs	2006-10-27 17:17:18 UTC (rev 410)
@@ -99,7 +99,7 @@
 		cmd.cmd_ctxi_fn = NULL;
 		owl_cmddict_add_cmd(owl_global_get_cmddict(&g), &cmd);
 
-void queue_message(msg)
+void queue_message(msg) 
 	SV *msg
 	PREINIT:
 		char * key;
@@ -110,6 +110,7 @@
 		I32 count;
 		I32 len;
 	CODE:
+	{
 		if(!SvROK(msg) || SvTYPE(SvRV(msg)) != SVt_PVHV) {
 			croak("Usage: owl::queue_message($message)");
 		}
@@ -130,5 +131,11 @@
 				owl_message_set_attribute(m, key, val);
 			}
 		}
+		owl_message_set_isprivate(m);
+		if(owl_message_is_type_admin(m)) {
+			if(!owl_message_get_attribute_value(m, "adminheader"))
+				owl_message_set_attribute(m, "adminheader", "");
+		} 
 
 		owl_global_messagequeue_addmsg(&g, m);
+	}


home help back first fref pref prev next nref lref last post