[852] in BarnOwl Developers
[D-O-H] r842 - branches/barnowl_sqlite/owl
daemon@ATHENA.MIT.EDU (nelhage@MIT.EDU)
Thu Oct 29 18:10:24 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
To: dirty-owl-hackers@mit.edu
From: nelhage@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Fri, 11 Jan 2008 22:50:22 -0500 (EST)
Author: nelhage
Date: 2008-01-11 22:50:21 -0500 (Fri, 11 Jan 2008)
New Revision: 842
Modified:
branches/barnowl_sqlite/owl/aim.c
branches/barnowl_sqlite/owl/buddylist.c
branches/barnowl_sqlite/owl/functions.c
branches/barnowl_sqlite/owl/message.c
branches/barnowl_sqlite/owl/owl.h
branches/barnowl_sqlite/owl/perlconfig.c
branches/barnowl_sqlite/owl/zephyr.c
Log:
Abstract over message creation. Trust me, I'm going somewhere with this.
Modified: branches/barnowl_sqlite/owl/aim.c
===================================================================
--- branches/barnowl_sqlite/owl/aim.c 2008-01-12 03:40:17 UTC (rev 841)
+++ branches/barnowl_sqlite/owl/aim.c 2008-01-12 03:50:21 UTC (rev 842)
@@ -1459,7 +1459,7 @@
stripmsg=owl_text_htmlstrip(realmsg);
wrapmsg=owl_text_wordwrap(stripmsg, 70);
nz_screenname=owl_aim_normalize_screenname(userinfo->sn);
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_aim(m,
nz_screenname,
owl_global_get_aim_screenname(&g),
Modified: branches/barnowl_sqlite/owl/buddylist.c
===================================================================
--- branches/barnowl_sqlite/owl/buddylist.c 2008-01-12 03:40:17 UTC (rev 841)
+++ branches/barnowl_sqlite/owl/buddylist.c 2008-01-12 03:50:21 UTC (rev 842)
@@ -53,7 +53,7 @@
if (!owl_timer_is_expired(owl_global_get_aim_login_timer(&g))) return;
/* if not, create the login message */
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_aim(m,
screenname,
owl_global_get_aim_screenname(&g),
@@ -72,7 +72,7 @@
owl_message *m;
if (owl_buddylist_is_aim_buddy_loggedin(bl, screenname)) {
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_aim(m,
screenname,
owl_global_get_aim_screenname(&g),
Modified: branches/barnowl_sqlite/owl/functions.c
===================================================================
--- branches/barnowl_sqlite/owl/functions.c 2008-01-12 03:40:17 UTC (rev 841)
+++ branches/barnowl_sqlite/owl/functions.c 2008-01-12 03:50:21 UTC (rev 842)
@@ -170,7 +170,7 @@
{
owl_message *m;
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_admin(m, header, body);
/* add it to the global list and current view */
@@ -202,7 +202,7 @@
owl_zwrite_create_from_line(&z, zwriteline);
/* create the message */
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_from_zwriteline(m, zwriteline, body, zsig);
owl_zwrite_free(&z);
@@ -221,7 +221,7 @@
/* error if we're not logged into aim */
if (!owl_global_is_aimloggedin(&g)) return(NULL);
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_aim(m,
owl_global_get_aim_screenname(&g),
to,
@@ -240,7 +240,7 @@
owl_message *m;
/* create the message */
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_loopback(m, body);
owl_message_set_direction_out(m);
@@ -524,7 +524,7 @@
/* create a message and put it on the message queue. This simulates
* an incoming message */
- min=owl_malloc(sizeof(owl_message));
+ min=owl_message_new();
mout=owl_function_make_outgoing_loopback(msg);
if (owl_global_is_displayoutgoing(&g)) {
@@ -3648,7 +3648,7 @@
if ((numlocs>0) && !owl_zbuddylist_contains_user(zbl, user)) {
/* Send a PSEUDO LOGIN! */
if (notify) {
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_pseudo_zlogin(m, 0, user, location[0].host, location[0].time, location[0].tty);
owl_global_messagequeue_addmsg(&g, m);
}
@@ -3663,7 +3663,7 @@
} else if ((ret==ZERR_NOLOCATIONS) && owl_zbuddylist_contains_user(zbl, user)) {
/* Send a PSEUDO LOGOUT! */
if (notify) {
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_pseudo_zlogin(m, 1, user, "", "", "");
owl_global_messagequeue_addmsg(&g, m);
}
Modified: branches/barnowl_sqlite/owl/message.c
===================================================================
--- branches/barnowl_sqlite/owl/message.c 2008-01-12 03:40:17 UTC (rev 841)
+++ branches/barnowl_sqlite/owl/message.c 2008-01-12 03:50:21 UTC (rev 842)
@@ -15,27 +15,10 @@
static owl_fmtext_cache fmtext_cache[OWL_FMTEXT_CACHE_SIZE];
static owl_fmtext_cache * fmtext_cache_next = fmtext_cache;
-void owl_message_init_fmtext_cache ()
-{
- int i;
- for(i = 0; i < OWL_FMTEXT_CACHE_SIZE; i++) {
- owl_fmtext_init_null(&(fmtext_cache[i].fmtext));
- fmtext_cache[i].message = NULL;
- }
+owl_message *owl_message_new() {
+ return (owl_message*)owl_malloc(sizeof(owl_message));
}
-owl_fmtext_cache * owl_message_next_fmtext() /*noproto*/
-{
- owl_fmtext_cache * f = fmtext_cache_next;
- if(fmtext_cache_next->message != NULL) {
- owl_message_invalidate_format(fmtext_cache_next->message);
- }
- fmtext_cache_next++;
- if(fmtext_cache_next - fmtext_cache == OWL_FMTEXT_CACHE_SIZE)
- fmtext_cache_next = fmtext_cache;
- return f;
-}
-
void owl_message_init(owl_message *m)
{
m->id=owl_global_get_nextmsgid(&g);
@@ -130,37 +113,10 @@
}
}
-void owl_message_invalidate_format(owl_message *m)
-{
- if(m->fmtext) {
- m->fmtext->message = NULL;
- owl_fmtext_clear(&(m->fmtext->fmtext));
- m->fmtext=NULL;
- }
+int owl_message_get_id(owl_message *m) {
+ return m->id;
}
-owl_fmtext *owl_message_get_fmtext(owl_message *m)
-{
- owl_message_format(m);
- return(&(m->fmtext->fmtext));
-}
-
-void owl_message_format(owl_message *m)
-{
- owl_style *s;
- owl_view *v;
-
- if (!m->fmtext) {
- m->fmtext = owl_message_next_fmtext();
- m->fmtext->message = m;
- /* for now we assume there's just the one view and use that style */
- v=owl_global_get_current_view(&g);
- s=owl_view_get_style(v);
-
- owl_style_get_formattext(s, &(m->fmtext->fmtext), m);
- }
-}
-
void owl_message_set_class(owl_message *m, char *class)
{
owl_message_set_attribute(m, "class", class);
@@ -419,12 +375,6 @@
return(0);
}
-char *owl_message_get_text(owl_message *m)
-{
- owl_message_format(m);
- return(owl_fmtext_get_text(&(m->fmtext->fmtext)));
-}
-
void owl_message_set_direction_in(owl_message *m)
{
m->direction=OWL_MESSAGE_DIRECTION_IN;
@@ -463,13 +413,6 @@
return(0);
}
-int owl_message_get_numlines(owl_message *m)
-{
- if (m == NULL) return(0);
- owl_message_format(m);
- return(owl_fmtext_num_lines(&(m->fmtext->fmtext)));
-}
-
void owl_message_mark_delete(owl_message *m)
{
if (m == NULL) return;
@@ -524,35 +467,6 @@
return(m->hostname);
}
-void owl_message_curs_waddstr(owl_message *m, WINDOW *win, int aline, int bline, int acol, int bcol, int fgcolor, int bgcolor)
-{
- owl_fmtext a, b;
-
- /* this will ensure that our cached copy is up to date */
- owl_message_format(m);
-
- owl_fmtext_init_null(&a);
- owl_fmtext_init_null(&b);
-
- owl_fmtext_truncate_lines(&(m->fmtext->fmtext), aline, bline-aline+1, &a);
- owl_fmtext_truncate_cols(&a, acol, bcol, &b);
- if (fgcolor!=OWL_COLOR_DEFAULT) {
- owl_fmtext_colorize(&b, fgcolor);
- }
- if (bgcolor!=OWL_COLOR_DEFAULT) {
- owl_fmtext_colorizebg(&b, bgcolor);
- }
-
- if (owl_global_is_search_active(&g)) {
- owl_fmtext_search_and_highlight(&b, owl_global_get_search_string(&g));
- }
-
- owl_fmtext_curs_waddstr(&b, win);
-
- owl_fmtext_free(&a);
- owl_fmtext_free(&b);
-}
-
int owl_message_is_personal(owl_message *m)
{
owl_filter * f = owl_global_get_filter(&g, "personal");
@@ -701,11 +615,6 @@
return(out);
}
-int owl_message_get_id(owl_message *m)
-{
- return(m->id);
-}
-
char *owl_message_get_type(owl_message *m) {
char * type = owl_message_get_attribute_value(m, "type");
if(!type) {
@@ -759,9 +668,7 @@
int owl_message_search(owl_message *m, char *string)
{
- owl_message_format(m); /* is this necessary? */
-
- return (owl_fmtext_search(&(m->fmtext->fmtext), string));
+ return (owl_fmtext_search(owl_message_get_fmtext(m), string));
}
@@ -1059,3 +966,115 @@
owl_message_invalidate_format(m);
}
+
+
+/**********************************************************************
+ * Functions related to message styling and formatting
+ **********************************************************************/
+
+#define NO_MESSAGE (-1);
+void owl_message_init_fmtext_cache ()
+{
+ int i;
+ for(i = 0; i < OWL_FMTEXT_CACHE_SIZE; i++) {
+ owl_fmtext_init_null(&(fmtext_cache[i].fmtext));
+ fmtext_cache[i].message_id = NO_MESSAGE;
+ }
+}
+
+owl_fmtext_cache * owl_message_next_fmtext() /*noproto*/
+{
+ owl_fmtext_cache * f = fmtext_cache_next;
+ fmtext_cache_next++;
+ if(fmtext_cache_next - fmtext_cache == OWL_FMTEXT_CACHE_SIZE)
+ fmtext_cache_next = fmtext_cache;
+ owl_fmtext_clear(&(f->fmtext));
+ f->message_id = NO_MESSAGE;
+ return f;
+}
+
+void owl_message_invalidate_format(owl_message *m)
+{
+ owl_fmtext_cache * fmtext = owl_message_get_fmtext_cache(m);
+ if(fmtext) {
+ fmtext->message_id = NO_MESSAGE;
+ owl_fmtext_clear(&(m->fmtext->fmtext));
+ owl_message_set_fmtext_cache(m, NULL);
+ }
+}
+
+owl_fmtext_cache *owl_message_get_fmtext_cache(owl_message *m)
+{
+ return m->fmtext;
+}
+
+void owl_message_set_fmtext_cache(owl_message *m, owl_fmtext_cache *fm)
+{
+ m->fmtext = fm;
+}
+
+owl_fmtext *owl_message_get_fmtext(owl_message *m)
+{
+ owl_message_format(m);
+ return(&(owl_message_get_fmtext_cache(m)->fmtext));
+}
+
+void owl_message_format(owl_message *m)
+{
+ owl_style *s;
+ owl_view *v;
+ owl_fmtext_cache *fm;
+
+ fm = owl_message_get_fmtext_cache(m);
+
+ if (!fm || fm->message_id != owl_message_get_id(m)) {
+ fm = owl_message_next_fmtext();
+ owl_message_set_fmtext_cache(m, fm);
+ fm->message_id = owl_message_get_id(m);
+ /* for now we assume there's just the one view and use that style */
+ v=owl_global_get_current_view(&g);
+ s=owl_view_get_style(v);
+
+ owl_style_get_formattext(s, &(fm->fmtext), m);
+ }
+}
+
+char *owl_message_get_text(owl_message *m)
+{
+ return(owl_fmtext_get_text(owl_message_get_fmtext(m)));
+}
+
+int owl_message_get_numlines(owl_message *m)
+{
+ if (m == NULL) return(0);
+ return(owl_fmtext_num_lines(owl_message_get_fmtext(m)));
+}
+
+void owl_message_curs_waddstr(owl_message *m, WINDOW *win, int aline, int bline, int acol, int bcol, int fgcolor, int bgcolor)
+{
+ owl_fmtext a, b;
+
+ owl_fmtext *fm = owl_message_get_fmtext(m);
+
+ owl_fmtext_init_null(&a);
+ owl_fmtext_init_null(&b);
+
+ owl_fmtext_truncate_lines(fm, aline, bline-aline+1, &a);
+ owl_fmtext_truncate_cols(&a, acol, bcol, &b);
+ if (fgcolor!=OWL_COLOR_DEFAULT) {
+ owl_fmtext_colorize(&b, fgcolor);
+ }
+ if (bgcolor!=OWL_COLOR_DEFAULT) {
+ owl_fmtext_colorizebg(&b, bgcolor);
+ }
+
+ if (owl_global_is_search_active(&g)) {
+ owl_fmtext_search_and_highlight(&b, owl_global_get_search_string(&g));
+ }
+
+ owl_fmtext_curs_waddstr(&b, win);
+
+ owl_fmtext_free(&a);
+ owl_fmtext_free(&b);
+}
+
Modified: branches/barnowl_sqlite/owl/owl.h
===================================================================
--- branches/barnowl_sqlite/owl/owl.h 2008-01-12 03:40:17 UTC (rev 841)
+++ branches/barnowl_sqlite/owl/owl.h 2008-01-12 03:50:21 UTC (rev 842)
@@ -334,6 +334,7 @@
struct _owl_fmtext_cache;
+// typedef SV owl_message;
typedef struct _owl_message {
int id;
int direction;
@@ -343,7 +344,7 @@
struct _owl_fmtext_cache * fmtext;
int delete;
char *hostname;
- owl_list attributes; /* this is a list of pairs */
+ owl_list attributes; // this is a list of pairs
char *timestr;
time_t time;
char *zwriteline;
@@ -353,7 +354,7 @@
/* We cache the saved fmtexts for the last bunch of messages we
rendered */
typedef struct _owl_fmtext_cache {
- owl_message * message;
+ int message_id;
owl_fmtext fmtext;
} owl_fmtext_cache;
Modified: branches/barnowl_sqlite/owl/perlconfig.c
===================================================================
--- branches/barnowl_sqlite/owl/perlconfig.c 2008-01-12 03:40:17 UTC (rev 841)
+++ branches/barnowl_sqlite/owl/perlconfig.c 2008-01-12 03:50:21 UTC (rev 842)
@@ -140,7 +140,7 @@
hash = (HV*)SvRV(msg);
- m = owl_malloc(sizeof(owl_message));
+ m = owl_message_new();
owl_message_init(m);
count = hv_iterinit(hash);
Modified: branches/barnowl_sqlite/owl/zephyr.c
===================================================================
--- branches/barnowl_sqlite/owl/zephyr.c 2008-01-12 03:40:17 UTC (rev 841)
+++ branches/barnowl_sqlite/owl/zephyr.c 2008-01-12 03:50:21 UTC (rev 842)
@@ -564,7 +564,7 @@
} else if (!strcmp(retnotice->z_message, ZSRVACK_NOTSENT)) {
#define BUFFLEN 1024
if (retnotice->z_recipient == NULL
- || *retnotice->z_recipient == NULL
+ || *retnotice->z_recipient == 0
|| *retnotice->z_recipient == '@') {
char buff[BUFFLEN];
owl_function_error("No one subscribed to class %s", retnotice->z_class);
@@ -1097,7 +1097,7 @@
}
/* create the new message */
- m=owl_malloc(sizeof(owl_message));
+ m=owl_message_new();
owl_message_create_from_znotice(m, ¬ice);
owl_global_messagequeue_addmsg(&g, m);