[233] in BarnOwl Developers
[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);
+ }