linkage shenanigans

v1
Tony Olagbaiye 4 years ago
parent 4acb753cae
commit e7a4dd34c9
No known key found for this signature in database
GPG Key ID: 9E2FF3BDEBDFC910

@ -34,27 +34,19 @@ use_guix()
fi fi
# Miscellaneous packages. # Miscellaneous packages.
PACKAGES_MAINTENANCE=( ENVIRONMENTS=(
direnv weechat
git
git:send-email
gnupg
guile-colorized
guile-readline
less
ncurses
openssh
xdot
) )
# Environment packages. # Environment packages.
PACKAGES=(help2man guile-sqlite3 guile-gcrypt PACKAGES=(
autoconf autoconf-archive automake libtool autoconf autoconf-archive automake libtool
make cmake gcc-toolchain pkg-config make cmake gcc-toolchain pkg-config patchelf
libressl libxml2 libstrophe json-c weechat) weechat xz libxml2 libstrophe json-c
)
# Thanks <https://lists.gnu.org/archive/html/guix-devel/2016-09/msg00859.html> # Thanks <https://lists.gnu.org/archive/html/guix-devel/2016-09/msg00859.html>
eval "$(guix environment --search-paths --root="$gcroot" --ad-hoc ${PACKAGES[@]} ${PACKAGES_MAINTENANCE[@]} "$@")" eval "$(guix environment --search-paths --root="$gcroot" ${ENVIRONMENTS[@]} --ad-hoc ${PACKAGES[@]} "$@")"
export CC=gcc export CC=gcc
} }

3
.gitmodules vendored

@ -1,6 +1,3 @@
[submodule "json-c"] [submodule "json-c"]
path = json-c path = json-c
url = https://github.com/json-c/json-c url = https://github.com/json-c/json-c
[submodule "libstrophe"]
path = libstrophe
url = https://github.com/strophe/libstrophe

