diff options
| author | tomsmeding <tom.smeding@gmail.com> | 2017-04-15 18:53:00 +0200 | 
|---|---|---|
| committer | tomsmeding <tom.smeding@gmail.com> | 2017-04-15 19:04:18 +0200 | 
| commit | 95eec6affee455e1ba935a1781495682b2ee7e9a (patch) | |
| tree | 0bec9887dc2d36c04413e0e1a5afa1f11a076455 | |
| parent | e6bb11fc2801ca5be48ddceeecc5001cd5c39ef6 (diff) | |
weechat: Handle _push online
| -rw-r--r-- | weechat/net.c | 20 | ||||
| -rw-r--r-- | weechat/net.h | 5 | ||||
| -rw-r--r-- | weechat/tomsg.c | 13 | 
3 files changed, 37 insertions, 1 deletions
| diff --git a/weechat/net.c b/weechat/net.c index b8e3827..656a7a5 100644 --- a/weechat/net.c +++ b/weechat/net.c @@ -347,6 +347,26 @@ void net_handle_recv(int fd,const char *msg){  		res.room[roomlen]='\0';  		cb(fd,res,payload);  		free(res.room); +	} else if(cmdlen==6&&memcmp(cmd,"online",6)==0){ +		const char *q; +		if(*p=='\0'||(q=strchr(p+1,' '))==NULL){ +			fprintf(debugf,"net_handle_recv: not enough arguments to 'online' <%s>\n",msg); +			return; +		} +		const char *nump=p+1; +		const char *usernamep=q+1; +		const char *endp; +		struct net_response res=(struct net_response){ +			.type=NET_ONLINE, +			.online.username=strdup(usernamep), +			.online.num=strtol(nump,(char**)&endp,10) +		}; +		if(nump[0]==' '||*endp!=' '){ +			fprintf(debugf,"net_handle_recv: invalid number argument to 'online' <%s>\n",msg); +			return; +		} +		cb(fd,res,payload); +		free(res.online.username);  	} else {  		fprintf(debugf,"net_handle_recv: unknown command <%s>\n",msg);  	} diff --git a/weechat/net.h b/weechat/net.h index 7e18f4c..335664c 100644 --- a/weechat/net.h +++ b/weechat/net.h @@ -15,6 +15,7 @@ enum net_response_type{  	NET_MESSAGE,  	NET_JOIN,  	NET_INVITE, +	NET_ONLINE,  };  struct net_history_item{ @@ -43,6 +44,10 @@ struct net_response{  			i64 timestamp;  			char *message;  		}; +		struct { +			char *username; +			i64 num; +		} online;  	};  }; diff --git a/weechat/tomsg.c b/weechat/tomsg.c index 01aa995..6e9042b 100644 --- a/weechat/tomsg.c +++ b/weechat/tomsg.c @@ -155,7 +155,6 @@ static void isonline_net_callback(int fd,struct net_response res,void *payload){  	free(rn);  	struct t_gui_nick *nickp=weechat_nicklist_search_nick(room->buffer,room->buffer_nickgroup,name); -	fprintf(debugf," nickp=%p: setting '%s' to '%s'\n",nickp,name,color);  	free(name);  	if(nickp==NULL)return;  	weechat_nicklist_nick_set(room->buffer,nickp,"color",color); @@ -232,6 +231,18 @@ static void push_net_callback(int fd,struct net_response res,void *payload){  		} else {  			assert(false);  		} +	} else if(res.type==NET_PONG){ +		// ok +	} else if(res.type==NET_ONLINE){ +		fprintf(debugf," NET_ONLINE with username='%s' num='%" PRIi64 "'\n",res.online.username,res.online.num); +		const char *color=res.online.num>0 ? "weechat.color.chat_nick" : "weechat.color.nicklist_away"; +		for(i64 i=0;i<conn->nrooms;i++){ +			struct t_gui_nick *nickp=weechat_nicklist_search_nick( +					conn->rooms[i]->buffer,conn->rooms[i]->buffer_nickgroup,res.online.username); +			if(nickp!=NULL){ +				weechat_nicklist_nick_set(conn->rooms[i]->buffer,nickp,"color",color); +			} +		}  	} else {  		fprintf(debugf,"push_net_callback: unknown response type %d\n",res.type);  	} | 
