express/src/bin/callbacks.c

244 lines
7.6 KiB
C
Raw Normal View History

#include "private.h"
#include "callbacks.h"
#include "window.h"
#include "channel.h"
#include <time.h>
void
_callback_server_connected(Express_Network *net, const char *event EINA_UNUSED, const char *source, const char **params EINA_UNUSED, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
DBG("Server %s Connected", source);
_window_network_channels_create(net);
}
void
_callback_server_motd(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source, const char **params, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl;
/* DBG("Server Motd"); */
/* DBG("\tServer: %s", source); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", params[0]); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
if (!(chl = _window_channel_server_find(source))) return;
_channel_text_append(chl, NULL, params[1]);
}
void
_callback_server_notice(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source EINA_UNUSED, const char **params, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl;
/* DBG("Server Notice"); */
/* DBG("\tServer: %s", source); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", params[0]); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
if (!(chl = _window_channel_focused_get())) return;
_channel_text_append(chl, NULL, params[1]);
}
void
_callback_channel_message(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source, const char **params, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl = NULL;
/* DBG("Channel Message: %s", params[0]); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", source); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
if (!(chl = _window_channel_find(params[0]))) return;
_channel_text_append(chl, source, params[1]);
}
void
_callback_channel_notice(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source, const char **params, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl = NULL;
/* DBG("Channel Notice: %s", params[0]); */
/* DBG("\tCount: %d", count); */
/* DBG("\tServer: %s", source); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
if (!strcmp(params[0], "*"))
{
if (!(chl = _window_channel_server_find(source)))
{
ERR("Could not find channel with server name: %s", source);
if (!(chl = _window_channel_find("Default")))
chl = _window_channel_focused_get();
}
}
else
{
if (!(chl = _window_channel_find(params[0])))
chl = _window_channel_focused_get();
}
if (!chl) return;
_channel_text_append(chl, NULL, params[1]);
}
void
_callback_channel_topic(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source EINA_UNUSED, const char **params, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl = NULL;
char buff[PATH_MAX];
/* DBG("Channel Topic: %s", params[0]); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", source); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
/* DBG("\t%s", params[2]); */
if (!(chl = _window_channel_find(params[1]))) return;
snprintf(buff, sizeof(buff), "Topic for %s is: ", params[1]);
_channel_text_append(chl, NULL, buff);
_channel_text_append(chl, NULL, params[2]);
}
void
_callback_channel_topic_time(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source EINA_UNUSED, const char **params, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl = NULL;
char buff[PATH_MAX], *strtime;
time_t stamp;
/* DBG("Channel Topic Time: %s", params[0]); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", source); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
/* DBG("\t%s", params[2]); */
/* DBG("\t%s", params[3]); */
stamp = atol(params[3]);
strtime = ctime(&stamp);
strtime[24] = 0;
if (!(chl = _window_channel_find(params[1]))) return;
snprintf(buff, sizeof(buff), "Topic for %s set by %s at %s\r\n",
params[1], params[2], strtime);
_channel_text_append(chl, NULL, buff);
}
void
_callback_channel_names(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source EINA_UNUSED, const char **params, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl = NULL;
char **users;
unsigned int n = 0, i = 0;
/* DBG("Channel Names: %s", params[0]); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", source); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
/* DBG("\t%s", params[2]); */
/* DBG("\t%s", params[3]); */
if (!(chl = _window_channel_find(params[2]))) return;
if (strlen(params[3]) > 0)
_channel_userlist_show(chl);
else
_channel_userlist_hide(chl);
users = eina_str_split_full(params[3], " ", -1, &n);
for (; i < n; i++)
{
if (users[i][0] == '@')
{
users[i]++;
_channel_userlist_user_append(chl, users[i], EINA_TRUE);
}
else
_channel_userlist_user_append(chl, users[i], EINA_FALSE);
}
_channel_userlist_go(chl);
free(users[0]);
free(users);
}
void
_callback_user_quit(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source, const char **params EINA_UNUSED, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
DBG("User Quit");
DBG("\tCount: %d", count);
DBG("\tUser: %s", source);
DBG("\tMessage:");
DBG("\t%s", params[0]);
// param[0] == reason
// source == user
/* FIXME: We have a problem here. No channel gets passed in, so we will
* need to find the channel this user is in, and send the message to that
* channel */
}
void
_callback_user_part(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source, const char **params EINA_UNUSED, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl = NULL;
char buff[PATH_MAX];
/* DBG("User Part %s", params[0]); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", source); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
if (!(chl = _window_channel_find(params[0]))) return;
snprintf(buff, sizeof(buff), "User %s has left %s: %s\r\n",
source, params[0], params[1]);
_channel_text_append(chl, NULL, buff);
}
void
_callback_user_join(Express_Network *net, const char *event EINA_UNUSED, const char *source, const char **params EINA_UNUSED, unsigned int count EINA_UNUSED, void *data EINA_UNUSED)
{
Channel *chl = NULL;
char buff[PATH_MAX];
/* DBG("User Join %s", params[0]); */
/* DBG("\tCount: %d", count); */
/* DBG("\tUser: %s", source); */
/* DBG("\tMessage:"); */
/* DBG("\t%s", params[1]); */
/* skip user join messages for our own nick */
if (!strcmp(source, express_network_nickname_get(net))) return;
/* find the channel */
if (!(chl = _window_channel_find(params[0]))) return;
snprintf(buff, sizeof(buff), "User %s has joined %s\r\n",
source, params[0]);
_channel_text_append(chl, NULL, buff);
}
void
_callback_user_private(Express_Network *net EINA_UNUSED, const char *event EINA_UNUSED, const char *source, const char **params, unsigned int count, void *data EINA_UNUSED)
{
DBG("User Private %s", params[0]);
DBG("\tCount: %d", count);
DBG("\tUser: %s", source);
DBG("\tMessage:");
DBG("\t%s", params[1]);
DBG("\t%s", params[2]);
DBG("\t%s", params[3]);
}