@ -4,67 +4,68 @@ ifdef DEBUG
endif endif
RM=rm -f RM=rm -f
FIND=find FIND=find
CFLAGS+=$(DBGCFLAGS) -fno-omit-frame-pointer -fPIC -std=gnu99 -g -Wall -Wextra -Werror-implicit-function-declaration -Wno-missing-field-initializers -Ilibstrophe -Ijson-c INCLUDES=-Ilibstrophe -Ijson-c
CFLAGS+=$(DBGCFLAGS) -fno-omit-frame-pointer -fPIC -std=gnu99 -g -Wall -Wextra -Werror-implicit-function-declaration -Wno-missing-field-initializers $(INCLUDES)
LDFLAGS+=-shared -g $(DBGCFLAGS) $(DBGLDFLAGS) LDFLAGS+=-shared -g $(DBGCFLAGS) $(DBGLDFLAGS)
LDLIBS=-lssl -lxml2 LDLIBS=-lstrophe -lpthread
PREFIX ?= /usr/local PREFIX ?= /usr/local
LIBDIR ?= $(PREFIX)/lib LIBDIR ?= $(PREFIX)/lib
INSTALL ?= /usr/bin/install INSTALL ?= /usr/bin/install
SRCS=xmpp.c \ SRCS=xmpp.c \
xmpp-command.c \
xmpp-config.c \ xmpp-config.c \
xmpp-connection.c \ xmpp-connection.c \
DEPS=json-c/libjson-c.a
OLDSRCS=slack.c \ OLDSRCS=slack.c \
slack-api.c \ slack-api.c \
slack-buffer.c \ slack-buffer.c \
slack-channel.c \ slack-channel.c \
slack-config.c \ slack-config.c \
slack-command.c \ slack-command.c \
slack-completion.c \ slack-completion.c \
slack-emoji.c \ slack-emoji.c \
slack-input.c \ slack-input.c \
slack-message.c \ slack-message.c \
slack-oauth.c \ slack-oauth.c \
slack-request.c \ slack-request.c \
slack-teaminfo.c \ slack-teaminfo.c \
slack-user.c \ slack-user.c \
slack-workspace.c \ slack-workspace.c \
api/slack-api-hello.c \ api/slack-api-hello.c \
api/slack-api-error.c \ api/slack-api-error.c \
api/slack-api-message.c \ api/slack-api-message.c \
api/slack-api-user-typing.c \ api/slack-api-user-typing.c \
api/message/slack-api-message-bot-message.c \ api/message/slack-api-message-bot-message.c \
api/message/slack-api-message-slackbot-response.c \ api/message/slack-api-message-slackbot-response.c \
api/message/slack-api-message-me-message.c \ api/message/slack-api-message-me-message.c \
api/message/slack-api-message-unimplemented.c \ api/message/slack-api-message-unimplemented.c \
request/slack-request-chat-memessage.c \ request/slack-request-chat-memessage.c \
request/slack-request-chat-postmessage.c \ request/slack-request-chat-postmessage.c \
request/slack-request-channels-list.c \ request/slack-request-channels-list.c \
request/slack-request-conversations-members.c \ request/slack-request-conversations-members.c \
request/slack-request-emoji-list.c \ request/slack-request-emoji-list.c \
request/slack-request-users-list.c request/slack-request-users-list.c
OBJS=$(subst .c,.o,$(SRCS)) libstrophe/.libs/libstrophe.a json-c/libjson-c.a OBJS=$(subst .c,.o,$(SRCS))
all: libstrophe/.libs/libstrophe.a json-c/libjson-c.a weechat-xmpp all: $(DEPS) weechat-xmpp
weechat-xmpp: $(OBJS) weechat-xmpp: $(OBJS)
$(CC) $(LDFLAGS) -o xmpp.so $(OBJS) $(LDLIBS) $(CC) $(LDFLAGS) -o xmpp.so $(OBJS) $(LDLIBS)
which patchelf >/dev/null && \
libstrophe/.libs/libstrophe.a: patchelf --set-rpath $(LIBRARY_PATH):$(shell patchelf --print-rpath xmpp.so) xmpp.so || true
cd libstrophe && ./bootstrap.sh && env CFLAGS=-fPIC LDFLAGS= ./configure
$(MAKE) -C libstrophe
libstrophe: libstrophe/.libs/libstrophe.a
json-c/libjson-c.a: json-c/libjson-c.a:
cd json-c && env CFLAGS= LDFLAGS= cmake -DCMAKE_C_FLAGS=-fPIC . cd json-c && env CFLAGS= LDFLAGS= \
cmake -DCMAKE_C_FLAGS=-fPIC .
$(MAKE) -C json-c json-c-static $(MAKE) -C json-c json-c-static
json-c: json-c/libjson-c.a json-c: json-c/libjson-c.a
depend: .depend depend: .depend
.depend: libstrophe/.libs/libstrophe.a json-c/libjson-c.a $(SRCS) .depend: json-c/libjson-c.a $(SRCS)
$(RM) ./.depend $(RM) ./.depend
$(CC) $(CFLAGS) -MM $^>>./.depend $(CC) $(CFLAGS) -MM $^>>./.depend
@ -73,8 +74,6 @@ tidy:
clean: clean:
$(RM) $(OBJS) $(RM) $(OBJS)
$(MAKE) -C libstrophe clean || true
$(MAKE) -C libwebsockets clean || true
$(MAKE) -C json-c clean || true $(MAKE) -C json-c clean || true
git submodule foreach --recursive git clean -xfd || true git submodule foreach --recursive git clean -xfd || true
git submodule foreach --recursive git reset --hard || true git submodule foreach --recursive git reset --hard || true

@ -1 +0,0 @@
Subproject commit 2d5424bcff4e9d810b73444b02708f69743ff65d

