diff options
| -rw-r--r-- | degesch.c | 39 | 
1 files changed, 38 insertions, 1 deletions
| @@ -5227,6 +5227,41 @@ handle_command_part (struct app_context *ctx, char *arguments)  }  static bool +handle_command_cycle (struct app_context *ctx, char *arguments) +{ +	if (!server_command_check (ctx, "cycle", true)) +		return true; + +	struct server *s = ctx->current_buffer->server; +	if (*arguments) +	{ +		// TODO: check if the arguments are in the form of "channel(,channel)*" +		char *channels = cut_word (&arguments); +		if (*arguments) +			irc_send (s, "PART %s :%s", channels, arguments); +		else +			irc_send (s, "PART %s", channels); +		// TODO: send the key if known +		irc_send (s, "JOIN %s", channels); +	} +	else if (ctx->current_buffer->type != BUFFER_CHANNEL) +		buffer_send_error (ctx, ctx->current_buffer, +			"%s: %s", "Can't cycle", +			"no argument given and this buffer is not a channel"); +	// TODO: have a better way of checking if we're on the channel +	else if (!ctx->current_buffer->channel->users) +		buffer_send_error (ctx, ctx->current_buffer, +			"%s: %s", "Can't cycle", "you're not on the channel"); +	else +	{ +		irc_send (s, "PART %s", ctx->current_buffer->channel->name); +		// TODO: send the key if known +		irc_send (s, "JOIN %s", ctx->current_buffer->channel->name); +	} +	return true; +} + +static bool  handle_command_connect (struct app_context *ctx, char *arguments)  {  	struct server *s = NULL; @@ -5377,7 +5412,9 @@ g_command_handlers[] =  	{ "part",       "Leave channels",  	  "[<channel>[,<channel>...]] [reason]",  	  handle_command_part }, -	NOT_IMPLEMENTED (cycle) +	{ "cycle",      "Rejoin channels", +	  "[<channel>[,<channel>...]] [reason]", +	  handle_command_cycle },  	NOT_IMPLEMENTED (mode)  	NOT_IMPLEMENTED (topic) | 
