[ekg2-commit] ekg2: jogger.c (HEAD) messages.c (HEAD) [peres]

CVS commit cvs w toxygen.net
Pią, 4 Maj 2007, 17:55:18 CEST


Module name:	ekg2
Changes by:	peres	2007-05-04 17:55:16

Modified files:
	jogger.c messages.c

Log message:
First really working version.
- new comment/entry notification.
- outgoing messages refetch.
- blah blah blah.

Index: jogger.c
===================================================================
RCS file: /home/cvs/ekg2/plugins/jogger/jogger.c,v
diff -d -u -r1.4 -r1.5
--- jogger.c	4 May 2007 13:48:18 -0000	1.4
+++ jogger.c	4 May 2007 15:55:16 -0000	1.5
@@ -174,18 +174,22 @@
 static int jogger_theme_init(void) {
 #ifndef NO_DEFAULT_THEME
 	format_add("jogger_noentry", _("%> (%1) No thread with id %2 found."), 1);
-	format_add("jogger_subscribed", _("%> (%1) The thread '%2' has been subscribed."), 1);
-	format_add("jogger_unsubscribed", _("%> (%1) The thread '%2' has been unsubscribed."), 1);
+	format_add("jogger_subscribed", _("%>%| (%1) The thread '%2' has been subscribed."), 1);
+	format_add("jogger_unsubscribed", _("%>%| (%1) The thread '%2' has been unsubscribed."), 1);
 	format_add("jogger_subscription_denied", _("%! (%1) Subscription denied because of no permission."), 1);
 	format_add("jogger_unsubscribed_earlier", _("%> (%1) The thread weren't subscribed."), 1);
+	format_add("jogger_comment_added", _("%)%| (%1) Your comment was added to entry %c%2%n."), 1);
 
-	format_add("jogger_published", _("%)%| (%1) Your new entry has been published as:\n\t%c%2"), 1);
+	format_add("jogger_modified", _("%>%| (%1) Subscribed entry has been modified: %c%2%n."), 1);
+
+	format_add("jogger_published", _("%)%| (%1) Your new entry has been published as: %c%2%n."), 1);
 #endif
 	return 0;
 }
 
 static plugins_params_t jogger_plugin_vars[] = {
 	PLUGIN_VAR_ADD("log_formats", 		SESSION_VAR_LOG_FORMATS, VAR_STR, "simple", 0, NULL),
+	PLUGIN_VAR_ADD("newentry_open_query",	0, VAR_BOOL, "0", 0, NULL),
 	PLUGIN_VAR_ADD("own_commentformat",	0, VAR_STR, NULL, 0, NULL),
 	PLUGIN_VAR_ADD("used_session",		0, VAR_STR, NULL, 0, jogger_usedchanged),
 	PLUGIN_VAR_ADD("used_uid",		0, VAR_STR, NULL, 0, jogger_usedchanged),

Index: messages.c
===================================================================
RCS file: /home/cvs/ekg2/plugins/jogger/messages.c,v
diff -d -u -r1.4 -r1.5
--- messages.c	4 May 2007 13:48:18 -0000	1.4
+++ messages.c	4 May 2007 15:55:16 -0000	1.5
@@ -16,11 +16,14 @@
  */
 
 #include <stdlib.h>
+#include <string.h>
 
 #include <ekg/commands.h>
 #include <ekg/debug.h>
 #include <ekg/plugins.h>
 #include <ekg/protocol.h>
+#include <ekg/queries.h>
+#include <ekg/sessions.h>
 #include <ekg/stuff.h>
 #include <ekg/userlist.h>
 #include <ekg/xmalloc.h>
@@ -34,8 +37,8 @@
 	"Do Twojego joggera został dodany komentarz",		/* [0] url (#eid[ / Texti*])\n----------------\n */
 	"Pojawil sie nowy komentarz do wpisu",			/* [1] as above */
 
-	"Wpis",							/* [2] url + below */
-	"został zmodyfikowany",					/* [3] */
+	"Wpis",							/* [2] */
+	"został zmodyfikowany",					/* url [3] */
 	"nie istnieje",						/* n [4] */
 
 	"Dodano wpis:",						/* [5] url */
@@ -47,16 +50,18 @@
 
 	"Brak uprawnień do śledzenia tego wpisu",		/* [10] */
 	"Wpis nie był śledzony",				/* [11] */
-	/* XXX: entry added */					/* [12] */
+	"Do śledzonego joggera został dodany nowy wpis:",	/* [12] url (#eid[ / Texti*]) */
 };
 
