Skip to content

Commit

Permalink
Merge pull request #345 from progval/server-time
Browse files Browse the repository at this point in the history
Add support for server-time
  • Loading branch information
SilverRainZ authored Jan 22, 2022
2 parents 601ad02 + c6ae925 commit 2010802
Show file tree
Hide file tree
Showing 17 changed files with 445 additions and 236 deletions.
6 changes: 4 additions & 2 deletions src/core/app.c
Original file line number Diff line number Diff line change
Expand Up @@ -314,13 +314,15 @@ SrnRet srn_application_add_server_with_config(SrnApplication *app,
return ret;
}

g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

if (RET_IS_OK(ret)){
if (ret != SRN_OK) { // Has OK message
srn_chat_add_misc_message_fmt(chat,
srn_chat_add_misc_message_fmt(chat, context,
_("Autorun command: %1$s"), RET_MSG(ret));
}
} else {
srn_chat_add_error_message_fmt(chat,
srn_chat_add_error_message_fmt(chat, context,
_("Autorun command: %1$s"), RET_MSG(ret));
}
}
Expand Down
321 changes: 188 additions & 133 deletions src/core/app_irc_event.c

Large diffs are not rendered by default.

38 changes: 25 additions & 13 deletions src/core/app_ui_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,14 +149,16 @@ static SrnRet ui_event_disconnect(SuiBuffer *sui, SuiEvent event, GVariantDict *
chat = ctx_get_chat(sui);
g_return_val_if_fail(srn_server_is_valid(srv), SRN_ERR);

g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

prev_state = srv->state;
ret = srn_server_disconnect(srv);
if (!RET_IS_OK(ret)){
srn_chat_add_error_message(chat, RET_MSG(ret));
srn_chat_add_error_message(chat, RET_MSG(ret), context);
}

if (prev_state == SRN_SERVER_STATE_RECONNECTING){
srn_chat_add_misc_message(chat, _("Reconnection stopped"));
srn_chat_add_misc_message(chat, _("Reconnection stopped"), context);
}

return SRN_OK;
Expand All @@ -172,16 +174,18 @@ static SrnRet ui_event_reconnect(SuiBuffer *sui, SuiEvent event, GVariantDict *p
chat = ctx_get_chat(sui);
g_return_val_if_fail(srn_server_is_valid(srv), SRN_ERR);

g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

prev_state = srv->state;
if (prev_state == SRN_SERVER_STATE_RECONNECTING) {
// ignore the duplicated reconnect request
srn_chat_add_misc_message(chat, _("Already reconnecting"));
srn_chat_add_misc_message(chat, _("Already reconnecting"), context);
return SRN_OK;
}

ret = srn_server_reconnect(srv);
if (!RET_IS_OK(ret)){
srn_chat_add_error_message(chat, RET_MSG(ret));
srn_chat_add_error_message(chat, RET_MSG(ret), context);
}

return SRN_OK;
Expand All @@ -196,10 +200,14 @@ static SrnRet ui_event_quit(SuiBuffer *sui, SuiEvent event, GVariantDict *params
chat = ctx_get_chat(sui);
g_return_val_if_fail(srn_server_is_valid(srv), SRN_ERR);

g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

ret = srn_server_quit(srv, srv->cfg->user->quit_message);
if (!RET_IS_OK(ret)){
g_return_val_if_fail(srn_server_is_valid(srv), SRN_ERR);
srn_chat_add_error_message_fmt(chat,
if (!srn_server_is_valid(srv)) {
g_return_val_if_reached(SRN_ERR);
}
srn_chat_add_error_message_fmt(chat, context,
_("Failed to quit from server: %1$s"), RET_MSG(ret));
}

Expand Down Expand Up @@ -233,6 +241,8 @@ static SrnRet ui_event_send(SuiBuffer *sui, SuiEvent event, GVariantDict *params
}
}

g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

if (is_cmd){
ret = srn_chat_run_command(chat, msg);
// NOTE: The server and chat may be invlid after running command
Expand All @@ -241,23 +251,23 @@ static SrnRet ui_event_send(SuiBuffer *sui, SuiEvent event, GVariantDict *params
}
if (RET_IS_OK(ret)){
if (ret != SRN_OK) { // Has OK message
srn_chat_add_misc_message(chat, RET_MSG(ret));
srn_chat_add_misc_message(chat, RET_MSG(ret), context);
}
} else {
srn_chat_add_error_message(chat, RET_MSG(ret));
srn_chat_add_error_message(chat, RET_MSG(ret), context);
}
} else {
if (chat == chat->srv->chat) {
ret = RET_ERR(_("Cannot send message directly to a server"));
srn_chat_add_error_message(chat, RET_MSG(ret));
srn_chat_add_error_message(chat, RET_MSG(ret), context);
return ret;
}

srn_chat_add_sent_message(chat, msg); // Show on UI first
srn_chat_add_sent_message(chat, msg, context); // Show on UI first

ret = sirc_cmd_msg(chat->srv->irc, chat->name, msg);
if (!RET_IS_OK(ret)){
srn_chat_add_error_message_fmt(chat,
srn_chat_add_error_message_fmt(chat, context,
_("Failed to send message: %1$s"), RET_MSG(ret));
}
}
Expand Down Expand Up @@ -375,11 +385,13 @@ static SrnRet ui_event_ignore(SuiBuffer *sui, SuiEvent event, GVariantDict *para

srn_server_user_set_is_ignored(user, !user->is_ignored);

g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

if(user->is_ignored){
srn_chat_add_misc_message_with_user_fmt(chat, chat->user,
srn_chat_add_misc_message_with_user_fmt(chat, chat->user, context,
_("\"%1$s\" has ignored"), nick);
} else {
srn_chat_add_misc_message_with_user_fmt(chat, chat->user,
srn_chat_add_misc_message_with_user_fmt(chat, chat->user, context,
_("\"%1$s\" has unignored"), nick);
}

Expand Down
59 changes: 33 additions & 26 deletions src/core/chat.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,8 @@ SrnChatUser* srn_chat_get_user(SrnChat *self, const char *nick){
return NULL;
}

void srn_chat_add_sent_message(SrnChat *self, const char *content){
void srn_chat_add_sent_message(SrnChat *self, const char *content,
const SircMessageContext *context){
SrnChatUser *user;
SrnMessage *msg;
SrnRenderFlags rflags;
Expand All @@ -170,7 +171,7 @@ void srn_chat_add_sent_message(SrnChat *self, const char *content){
user = self->user;
rflags = SRN_RENDER_FLAG_URL;
fflags = SRN_FILTER_FLAG_LOG;
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_SENT);
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_SENT, context);

if (srn_render_message(msg, rflags) != SRN_OK){
goto cleanup;
Expand All @@ -188,7 +189,8 @@ void srn_chat_add_sent_message(SrnChat *self, const char *content){
srn_message_free(msg);
}

void srn_chat_add_recv_message(SrnChat *self, SrnChatUser *user, const char *content){
void srn_chat_add_recv_message(SrnChat *self, SrnChatUser *user,
const char *content, const SircMessageContext *context){
SrnMessage *msg;
SrnRenderFlags rflags;
SrnFilterFlags fflags;
Expand All @@ -201,7 +203,7 @@ void srn_chat_add_recv_message(SrnChat *self, SrnChatUser *user, const char *con
}
fflags = SRN_FILTER_FLAG_USER | SRN_FILTER_FLAG_PATTERN | SRN_FILTER_FLAG_LOG;

msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_RECV);
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_RECV, context);
if (srn_render_message(msg, rflags) != SRN_OK){
goto cleanup;
}
Expand All @@ -217,7 +219,8 @@ void srn_chat_add_recv_message(SrnChat *self, SrnChatUser *user, const char *con
srn_message_free(msg);
}

void srn_chat_add_notice_message(SrnChat *self, SrnChatUser *user, const char *content){
void srn_chat_add_notice_message(SrnChat *self, SrnChatUser *user,
const char *content, const SircMessageContext *context){
SrnMessage *msg;
SrnRenderFlags rflags;
SrnFilterFlags fflags;
Expand All @@ -230,7 +233,7 @@ void srn_chat_add_notice_message(SrnChat *self, SrnChatUser *user, const char *c
}
fflags = SRN_FILTER_FLAG_USER | SRN_FILTER_FLAG_PATTERN | SRN_FILTER_FLAG_LOG;

msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_NOTICE);
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_NOTICE, context);
if (srn_render_message(msg, rflags) != SRN_OK){
goto cleanup;
}
Expand All @@ -246,7 +249,8 @@ void srn_chat_add_notice_message(SrnChat *self, SrnChatUser *user, const char *c
srn_message_free(msg);
}

void srn_chat_add_action_message(SrnChat *self, SrnChatUser *user, const char *content){
void srn_chat_add_action_message(SrnChat *self, SrnChatUser *user,
const char *content, const SircMessageContext *context){
SrnMessage *msg;
SrnFilterFlags fflags;
SrnRenderFlags rflags;
Expand All @@ -259,7 +263,7 @@ void srn_chat_add_action_message(SrnChat *self, SrnChatUser *user, const char *c
}
fflags = SRN_FILTER_FLAG_LOG;

msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_ACTION);
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_ACTION, context);
if (!user->srv_user->is_me){
fflags |= SRN_FILTER_FLAG_USER | SRN_FILTER_FLAG_PATTERN;
rflags |= SRN_RENDER_FLAG_PATTERN | SRN_RENDER_FLAG_MENTION;
Expand Down Expand Up @@ -296,12 +300,13 @@ void srn_chat_add_action_message(SrnChat *self, SrnChatUser *user, const char *c
* @param self
* @param content
*/
void srn_chat_add_misc_message(SrnChat *self, const char *content){
void srn_chat_add_misc_message(SrnChat *self, const char *content,
const SircMessageContext *context){
SrnMessage *msg;
SrnRenderFlags rflags;

rflags = SRN_RENDER_FLAG_URL;
msg = srn_message_new(self, self->_user, content, SRN_MESSAGE_TYPE_MISC);
msg = srn_message_new(self, self->_user, content, SRN_MESSAGE_TYPE_MISC, context);
if (srn_render_message(msg, rflags) != SRN_OK){
goto cleanup;
}
Expand All @@ -320,26 +325,26 @@ void srn_chat_add_misc_message(SrnChat *self, const char *content){
* @param fmt
* @param ...
*/
void srn_chat_add_misc_message_fmt(SrnChat *self, const char *fmt, ...){
void srn_chat_add_misc_message_fmt(SrnChat *self, const SircMessageContext *context, const char *fmt, ...){
char *content;
va_list args;

va_start(args, fmt);
content = g_strdup_vprintf(fmt, args);
va_end(args);
srn_chat_add_misc_message(self, content);
srn_chat_add_misc_message(self, content, context);
g_free(content);
}

void srn_chat_add_misc_message_with_user(SrnChat *self, SrnChatUser *user,
const char *content){
const char *content, const SircMessageContext *context){
SrnMessage *msg;
SrnRenderFlags rflags;
SrnFilterFlags fflags;

rflags = SRN_RENDER_FLAG_URL;
fflags = SRN_FILTER_FLAG_USER | SRN_FILTER_FLAG_PATTERN | SRN_FILTER_FLAG_LOG;
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_MISC);
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_MISC, context);
if (srn_render_message(msg, rflags) != SRN_OK){
goto cleanup;
}
Expand All @@ -355,14 +360,14 @@ void srn_chat_add_misc_message_with_user(SrnChat *self, SrnChatUser *user,
}

void srn_chat_add_misc_message_with_user_fmt(SrnChat *self, SrnChatUser *user,
const char *fmt, ...){
const SircMessageContext *context, const char *fmt, ...){
char *content;
va_list args;

va_start(args, fmt);
content = g_strdup_vprintf(fmt, args);
va_end(args);
srn_chat_add_misc_message_with_user(self, user, content);
srn_chat_add_misc_message_with_user(self, user, content, context);
g_free(content);
}

Expand All @@ -372,12 +377,12 @@ void srn_chat_add_misc_message_with_user_fmt(SrnChat *self, SrnChatUser *user,
* @param self
* @param content
*/
void srn_chat_add_error_message(SrnChat *self, const char *content){
void srn_chat_add_error_message(SrnChat *self, const char *content, const SircMessageContext *context){
SrnMessage *msg;
SrnRenderFlags rflags;

rflags = SRN_RENDER_FLAG_URL;
msg = srn_message_new(self, self->_user, content, SRN_MESSAGE_TYPE_ERROR);
msg = srn_message_new(self, self->_user, content, SRN_MESSAGE_TYPE_ERROR, context);
if (srn_render_message(msg, rflags) != SRN_OK){
goto cleanup;
}
Expand All @@ -396,26 +401,27 @@ void srn_chat_add_error_message(SrnChat *self, const char *content){
* @param fmt
* @param ...
*/
void srn_chat_add_error_message_fmt(SrnChat *self, const char *fmt, ...){
void srn_chat_add_error_message_fmt(SrnChat *self, const SircMessageContext *context,
const char *fmt, ...){
char *content;
va_list args;

va_start(args, fmt);
content = g_strdup_vprintf(fmt, args);
va_end(args);
srn_chat_add_error_message(self, content);
srn_chat_add_error_message(self, content, context);
g_free(content);
}

void srn_chat_add_error_message_with_user(SrnChat *self, SrnChatUser *user,
const char *content){
const char *content, const SircMessageContext *context){
SrnMessage *msg;
SrnRenderFlags rflags;
SrnFilterFlags fflags;

rflags = SRN_RENDER_FLAG_URL;
fflags = SRN_FILTER_FLAG_USER | SRN_FILTER_FLAG_PATTERN | SRN_FILTER_FLAG_LOG;
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_ERROR);
msg = srn_message_new(self, user, content, SRN_MESSAGE_TYPE_ERROR, context);
if (srn_render_message(msg, rflags) != SRN_OK){
goto cleanup;
}
Expand All @@ -432,18 +438,19 @@ void srn_chat_add_error_message_with_user(SrnChat *self, SrnChatUser *user,
}

void srn_chat_add_error_message_with_user_fmt(SrnChat *self, SrnChatUser *user,
const char *fmt, ...){
const SircMessageContext *context, const char *fmt, ...){
char *content;
va_list args;

va_start(args, fmt);
content = g_strdup_vprintf(fmt, args);
va_end(args);
srn_chat_add_error_message_with_user(self, user, content);
srn_chat_add_error_message_with_user(self, user, content, context);
g_free(content);
}

void srn_chat_set_topic(SrnChat *self, SrnChatUser *user, const char *topic){
void srn_chat_set_topic(SrnChat *self, SrnChatUser *user, const char *topic,
const SircMessageContext *context){
SrnMessage *msg;
SrnRenderFlags rflags;

Expand All @@ -454,7 +461,7 @@ void srn_chat_set_topic(SrnChat *self, SrnChatUser *user, const char *topic){
rflags |= SRN_RENDER_FLAG_MIRC_STRIP;
}

msg = srn_message_new(self, user, topic, SRN_MESSAGE_TYPE_UNKNOWN);
msg = srn_message_new(self, user, topic, SRN_MESSAGE_TYPE_UNKNOWN, context);
if (srn_render_message(msg, rflags) == SRN_OK){
sui_set_topic(self->ui, msg->rendered_content);
}
Expand Down
4 changes: 3 additions & 1 deletion src/core/chat_command.c
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,9 @@ SrnRet on_command_me(SrnCommand *cmd, void *user_data){
return RET_ERR(_("Failed to send action message: %1$s"), RET_MSG(ret));
}

srn_chat_add_action_message(chat, chat->user, msg);
g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

srn_chat_add_action_message(chat, chat->user, msg, context);

return SRN_OK;
}
Expand Down
4 changes: 2 additions & 2 deletions src/core/message.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include "utils.h"

SrnMessage* srn_message_new(SrnChat *chat, SrnChatUser *user,
const char *content, SrnMessageType type){
const char *content, SrnMessageType type, const SircMessageContext *context){
SrnMessage *self;

g_return_val_if_fail(chat, NULL);
Expand All @@ -42,7 +42,7 @@ SrnMessage* srn_message_new(SrnChat *chat, SrnChatUser *user,
self->sender = user;
self->chat = chat;
self->content = g_strdup(content);
self->time = g_date_time_new_now_local();
self->time = sirc_message_context_get_time(context);

// Inital render
self->rendered_sender = g_markup_escape_text(user->srv_user->nick, -1);
Expand Down
6 changes: 4 additions & 2 deletions src/core/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,13 +277,15 @@ SrnRet srn_server_add_chat(SrnServer *srv, const char *name){
return ret;
}

g_autoptr(SircMessageContext) context = sirc_message_context_new(NULL);

if (RET_IS_OK(ret)){
if (ret != SRN_OK) { // Has OK message
srn_chat_add_misc_message_fmt(chat,
srn_chat_add_misc_message_fmt(chat, context,
_("Autorun command: %1$s"), RET_MSG(ret));
}
} else {
srn_chat_add_error_message_fmt(chat,
srn_chat_add_error_message_fmt(chat, context,
_("Autorun command: %1$s"), RET_MSG(ret));
}
}
Expand Down
Loading

0 comments on commit 2010802

Please sign in to comment.