X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Ftextclient%2Fcitadel.c;h=622bed1c874142ce43107281eaabcf955bbd38c2;hb=c822442544cf31a8cda014b77364ceeb883b1d66;hp=94ca65341bd8b62e59fecc0d1556e0815b597762;hpb=f1ee61891901850ebbdee1e9440b363dc6df540a;p=citadel.git diff --git a/citadel/textclient/citadel.c b/citadel/textclient/citadel.c index 94ca65341..622bed1c8 100644 --- a/citadel/textclient/citadel.c +++ b/citadel/textclient/citadel.c @@ -127,21 +127,6 @@ CtdlIPC *ipc_for_signal_handlers; /* KLUDGE cover your eyes */ int enable_syslog = 0; -/* - * syslog() ... Write logging information; - * simple here to have the same - * symbols in the client. - */ - -void syslog(enum LogLevel loglevel, const char *format, ...) { - va_list arg_ptr; - - va_start(arg_ptr, format); - vfprintf(stderr, format, arg_ptr); - va_end(arg_ptr); - fflush(stderr); -} - /* * here is our 'clean up gracefully and exit' routine */ @@ -335,8 +320,6 @@ void remove_march(char *roomname, int floornum) char *pop_march(int desired_floor, struct march *_march) { static char TheRoom[ROOMNAMELEN]; - int TheFloor = 0; - int TheOrder = 32767; int TheWeight = 0; int weight; struct march *mptr = NULL; @@ -358,8 +341,6 @@ char *pop_march(int desired_floor, struct march *_march) if (weight > TheWeight) { TheWeight = weight; strcpy(TheRoom, mptr->march_name); - TheFloor = mptr->march_floor; - TheOrder = mptr->march_order; } } return (TheRoom); @@ -529,6 +510,9 @@ void dotgoto(CtdlIPC *ipc, char *towhere, int display_name, int fromungoto) color(DIM_WHITE); if (!IsEmptyStr(rc_gotmail_cmd)) { rv = system(rc_gotmail_cmd); + if (rv) + scr_printf("*** failed to check for mail calling %s Reason %d.\n", + rc_gotmail_cmd, rv); } } free(room); @@ -552,14 +536,13 @@ void gotonext(CtdlIPC *ipc) char buf[SIZ]; struct march *mptr, *mptr2; char next_room[ROOMNAMELEN]; - int r; /* IPC response code */ /* Check to see if the march-mode list is already allocated. * If it is, pop the first room off the list and go there. */ if (marchptr == NULL) { - r = CtdlIPCKnownRooms(ipc, SubscribedRoomsWithNewMessages, - AllFloors, &marchptr, buf); + CtdlIPCKnownRooms(ipc, SubscribedRoomsWithNewMessages, + AllFloors, &marchptr, buf); /* add _BASEROOM_ to the end of the march list, so the user will end up * in the system base room (usually the Lobby>) at the end of the loop @@ -1015,10 +998,9 @@ void system_info(CtdlIPC *ipc) int mrtg_users, mrtg_active_users; char mrtg_server_uptime[40]; long mrtg_himessage; - int ret; /* IPC response code */ /* get #users, #active & server uptime */ - ret = CtdlIPCGenericCommand(ipc, "MRTG|users", NULL, 0, &resp, &bytes, buf); + CtdlIPCGenericCommand(ipc, "MRTG|users", NULL, 0, &resp, &bytes, buf); mrtg_users = extract_int(resp, 0); remove_token(resp, 0, '\n'); mrtg_active_users = extract_int(resp, 0); @@ -1028,7 +1010,7 @@ void system_info(CtdlIPC *ipc) resp = NULL; /* get high message# */ - ret = CtdlIPCGenericCommand(ipc, "MRTG|messages", NULL, 0, &resp, &bytes, buf); + CtdlIPCGenericCommand(ipc, "MRTG|messages", NULL, 0, &resp, &bytes, buf); mrtg_himessage = extract_long(resp, 0); free(resp); resp = NULL; @@ -1190,7 +1172,20 @@ void get_serv_info(CtdlIPC *ipc, char *supplied_hostname) /* - * Record compare function for SortOnlineUsers() + * Session username compare function for SortOnlineUsers() + */ +int rwho_username_cmp(const void *rec1, const void *rec2) { + char *u1, *u2; + + u1 = strchr(rec1, '|'); + u2 = strchr(rec2, '|'); + + return strcasecmp( (u1?++u1:"") , (u2?++u2:"") ); +} + + +/* + * Idle time compare function for SortOnlineUsers() */ int idlecmp(const void *rec1, const void *rec2) { time_t i1, i2; @@ -1208,8 +1203,11 @@ int idlecmp(const void *rec1, const void *rec2) { * Sort the list of online users by idle time. * This function frees the supplied buffer, and returns a new one * to the caller. The caller is responsible for freeing the returned buffer. + * + * If 'condense' is nonzero, multiple sessions for the same user will be + * combined into one for brevity. */ -char *SortOnlineUsers(char *listing) { +char *SortOnlineUsers(char *listing, int condense) { int rows; char *sortbuf; char *retbuf; @@ -1232,17 +1230,37 @@ char *SortOnlineUsers(char *listing) { memcpy(&sortbuf[i*SIZ], buf, (size_t)SIZ); } - /* Do the sort */ + /* Sort by idle time */ qsort(sortbuf, rows, SIZ, idlecmp); + /* Combine multiple sessions for the same user */ + if (condense) { + qsort(sortbuf, rows, SIZ, rwho_username_cmp); + if (rows > 1) for (i=1; i0) { + char u1[USERNAME_SIZE]; + char u2[USERNAME_SIZE]; + extract_token(u1, &sortbuf[(i-1)*SIZ], 1, '|', sizeof u1); + extract_token(u2, &sortbuf[i*SIZ], 1, '|', sizeof u2); + if (!strcasecmp(u1, u2)) { + memcpy(&sortbuf[i*SIZ], &sortbuf[(i+1)*SIZ], (rows-i-1)*SIZ); + --rows; + --i; + } + } + + qsort(sortbuf, rows, SIZ, idlecmp); /* idle sort again */ + } + /* Copy back to a \n delimited list */ strcpy(retbuf, ""); for (i=0; i= AxAideU) && (chek.needvalid > 0)) {