-char *jogger_text[12];
+#define JOGGER_TEXT_MAX 13
+
+char *jogger_text[JOGGER_TEXT_MAX];
 
 void localize_texts() {
 	int i;
 	void *p = ekg_convert_string_init("UTF-8", NULL, NULL);
 
-	for (i = 0; i < 12; i++) {
+	for (i = 0; i < JOGGER_TEXT_MAX; i++) {
 		char *s = ekg_convert_string_p(utf_jogger_text[i], p);
 
 		if (!s)
@@ -69,77 +74,160 @@
 void free_texts() {
 	int i;
 
-	for (i = 0; i < 12; i++)
+	for (i = 0; i < JOGGER_TEXT_MAX; i++)
 		xfree(jogger_text[i]);
 }
 
 QUERY(jogger_msghandler) {
 	const char *suid	= *(va_arg(ap, const char **));
-	char **uid		= va_arg(ap, char **);
-								{ char ***UNUSED(rcpts)	= va_arg(ap, char ***); }
-	char **msg		= va_arg(ap, char **);
-								{ uint32_t *UNUSED(format) = va_arg(ap, uint32_t *); }
-	const time_t sent	= *(va_arg(ap, const time_t *));
+	const char *uid		= *(va_arg(ap, char **));
+	char **rcpts		= *(va_arg(ap, char ***));
+	const char *msg		= *(va_arg(ap, char **));
+								{ uint32_t **UNUSED(format) = va_arg(ap, uint32_t **); }
+	time_t sent		= *(va_arg(ap, const time_t *));
 	const int class		= *(va_arg(ap, const int *));
+	const char *seq		= *(va_arg(ap, char**));
+	const int dobeep	= *(va_arg(ap, int*));
+	const int secure	= *(va_arg(ap, int*));
 
 	session_t *s		= session_find(suid);
 	session_t *js;
 
-	if (!s || !(js = jogger_session_find_uid(s, *uid)))
-		return 0;
-
 	if (class == EKG_MSGCLASS_MESSAGE || class == EKG_MSGCLASS_CHAT) { /* incoming */
+		if (!s || !(js = jogger_session_find_uid(s, uid)))
+			return 0;
+
 		const char *owncf = session_get(js, "own_commentformat");
+		int found = 0;
 
-		if (!xstrncmp(*msg, jogger_text[0], xstrlen(jogger_text[0]))) {
-			/* own jogger comment */
-		}
-		if (owncf && !xstrncmp(*msg, owncf, xstrlen(owncf))) {
-			/* own jogger comment (custom ack format) */
-		}
-		if (!xstrncmp(*msg, jogger_text[1], xstrlen(jogger_text[1]))) {
-			/* other jogger comment */
-		}
-		if (!xstrncmp(*msg, jogger_text[2], xstrlen(jogger_text[2]))) {
+		if (!xstrncmp(msg, jogger_text[0], xstrlen(jogger_text[0])))
+			found = 1; /* own jogger comment */
+		else if (owncf && !xstrncmp(msg, owncf, xstrlen(owncf)))
+			found = 2; /* as above, but with custom text */
+		else if (!xstrncmp(msg, jogger_text[1], xstrlen(jogger_text[1])))
+			found = 3; /* other jogger comment */
+		else if (!xstrncmp(msg, jogger_text[12], xstrlen(jogger_text[12])))
+			found = 4; /* new jogger entry */
+
+		if (!xstrncmp(msg, jogger_text[2], xstrlen(jogger_text[2]))) {
 			char *tmp;
 
-			/* XXX: [3] */
-			if ((tmp = xstrstr(*msg, jogger_text[4]))) {
+			if ((tmp = xstrstr(msg, jogger_text[3]))) {
+					/* XXX: msg instead? */
 				*(tmp-1) = '\0';
-				print("jogger_noentry", session_name(js), *msg+xstrlen(jogger_text[2])+1);
+				print("jogger_modified", session_name(js), msg+xstrlen(jogger_text[2])+1);
+				*(tmp-1) = ' ';
+				return -1;
+			}
+			if ((tmp = xstrstr(msg, jogger_text[4]))) {
+				*(tmp-1) = '\0';
+				print("jogger_noentry", session_name(js), msg+xstrlen(jogger_text[2])+1);
 				*(tmp-1) = ' ';
 				return -1;
 			}
 		}
-		if (!xstrncmp(*msg, jogger_text[5], xstrlen(jogger_text[5]))) {
-			print("jogger_published", session_name(js), *msg+xstrlen(jogger_text[5])+1);
+		if (!xstrncmp(msg, jogger_text[5], xstrlen(jogger_text[5]))) {
+			print("jogger_published", session_name(js), msg+xstrlen(jogger_text[5])+1);
 			return -1;
 		}
-		if (!xstrncmp(*msg, jogger_text[7], xstrlen(jogger_text[7]))) {
+		if (!xstrncmp(msg, jogger_text[6], xstrlen(jogger_text[6]))) {
+			print("jogger_comment_added", session_name(js), msg+xstrlen(jogger_text[6])+1);
+			return -1;
+		}
+		if (!xstrncmp(msg, jogger_text[7], xstrlen(jogger_text[7]))) {
 			char *tmp;
 
-			if ((tmp = xstrstr(*msg, jogger_text[8]))) {
+			if ((tmp = xstrstr(msg, jogger_text[8]))) {
 				*(tmp-1) = '\0';
-				print("jogger_unsubscribed", session_name(js), *msg+xstrlen(jogger_text[7])+1);
+				print("jogger_unsubscribed", session_name(js), msg+xstrlen(jogger_text[7])+1);
 				*(tmp-1) = ' ';
 				return -1;
 			}
-			if ((tmp = xstrstr(*msg, jogger_text[9]))) {
+			if ((tmp = xstrstr(msg, jogger_text[9]))) {
 				*(tmp-1) = '\0';
-				print("jogger_subscribed", session_name(js), *msg+xstrlen(jogger_text[7])+1);
+				print("jogger_subscribed", session_name(js), msg+xstrlen(jogger_text[7])+1);
 				*(tmp-1) = ' ';
 				return -1;
 			}
 		}
-		if (!xstrncmp(*msg, jogger_text[10], xstrlen(jogger_text[10]))) {
+		if (!xstrncmp(msg, jogger_text[10], xstrlen(jogger_text[10]))) {
 			print("jogger_subscription_denied", session_name(js));
 			return -1;
 		}
-		if (!xstrncmp(*msg, jogger_text[11], xstrlen(jogger_text[11]))) {
+		if (!xstrncmp(msg, jogger_text[11], xstrlen(jogger_text[11]))) {
 			print("jogger_unsubscribed_earlier", session_name(js));
 			return -1;
 		}
+
+		if (found == 0)
+			return 0;
+
+		if (found <= 4) { /* we get id here */
+			const char *tmp = xstrstr(msg, " (#");
+
+			if (tmp) {
+				const int oq	= (session_int_get(js, "newentry_open_query") || (found < 4));
+				char *suid, *uid, *msg;
+				char **rcpts	= NULL;
+				uint32_t *fmt	= NULL;
+				
+				if (found == 4)
+					msg	= xstrdup(msg+xstrlen(jogger_text[12])+1);
+				else {
+						/* XXX: store URL somewhere (nickname?) */
+					if (!(msg = xstrchr(tmp, '\n')) || !(msg = xstrchr(msg+1, '\n')))
+						return 0;
+					msg	= xstrdup(msg+1);
+				}
+
+				if (oq)
+					uid	= saprintf("jogger:%d", atoi(tmp+3));
+				else
+					uid	= xstrdup("jogger:");
+				suid		= xstrdup(session_uid_get(js));
+
+				query_emit_id(NULL, PROTOCOL_MESSAGE, &suid, &uid, &rcpts, &msg, &fmt, &sent, &class, &seq, &dobeep, &secure);
+
+				xfree(suid);
+				xfree(uid);
+				xfree(msg);
+				return -1;
+			}
+		}
 	} else if (class == EKG_MSGCLASS_SENT || class == EKG_MSGCLASS_SENT_CHAT) { /* outgoing */
+		if (!s || !rcpts || !rcpts[0] || !(js = jogger_session_find_uid(s, rcpts[0])))
+			return 0;
+
+		char *suid, *uid;
+		char *lmsg	= (char*) msg;
+		char *rcpts[2]	= { NULL, NULL };
+		char **rcptsb	= &rcpts;
+		uint32_t *fmt	= NULL;
+
+		if (*lmsg == '#') {
+			int n;
+			char *tmp;
+
+			if ((*(++lmsg) == '-') || (*lmsg == '+')) /* throw away subscriptions */
+				return -1;
+			if ((n = atoi(lmsg)) && (tmp = xstrchr(lmsg, ' '))) { /* comment */
+				lmsg		= tmp+1;
+				rcpts[0]	= saprintf("jogger:%d", n);
+			}
+		}
+		
+		lmsg		= xstrdup(lmsg);
+		suid		= xstrdup(session_uid_get(js));
+		uid		= xstrdup(suid);
+		if (!rcpts[0])
+			rcpts[0]	= xstrdup("jogger:");
+
+		query_emit_id(NULL, PROTOCOL_MESSAGE, &suid, &uid, &rcptsb, &lmsg, &fmt, &sent, &class, &seq, &dobeep, &secure);
+	
+		xfree(uid);
+		xfree(suid);
+		xfree(lmsg);
+		return -1;
 	}
 
 	return 0;


Więcej informacji o liście dyskusyjnej ekg2-commit