@ -2,32 +2,33 @@
// License, version 2.0. If a copy of the MPL was not distributed with this // License, version 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include <libwebsockets.h> #include <strophe.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <weechat/weechat-plugin.h>
#include "weechat-plugin.h"
#include "slack.h" #include "xmpp.h"
#include "slack-oauth.h" //#include "xmpp-oauth.h"
#include "slack-teaminfo.h" //#include "xmpp-teaminfo.h"
#include "slack-workspace.h" //#include "xmpp-workspace.h"
#include "slack-channel.h" //#include "xmpp-channel.h"
#include "slack-buffer.h" //#include "xmpp-buffer.h"
#include "slack-message.h" //#include "xmpp-message.h"
#include "slack-command.h" #include "xmpp-command.h"
#include "request/slack-request-chat-memessage.h" //#include "request/xmpp-request-chat-memessage.h"
void slack_command_display_workspace(struct t_slack_workspace *workspace) /*
void xmpp_command_display_workspace(xmpp_conn_t *workspace)
{ {
int num_channels, num_pv; int num_channels, num_pv;
if (workspace->is_connected) if (workspace->is_connected)
{ {
num_channels = 0;//slack_workspace_get_channel_count(workspace); num_channels = 0;//xmpp_workspace_get_channel_count(workspace);
num_pv = 0;//slack_workspace_get_pv_count(workspace); num_pv = 0;//xmpp_workspace_get_pv_count(workspace);
weechat_printf( weechat_printf(
NULL, NULL,
" %s %s%s%s.slack.com %s(%s%s%s) [%s%s%s]%s, %d %s, %d pv", " %s %s%s%s.xmpp.com %s(%s%s%s) [%s%s%s]%s, %d %s, %d pv",
(workspace->is_connected) ? "*" : " ", (workspace->is_connected) ? "*" : " ",
weechat_color("chat_server"), weechat_color("chat_server"),
workspace->domain, workspace->domain,
@ -50,7 +51,7 @@ void slack_command_display_workspace(struct t_slack_workspace *workspace)
{ {
weechat_printf( weechat_printf(
NULL, NULL,
" %s%s%s.slack.com %s(%s%s%s)%s", " %s%s%s.xmpp.com %s(%s%s%s)%s",
weechat_color("chat_server"), weechat_color("chat_server"),
workspace->domain, workspace->domain,
weechat_color("reset"), weechat_color("reset"),
@ -63,10 +64,10 @@ void slack_command_display_workspace(struct t_slack_workspace *workspace)
} }
} }
void slack_command_workspace_list(int argc, char **argv) void xmpp_command_workspace_list(int argc, char **argv)
{ {
int i, one_workspace_found; int i, one_workspace_found;
struct t_slack_workspace *ptr_workspace2; xmpp_conn_t *ptr_workspace2;
char *workspace_name = NULL; char *workspace_name = NULL;
for (i = 2; i < argc; i++) for (i = 2; i < argc; i++)
@ -76,14 +77,14 @@ void slack_command_workspace_list(int argc, char **argv)
} }
if (!workspace_name) if (!workspace_name)
{ {
if (slack_workspaces) if (xmpp_workspaces)
{ {
weechat_printf(NULL, ""); weechat_printf(NULL, "");
weechat_printf(NULL, _("All workspaces:")); weechat_printf(NULL, _("All workspaces:"));
for (ptr_workspace2 = slack_workspaces; ptr_workspace2; for (ptr_workspace2 = xmpp_workspaces; ptr_workspace2;
ptr_workspace2 = ptr_workspace2->next_workspace) ptr_workspace2 = ptr_workspace2->next_workspace)
{ {
slack_command_display_workspace(ptr_workspace2); xmpp_command_display_workspace(ptr_workspace2);
} }
} }
else else
@ -92,7 +93,7 @@ void slack_command_workspace_list(int argc, char **argv)
else else
{ {
one_workspace_found = 0; one_workspace_found = 0;
for (ptr_workspace2 = slack_workspaces; ptr_workspace2; for (ptr_workspace2 = xmpp_workspaces; ptr_workspace2;
ptr_workspace2 = ptr_workspace2->next_workspace) ptr_workspace2 = ptr_workspace2->next_workspace)
{ {
if (weechat_strcasestr(ptr_workspace2->name, workspace_name)) if (weechat_strcasestr(ptr_workspace2->name, workspace_name))
@ -105,7 +106,7 @@ void slack_command_workspace_list(int argc, char **argv)
workspace_name); workspace_name);
} }
one_workspace_found = 1; one_workspace_found = 1;
slack_command_display_workspace(ptr_workspace2); xmpp_command_display_workspace(ptr_workspace2);
} }
} }
if (!one_workspace_found) if (!one_workspace_found)
@ -115,40 +116,40 @@ void slack_command_workspace_list(int argc, char **argv)
} }
} }
void slack_command_add_workspace(struct t_slack_teaminfo *slack_teaminfo) void xmpp_command_add_workspace(struct t_xmpp_teaminfo *xmpp_teaminfo)
{ {
struct t_slack_workspace *workspace; xmpp_conn_t *workspace;
workspace = slack_workspace_casesearch(slack_teaminfo->domain); workspace = xmpp_workspace_casesearch(xmpp_teaminfo->domain);
if (workspace) if (workspace)
{ {
weechat_printf( weechat_printf(
NULL, NULL,
_("%s%s: workspace \"%s\" already exists, can't add it!"), _("%s%s: workspace \"%s\" already exists, can't add it!"),
weechat_prefix("error"), SLACK_PLUGIN_NAME, weechat_prefix("error"), XMPP_PLUGIN_NAME,
slack_teaminfo->domain); xmpp_teaminfo->domain);
return; return;
} }
workspace = slack_workspace_alloc(slack_teaminfo->domain); workspace = xmpp_workspace_alloc(xmpp_teaminfo->domain);
if (!workspace) if (!workspace)
{ {
weechat_printf( weechat_printf(
NULL, NULL,
_("%s%s: unable to add workspace"), _("%s%s: unable to add workspace"),
weechat_prefix("error"), SLACK_PLUGIN_NAME); weechat_prefix("error"), XMPP_PLUGIN_NAME);
return; return;
} }
workspace->id = strdup(slack_teaminfo->id); workspace->id = strdup(xmpp_teaminfo->id);
workspace->name = strdup(slack_teaminfo->name); workspace->name = strdup(xmpp_teaminfo->name);
weechat_config_option_set(workspace->options[SLACK_WORKSPACE_OPTION_TOKEN], weechat_config_option_set(workspace->options[XMPP_WORKSPACE_OPTION_TOKEN],
slack_teaminfo->token, 1); xmpp_teaminfo->token, 1);
weechat_printf ( weechat_printf (
NULL, NULL,
_("%s: workspace %s%s%s.slack.com %s(%s%s%s)%s added"), _("%s: workspace %s%s%s.xmpp.com %s(%s%s%s)%s added"),
SLACK_PLUGIN_NAME, XMPP_PLUGIN_NAME,
weechat_color("chat_server"), weechat_color("chat_server"),
workspace->domain, workspace->domain,
weechat_color("reset"), weechat_color("reset"),
@ -158,47 +159,47 @@ void slack_command_add_workspace(struct t_slack_teaminfo *slack_teaminfo)
weechat_color("chat_delimiters"), weechat_color("chat_delimiters"),
weechat_color("reset")); weechat_color("reset"));
free_teaminfo(slack_teaminfo); free_teaminfo(xmpp_teaminfo);
} }
void slack_command_fetch_workspace(char *token) void xmpp_command_fetch_workspace(char *token)
{ {
slack_teaminfo_fetch(token, &slack_command_add_workspace); xmpp_teaminfo_fetch(token, &xmpp_command_add_workspace);
free(token); free(token);
} }
void slack_command_workspace_register(int argc, char **argv) void xmpp_command_workspace_register(int argc, char **argv)
{ {
char *code; char *code;
if (argc > 2) if (argc > 2)
{ {
code = argv[2]; code = argv[2];
if (strncmp("xoxp", code, 4) == 0) if (strncmp("xoxp", code, 4) == 0)
{ {
slack_command_fetch_workspace(strdup(code)); xmpp_command_fetch_workspace(strdup(code));
} }
else else
{ {
slack_oauth_request_token(code, &slack_command_fetch_workspace); xmpp_oauth_request_token(code, &xmpp_command_fetch_workspace);
} }
} }
else else
{ {
weechat_printf(NULL, weechat_printf(NULL,
_("\n#### Retrieving a Slack token via OAUTH ####\n" _("\n#### Retrieving a Xmpp token via OAUTH ####\n"
"1) Paste this into a browser: https://slack.com/oauth/authorize?client_id=%s&scope=client\n" "1) Paste this into a browser: https://xmpp.com/oauth/authorize?client_id=%s&scope=client\n"
"2) Select the team you wish to access from weechat in your browser.\n" "2) Select the team you wish to access from weechat in your browser.\n"
"3) Click \"Authorize\" in the browser **IMPORTANT: the redirect will fail, this is expected**\n" "3) Click \"Authorize\" in the browser **IMPORTANT: the redirect will fail, this is expected**\n"
"4) Copy the \"code\" portion of the URL to your clipboard\n" "4) Copy the \"code\" portion of the URL to your clipboard\n"
"5) Return to weechat and run `/slack register [code]`\n"), "5) Return to weechat and run `/xmpp register [code]`\n"),
SLACK_CLIENT_ID); XMPP_CLIENT_ID);
} }
} }
int slack_command_connect_workspace(struct t_slack_workspace *workspace) int xmpp_command_connect_workspace(xmpp_conn_t *workspace)
{ {
if (!workspace) if (!workspace)
return 0; return 0;
@ -208,19 +209,19 @@ int slack_command_connect_workspace(struct t_slack_workspace *workspace)
weechat_printf( weechat_printf(
NULL, NULL,
_("%s%s: already connected to workspace \"%s\"!"), _("%s%s: already connected to workspace \"%s\"!"),
weechat_prefix("error"), SLACK_PLUGIN_NAME, weechat_prefix("error"), XMPP_PLUGIN_NAME,
workspace->domain); workspace->domain);
} }
slack_workspace_connect(workspace); xmpp_workspace_connect(workspace);
return 1; return 1;
} }
int slack_command_workspace_connect(int argc, char **argv) int xmpp_command_workspace_connect(int argc, char **argv)
{ {
int i, nb_connect, connect_ok; int i, nb_connect, connect_ok;
struct t_slack_workspace *ptr_workspace; xmpp_conn_t *ptr_workspace;
(void) argc; (void) argc;
(void) argv; (void) argv;
@ -231,10 +232,10 @@ int slack_command_workspace_connect(int argc, char **argv)
for (i = 2; i < argc; i++) for (i = 2; i < argc; i++)
{ {
nb_connect++; nb_connect++;
ptr_workspace = slack_workspace_search(argv[i]); ptr_workspace = xmpp_workspace_search(argv[i]);
if (ptr_workspace) if (ptr_workspace)
{ {
if (!slack_command_connect_workspace(ptr_workspace)) if (!xmpp_command_connect_workspace(ptr_workspace))
{ {
connect_ok = 0; connect_ok = 0;
} }
@ -244,8 +245,8 @@ int slack_command_workspace_connect(int argc, char **argv)
weechat_printf( weechat_printf(
NULL, NULL,
_("%s%s: workspace not found \"%s\" " _("%s%s: workspace not found \"%s\" "
"(register first with: /slack register)"), "(register first with: /xmpp register)"),
weechat_prefix("error"), SLACK_PLUGIN_NAME, weechat_prefix("error"), XMPP_PLUGIN_NAME,
argv[i]); argv[i]);
} }
} }
@ -253,9 +254,9 @@ int slack_command_workspace_connect(int argc, char **argv)
return (connect_ok) ? WEECHAT_RC_OK : WEECHAT_RC_ERROR; return (connect_ok) ? WEECHAT_RC_OK : WEECHAT_RC_ERROR;
} }
void slack_command_workspace_delete(int argc, char **argv) void xmpp_command_workspace_delete(int argc, char **argv)
{ {
struct t_slack_workspace *workspace; xmpp_conn_t *workspace;
char *workspace_domain; char *workspace_domain;
if (argc < 3) if (argc < 3)
@ -269,14 +270,14 @@ void slack_command_workspace_delete(int argc, char **argv)
return; return;
} }
workspace = slack_workspace_search(argv[2]); workspace = xmpp_workspace_search(argv[2]);
if (!workspace) if (!workspace)
{ {
weechat_printf( weechat_printf(
NULL, NULL,
_("%s%s: workspace \"%s\" not found for \"%s\" command"), _("%s%s: workspace \"%s\" not found for \"%s\" command"),
weechat_prefix("error"), SLACK_PLUGIN_NAME, weechat_prefix("error"), XMPP_PLUGIN_NAME,
argv[2], "slack delete"); argv[2], "xmpp delete");
return; return;
} }
if (workspace->is_connected) if (workspace->is_connected)
@ -284,151 +285,151 @@ void slack_command_workspace_delete(int argc, char **argv)
weechat_printf( weechat_printf(
NULL, NULL,
_("%s%s: you cannot delete workspace \"%s\" because you" _("%s%s: you cannot delete workspace \"%s\" because you"
"are connected. Try \"/slack disconnect %s\" first."), "are connected. Try \"/xmpp disconnect %s\" first."),
weechat_prefix("error"), SLACK_PLUGIN_NAME, weechat_prefix("error"), XMPP_PLUGIN_NAME,
argv[2], argv[2]); argv[2], argv[2]);
return; return;
} }
workspace_domain = strdup(workspace->domain); workspace_domain = strdup(workspace->domain);
slack_workspace_free(workspace); xmpp_workspace_free(workspace);
weechat_printf ( weechat_printf (
NULL, NULL,
_("%s: workspace %s%s%s has been deleted"), _("%s: workspace %s%s%s has been deleted"),
SLACK_PLUGIN_NAME, XMPP_PLUGIN_NAME,
weechat_color("chat_server"), weechat_color("chat_server"),
(workspace_domain) ? workspace_domain : "???", (workspace_domain) ? workspace_domain : "???",
weechat_color("reset")); weechat_color("reset"));
if (workspace_domain) if (workspace_domain)
free(workspace_domain); free(workspace_domain);
} }
*/
int slack_command_slack(const void *pointer, void *data, int xmpp_command_xmpp(const void *pointer, void *data,
struct t_gui_buffer *buffer, int argc, struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol) char **argv, char **argv_eol)
{ {
(void) pointer; (void) pointer;
(void) data; (void) data;
(void) buffer; (void) buffer;
if (argc <= 1 || weechat_strcasecmp(argv[1], "list") == 0) //if (argc <= 1 || weechat_strcasecmp(argv[1], "list") == 0)
{ //{
slack_command_workspace_list(argc, argv); // xmpp_command_workspace_list(argc, argv);
return WEECHAT_RC_OK; // return WEECHAT_RC_OK;
} //}
if (argc > 1) //if (argc > 1)
{ //{
if (weechat_strcasecmp(argv[1], "register") == 0) // if (weechat_strcasecmp(argv[1], "register") == 0)
{ // {
slack_command_workspace_register(argc, argv); // xmpp_command_workspace_register(argc, argv);
return WEECHAT_RC_OK; // return WEECHAT_RC_OK;
} // }
if (weechat_strcasecmp(argv[1], "connect") == 0) // if (weechat_strcasecmp(argv[1], "connect") == 0)
{ // {
slack_command_workspace_connect(argc, argv); // xmpp_command_workspace_connect(argc, argv);
return WEECHAT_RC_OK; // return WEECHAT_RC_OK;
} // }
if (weechat_strcasecmp(argv[1], "delete") == 0) // if (weechat_strcasecmp(argv[1], "delete") == 0)
{ // {
slack_command_workspace_delete(argc, argv); // xmpp_command_workspace_delete(argc, argv);
return WEECHAT_RC_OK; // return WEECHAT_RC_OK;
} // }
WEECHAT_COMMAND_ERROR; // WEECHAT_COMMAND_ERROR;
} //}
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
} }
int slack_command_me(const void *pointer, void *data, int xmpp_command_me(const void *pointer, void *data,
struct t_gui_buffer *buffer, int argc, struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol) char **argv, char **argv_eol)
{ {
struct t_slack_workspace *ptr_workspace = NULL; xmpp_conn_t *ptr_workspace = NULL;
struct t_slack_channel *ptr_channel = NULL; //struct t_xmpp_channel *ptr_channel = NULL;
struct t_slack_request *request; //struct t_xmpp_request *request;
char *text; char *text;
(void) pointer; (void) pointer;
(void) data; (void) data;
(void) buffer; (void) buffer;
(void) argv; (void) argv;
slack_buffer_get_workspace_and_channel(buffer, &ptr_workspace, &ptr_channel); //xmpp_buffer_get_workspace_and_channel(buffer, &ptr_workspace, &ptr_channel);
if (!ptr_workspace) //if (!ptr_workspace)
return WEECHAT_RC_ERROR; // return WEECHAT_RC_ERROR;
if (!ptr_channel) //if (!ptr_channel)
{ //{
weechat_printf ( // weechat_printf (
ptr_workspace->buffer, // ptr_workspace->buffer,
_("%s%s: \"%s\" command can not be executed on a workspace buffer"), // _("%s%s: \"%s\" command can not be executed on a workspace buffer"),
weechat_prefix("error"), SLACK_PLUGIN_NAME, "me"); // weechat_prefix("error"), XMPP_PLUGIN_NAME, "me");
return WEECHAT_RC_OK; // return WEECHAT_RC_OK;
} //}
if (!ptr_workspace->is_connected) //if (!ptr_workspace->is_connected)
{ //{
weechat_printf(buffer, // weechat_printf(buffer,
_("%s%s: you are not connected to server"), // _("%s%s: you are not connected to server"),
weechat_prefix("error"), SLACK_PLUGIN_NAME); // weechat_prefix("error"), XMPP_PLUGIN_NAME);
return WEECHAT_RC_OK; // return WEECHAT_RC_OK;
} //}
if (argc > 1) //if (argc > 1)
{ //{
text = malloc(SLACK_MESSAGE_MAX_LENGTH); // text = malloc(XMPP_MESSAGE_MAX_LENGTH);
if (!text) // if (!text)
{ // {
weechat_printf(buffer, // weechat_printf(buffer,
_("%s%s: error allocating string"), // _("%s%s: error allocating string"),
weechat_prefix("error"), SLACK_PLUGIN_NAME); // weechat_prefix("error"), XMPP_PLUGIN_NAME);
return WEECHAT_RC_ERROR; // return WEECHAT_RC_ERROR;
} // }
lws_urlencode(text, argv_eol[1], SLACK_MESSAGE_MAX_LENGTH); // lws_urlencode(text, argv_eol[1], XMPP_MESSAGE_MAX_LENGTH);
request = slack_request_chat_memessage(ptr_workspace, // request = xmpp_request_chat_memessage(ptr_workspace,
weechat_config_string( // weechat_config_string(
ptr_workspace->options[SLACK_WORKSPACE_OPTION_TOKEN]), // ptr_workspace->options[XMPP_WORKSPACE_OPTION_TOKEN]),
ptr_channel->id, text); // ptr_channel->id, text);
if (request) // if (request)
slack_workspace_register_request(ptr_workspace, request); // xmpp_workspace_register_request(ptr_workspace, request);
free(text); // free(text);
} //}
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
} }
void slack_command_init() void xmpp_command_init()
{ {
weechat_hook_command( weechat_hook_command(
"slack", "xmpp",
N_("slack control"), N_("xmpp control"),
N_("list" N_("list"
" || register [token]" " || register [token]"
" || connect <workspace>" " || connect <workspace>"
" || delete <workspace>"), " || delete <workspace>"),
N_(" list: list workspaces\n" N_(" list: list workspaces\n"
"register: add a slack workspace\n" "register: add a xmpp workspace\n"
" connect: connect to a slack workspace\n" " connect: connect to a xmpp workspace\n"
" delete: delete a slack workspace\n"), " delete: delete a xmpp workspace\n"),
"list" "list"
" || register %(slack_token)" " || register %(xmpp_token)"
" || connect %(slack_workspace)" " || connect %(xmpp_workspace)"
" || delete %(slack_workspace)", " || delete %(xmpp_workspace)",
&slack_command_slack, NULL, NULL); &xmpp_command_xmpp, NULL, NULL);
weechat_hook_command( weechat_hook_command(
"me", "me",
N_("send a slack action to the current channel"), N_("send a xmpp action to the current channel"),
N_("<message>"), N_("<message>"),
N_("message: message to send"), N_("message: message to send"),
NULL, &slack_command_me, NULL, NULL); NULL, &xmpp_command_me, NULL, NULL);
} }

