degesch: process RPL_CREATIONTIME
This commit is contained in:
		
							parent
							
								
									e1aa27c90b
								
							
						
					
					
						commit
						6d720e7a1a
					
				
							
								
								
									
										37
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								degesch.c
									
									
									
									
									
								
							| @ -4840,6 +4840,41 @@ irc_handle_rpl_channelmodeis (struct server *s, const struct irc_message *msg) | ||||
| 	refresh_prompt (s->ctx); | ||||
| } | ||||
| 
 | ||||
| static char * | ||||
| make_time_string (time_t time) | ||||
| { | ||||
| 	char buf[32]; | ||||
| 	struct tm tm; | ||||
| 	strftime (buf, sizeof buf, "%a %b %d %Y %T", localtime_r (&time, &tm)); | ||||
| 	return xstrdup (buf); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| irc_handle_rpl_creationtime (struct server *s, const struct irc_message *msg) | ||||
| { | ||||
| 	if (msg->params.len < 3) | ||||
| 		return; | ||||
| 
 | ||||
| 	const char *channel_name  = msg->params.vector[1]; | ||||
| 	const char *creation_time = msg->params.vector[2]; | ||||
| 
 | ||||
| 	unsigned long created; | ||||
| 	if (!xstrtoul (&created, creation_time, 10)) | ||||
| 		return; | ||||
| 
 | ||||
| 	struct channel *channel = str_map_find (&s->irc_channels, channel_name); | ||||
| 	struct buffer *buffer = str_map_find (&s->irc_buffer_map, channel_name); | ||||
| 	hard_assert ((channel && buffer) || | ||||
| 		(channel && !buffer) || (!channel && !buffer)); | ||||
| 
 | ||||
| 	if (buffer) | ||||
| 	{ | ||||
| 		char *x = make_time_string (created); | ||||
| 		buffer_send_status (s->ctx, buffer, "Channel created on %s", x); | ||||
| 		free (x); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| irc_handle_isupport_prefix (struct server *s, char *value) | ||||
| { | ||||
| @ -5031,6 +5066,8 @@ irc_process_numeric (struct server *s, | ||||
| 		irc_handle_rpl_topic         (s, msg); buffer = NULL; break; | ||||
| 	case IRC_RPL_CHANNELMODEIS: | ||||
| 		irc_handle_rpl_channelmodeis (s, msg); buffer = NULL; break; | ||||
| 	case IRC_RPL_CREATIONTIME: | ||||
| 		irc_handle_rpl_creationtime  (s, msg); buffer = NULL; break; | ||||
| 
 | ||||
| 	case IRC_ERR_NICKNAMEINUSE: | ||||
| 		// TODO: if (state == IRC_CONNECTED), use a different nick;
 | ||||
|  | ||||
| @ -24,6 +24,7 @@ | ||||
| 322 IRC_RPL_LIST "%s %d :%s" | ||||
| 323 IRC_RPL_LISTEND ":End of LIST" | ||||
| 324 IRC_RPL_CHANNELMODEIS "%s +%s" | ||||
| 329 IRC_RPL_CREATIONTIME "%s %lld" | ||||
| 331 IRC_RPL_NOTOPIC "%s :No topic is set" | ||||
| 332 IRC_RPL_TOPIC "%s :%s" | ||||
| 346 IRC_RPL_INVITELIST "%s %s" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user