f61d140253
Better support /who and /whereis. Divert server messages to the server window instead of the channel window. Bump PKGREVISION to 8. Compile-tested only.
98 lines
3.4 KiB
Text
98 lines
3.4 KiB
Text
$NetBSD: patch-ad,v 1.1 2004/03/29 11:05:45 wiz Exp $
|
|
|
|
--- src/fe-common/fe-icb.c.orig Sat Apr 27 22:56:18 2002
|
|
+++ src/fe-common/fe-icb.c
|
|
@@ -18,6 +18,8 @@
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
+#include <time.h>
|
|
+
|
|
#include "module.h"
|
|
#include "module-formats.h"
|
|
#include "signals.h"
|
|
@@ -84,12 +86,67 @@ static void event_personal(ICB_SERVER_RE
|
|
icb_split_free(args);
|
|
}
|
|
|
|
+static void idle_time(char *buf, size_t bufsize, time_t idle)
|
|
+{
|
|
+#define MIN_LEN 60UL
|
|
+#define HOUR_LEN 3600UL
|
|
+#define DAY_LEN 86400UL
|
|
+#define WEEK_LEN 604800UL
|
|
+
|
|
+ if (idle >= WEEK_LEN)
|
|
+ snprintf(buf, bufsize, "%2dw%2dd",
|
|
+ (int)(idle/WEEK_LEN), (int)((idle%WEEK_LEN)/DAY_LEN));
|
|
+ else if (idle >= DAY_LEN)
|
|
+ snprintf(buf, bufsize, "%2dd%2dh",
|
|
+ (int)(idle/DAY_LEN), (int)((idle%DAY_LEN)/HOUR_LEN));
|
|
+ else if (idle >= HOUR_LEN)
|
|
+ snprintf(buf, bufsize, "%2dh%2dm",
|
|
+ (int)(idle/HOUR_LEN), (int)((idle%HOUR_LEN)/MIN_LEN));
|
|
+ else if (idle >= MIN_LEN)
|
|
+ snprintf(buf, bufsize, "%2dm%2ds",
|
|
+ (int)(idle/MIN_LEN), (int)(idle%MIN_LEN));
|
|
+ else
|
|
+ snprintf(buf, bufsize, " %2ds", (int)idle);
|
|
+}
|
|
+
|
|
+static void cmdout_wl(ICB_SERVER_REC *server, char **args)
|
|
+{
|
|
+ struct tm *logintime;
|
|
+ char logbuf[20];
|
|
+ char idlebuf[20];
|
|
+ char line[255];
|
|
+ time_t temptime;
|
|
+
|
|
+ /* "wl" : In a who listing, a line of output listing a user. Has the following format:
|
|
+
|
|
+ * Field 1: String indicating whether user is moderator or not. Usually "*" for
|
|
+ * moderator, and " " for not.
|
|
+ * Field 2: Nickname of user.
|
|
+ * Field 3: Number of seconds user has been idle.
|
|
+ * Field 4: Response Time. No longer in use.
|
|
+ * Field 5: Login Time. Unix time_t format. Seconds since Jan. 1, 1970 GMT.
|
|
+ * Field 6: Username of user.
|
|
+ * Field 7: Hostname of user.
|
|
+ * Field 8: Registration status.
|
|
+ */
|
|
+ temptime = strtol(args[4], NULL, 10);
|
|
+ logintime = gmtime(&temptime);
|
|
+ strftime(logbuf, sizeof(logbuf), "%b %e %H:%M", logintime);
|
|
+ temptime = strtol(args[2], NULL, 10);
|
|
+ idle_time(idlebuf, sizeof(idlebuf), temptime);
|
|
+
|
|
+ snprintf(line, sizeof(line), "*** %c%-14.14s %6.6s %12.12s %s@%s %s",
|
|
+ args[0][0] == ' '?' ':'*', args[1], idlebuf, logbuf, args[5],
|
|
+ args[6], args[7]);
|
|
+ printtext(server, NULL, MSGLEVEL_CRAP, line);
|
|
+}
|
|
+
|
|
static void cmdout_default(ICB_SERVER_REC *server, char **args)
|
|
{
|
|
char *data;
|
|
|
|
data = g_strjoinv(" ", args+1);
|
|
- printtext(server, server->group->name, MSGLEVEL_CRAP, "%s", data);
|
|
+ printtext(server, NULL, MSGLEVEL_CRAP, "%s", data);
|
|
g_free(data);
|
|
}
|
|
|
|
@@ -115,6 +172,7 @@ void fe_icb_init(void)
|
|
signal_add("icb event beep", (SIGNAL_FUNC) event_beep);
|
|
signal_add("icb event open", (SIGNAL_FUNC) event_open);
|
|
signal_add("icb event personal", (SIGNAL_FUNC) event_personal);
|
|
+ signal_add("icb cmdout wl", (SIGNAL_FUNC) cmdout_wl);
|
|
signal_add("default icb cmdout", (SIGNAL_FUNC) cmdout_default);
|
|
|
|
signal_add("server add fill", (SIGNAL_FUNC) sig_server_add_fill);
|
|
@@ -131,6 +189,7 @@ void fe_icb_deinit(void)
|
|
signal_remove("icb event beep", (SIGNAL_FUNC) event_beep);
|
|
signal_remove("icb event open", (SIGNAL_FUNC) event_open);
|
|
signal_remove("icb event personal", (SIGNAL_FUNC) event_personal);
|
|
+ signal_remove("icb cmdout wl", (SIGNAL_FUNC) cmdout_wl);
|
|
signal_remove("default icb cmdout", (SIGNAL_FUNC) cmdout_default);
|
|
|
|
signal_remove("server add fill", (SIGNAL_FUNC) sig_server_add_fill);
|