@ -2,9 +2,9 @@
// License, version 2.0. If a copy of the MPL was not distributed with this // License, version 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef _SLACK_COMMAND_H_ #ifndef _XMPP_COMMAND_H_
#define _SLACK_COMMAND_H_ #define _XMPP_COMMAND_H_
extern void slack_command_init(); extern void xmpp_command_init();
#endif /*SLACK_COMMAND_H*/ #endif /*XMPP_COMMAND_H*/

@ -16,13 +16,12 @@
//#include "api/xmpp-api-message.h" //#include "api/xmpp-api-message.h"
//#include "api/xmpp-api-user-typing.h" //#include "api/xmpp-api-user-typing.h"
xmpp_ctx_t *xmpp_context = NULL; xmpp_conn_t *xmpp_connection;
xmpp_conn_t *xmpp_connection = NULL;
void xmpp_log_emit_weechat(void *const userdata, const xmpp_log_level_t level, const char *const area, const char *const msg) void xmpp_log_emit_weechat(void *const userdata, const xmpp_log_level_t level, const char *const area, const char *const msg)
{ {
(void) userdata; (void) userdata;
time_t date = time(NULL); time_t date = time(NULL);
const char *timestamp = weechat_util_get_time_string(&date); const char *timestamp = weechat_util_get_time_string(&date);
@ -40,22 +39,27 @@ xmpp_log_t xmpp_logger = {
void xmpp_connection_init() void xmpp_connection_init()
{ {
xmpp_initialize(); xmpp_initialize();
xmpp_context = xmpp_ctx_new(NULL, &xmpp_logger); }
xmpp_connection = xmpp_conn_new(xmpp_context);
xmpp_conn_set_jid(xmpp_connection,
weechat_config_string(xmpp_config_serverdef_jid));
xmpp_conn_set_pass(xmpp_connection,
weechat_config_string(xmpp_config_serverdef_password));
//size_t case_count = sizeof(cases) / sizeof(cases[0]);
//qsort(cases, case_count, sizeof(struct stringcase), stringcase_cmp);
//xmpp_api_message_init(); void xmpp_connection_autoconnect()
{
xmpp_connection_connect(weechat_config_string(xmpp_config_serverdef_jid),
weechat_config_string(xmpp_config_serverdef_password));
weechat_printf(NULL, _("xmpp: %s # %s"),
weechat_config_string(xmpp_config_serverdef_jid),
weechat_config_string(xmpp_config_serverdef_password));
} }
void xmpp_connection_connect(xmpp_conn_t *connection) void xmpp_connection_connect(const char* jid, const char* password)
{ {
xmpp_ctx_t *xmpp_context = xmpp_ctx_new(NULL, &xmpp_logger);
xmpp_conn_t *xmpp_connection = xmpp_conn_new(xmpp_context);
xmpp_connection = xmpp_conn_new(xmpp_context);
xmpp_conn_set_jid(xmpp_connection, jid);
xmpp_conn_set_pass(xmpp_connection, password);
//struct lws_context_creation_info ctxinfo; //struct lws_context_creation_info ctxinfo;
//struct lws_client_connect_info ccinfo; //struct lws_client_connect_info ccinfo;
//const char *url_protocol, *url_path; //const char *url_protocol, *url_path;
@ -117,6 +121,7 @@ void xmpp_connection_connect(xmpp_conn_t *connection)
//ccinfo.userdata = workspace; //ccinfo.userdata = workspace;
//lws_client_connect_via_info(&ccinfo); //lws_client_connect_via_info(&ccinfo);
return xmpp_connection;
} }
int xmpp_connection_route_message(xmpp_conn_t *workspace, int xmpp_connection_route_message(xmpp_conn_t *workspace,

@ -5,13 +5,13 @@
#ifndef _XMPP_CONNECTION_H_ #ifndef _XMPP_CONNECTION_H_
#define _XMPP_CONNECTION_H_ #define _XMPP_CONNECTION_H_
extern xmpp_ctx_t *xmpp_context;
extern xmpp_conn_t *xmpp_connection; extern xmpp_conn_t *xmpp_connection;
void xmpp_connection_init(); void xmpp_connection_init();
void xmpp_connection_connect(xmpp_conn_t *connection); void xmpp_connection_autoconnect();
void xmpp_connection_connect(const char* jid, const char* password);
int xmpp_connection_route_message(xmpp_conn_t *connection, int xmpp_connection_route_message(xmpp_conn_t *connection,
const char *type, json_object *message); const char *type, json_object *message);

@ -12,10 +12,10 @@
#include "xmpp.h" #include "xmpp.h"
#include "xmpp-config.h" #include "xmpp-config.h"
#include "xmpp-connection.h" #include "xmpp-connection.h"
//#include "slack-command.h" #include "xmpp-command.h"
//#include "slack-workspace.h" //#include "xmpp-workspace.h"
//#include "slack-buffer.h" //#include "xmpp-buffer.h"
//#include "slack-completion.h" //#include "xmpp-completion.h"
WEECHAT_PLUGIN_NAME(XMPP_PLUGIN_NAME); WEECHAT_PLUGIN_NAME(XMPP_PLUGIN_NAME);
@ -31,6 +31,15 @@ struct t_hook *xmpp_hook_timer = NULL;
struct t_gui_bar_item *xmpp_typing_bar_item = NULL; struct t_gui_bar_item *xmpp_typing_bar_item = NULL;
/*
void connection_check_events(void)
{
conn.xmpp_in_event_loop = TRUE;
xmpp_run_once(conn.xmpp_ctx, 10);
conn.xmpp_in_event_loop = FALSE;
}
*/
int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[]) int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[])
{ {
(void) argc; (void) argc;
@ -45,7 +54,9 @@ int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[])
xmpp_connection_init(); xmpp_connection_init();
//xmpp_command_init(); xmpp_command_init();
xmpp_connection_autoconnect();
//xmpp_completion_init(); //xmpp_completion_init();
@ -81,9 +92,17 @@ int weechat_plugin_end(struct t_weechat_plugin *plugin)
xmpp_config_write(); xmpp_config_write();
xmpp_conn_release(xmpp_connection); if (xmpp_connection)
{
xmpp_ctx_t *xmpp_context = xmpp_conn_get_context(xmpp_connection);
if (xmpp_conn_is_connected(xmpp_connection))
xmpp_disconnect(xmpp_connection);
xmpp_ctx_free(xmpp_context); xmpp_conn_release(xmpp_connection);
xmpp_ctx_free(xmpp_context);
}
xmpp_shutdown(); xmpp_shutdown();

Loading…
Cancel
Save