diff --git a/.envrc b/.envrc index 3381671..ec1a23e 100644 --- a/.envrc +++ b/.envrc @@ -34,27 +34,19 @@ use_guix() fi # Miscellaneous packages. - PACKAGES_MAINTENANCE=( - direnv - git - git:send-email - gnupg - guile-colorized - guile-readline - less - ncurses - openssh - xdot + ENVIRONMENTS=( + weechat ) # Environment packages. - PACKAGES=(help2man guile-sqlite3 guile-gcrypt - autoconf autoconf-archive automake libtool - make cmake gcc-toolchain pkg-config - libressl libxml2 libstrophe json-c weechat) + PACKAGES=( + autoconf autoconf-archive automake libtool + make cmake gcc-toolchain pkg-config patchelf + weechat xz libxml2 libstrophe json-c + ) # 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 } diff --git a/.gitmodules b/.gitmodules index 1c84e5a..fc93d6e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "json-c"] path = json-c url = https://github.com/json-c/json-c -[submodule "libstrophe"] - path = libstrophe - url = https://github.com/strophe/libstrophe diff --git a/Makefile b/Makefile index dcc399f..3b28f64 100644 --- a/Makefile +++ b/Makefile @@ -4,67 +4,68 @@ ifdef DEBUG endif RM=rm -f 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) -LDLIBS=-lssl -lxml2 +LDLIBS=-lstrophe -lpthread PREFIX ?= /usr/local LIBDIR ?= $(PREFIX)/lib INSTALL ?= /usr/bin/install SRCS=xmpp.c \ + xmpp-command.c \ xmpp-config.c \ xmpp-connection.c \ +DEPS=json-c/libjson-c.a OLDSRCS=slack.c \ - slack-api.c \ - slack-buffer.c \ - slack-channel.c \ - slack-config.c \ - slack-command.c \ - slack-completion.c \ - slack-emoji.c \ - slack-input.c \ - slack-message.c \ - slack-oauth.c \ - slack-request.c \ - slack-teaminfo.c \ - slack-user.c \ - slack-workspace.c \ - api/slack-api-hello.c \ - api/slack-api-error.c \ - api/slack-api-message.c \ - api/slack-api-user-typing.c \ - api/message/slack-api-message-bot-message.c \ - api/message/slack-api-message-slackbot-response.c \ - api/message/slack-api-message-me-message.c \ - api/message/slack-api-message-unimplemented.c \ - request/slack-request-chat-memessage.c \ - request/slack-request-chat-postmessage.c \ - request/slack-request-channels-list.c \ - request/slack-request-conversations-members.c \ - request/slack-request-emoji-list.c \ - request/slack-request-users-list.c -OBJS=$(subst .c,.o,$(SRCS)) libstrophe/.libs/libstrophe.a json-c/libjson-c.a - -all: libstrophe/.libs/libstrophe.a json-c/libjson-c.a weechat-xmpp + slack-api.c \ + slack-buffer.c \ + slack-channel.c \ + slack-config.c \ + slack-command.c \ + slack-completion.c \ + slack-emoji.c \ + slack-input.c \ + slack-message.c \ + slack-oauth.c \ + slack-request.c \ + slack-teaminfo.c \ + slack-user.c \ + slack-workspace.c \ + api/slack-api-hello.c \ + api/slack-api-error.c \ + api/slack-api-message.c \ + api/slack-api-user-typing.c \ + api/message/slack-api-message-bot-message.c \ + api/message/slack-api-message-slackbot-response.c \ + api/message/slack-api-message-me-message.c \ + api/message/slack-api-message-unimplemented.c \ + request/slack-request-chat-memessage.c \ + request/slack-request-chat-postmessage.c \ + request/slack-request-channels-list.c \ + request/slack-request-conversations-members.c \ + request/slack-request-emoji-list.c \ + request/slack-request-users-list.c +OBJS=$(subst .c,.o,$(SRCS)) + +all: $(DEPS) weechat-xmpp weechat-xmpp: $(OBJS) $(CC) $(LDFLAGS) -o xmpp.so $(OBJS) $(LDLIBS) - -libstrophe/.libs/libstrophe.a: - cd libstrophe && ./bootstrap.sh && env CFLAGS=-fPIC LDFLAGS= ./configure - $(MAKE) -C libstrophe -libstrophe: libstrophe/.libs/libstrophe.a + which patchelf >/dev/null && \ + patchelf --set-rpath $(LIBRARY_PATH):$(shell patchelf --print-rpath xmpp.so) xmpp.so || true 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 json-c: json-c/libjson-c.a depend: .depend -.depend: libstrophe/.libs/libstrophe.a json-c/libjson-c.a $(SRCS) +.depend: json-c/libjson-c.a $(SRCS) $(RM) ./.depend $(CC) $(CFLAGS) -MM $^>>./.depend @@ -73,8 +74,6 @@ tidy: clean: $(RM) $(OBJS) - $(MAKE) -C libstrophe clean || true - $(MAKE) -C libwebsockets clean || true $(MAKE) -C json-c clean || true git submodule foreach --recursive git clean -xfd || true git submodule foreach --recursive git reset --hard || true diff --git a/libstrophe b/libstrophe deleted file mode 160000 index 2d5424b..0000000 --- a/libstrophe +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2d5424bcff4e9d810b73444b02708f69743ff65d diff --git a/slack-command.c b/xmpp-command.c similarity index 51% rename from slack-command.c rename to xmpp-command.c index 201ff4d..44ae73c 100644 --- a/slack-command.c +++ b/xmpp-command.c @@ -2,32 +2,33 @@ // 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/. -#include <libwebsockets.h> +#include <strophe.h> #include <stdlib.h> #include <string.h> - -#include "weechat-plugin.h" -#include "slack.h" -#include "slack-oauth.h" -#include "slack-teaminfo.h" -#include "slack-workspace.h" -#include "slack-channel.h" -#include "slack-buffer.h" -#include "slack-message.h" -#include "slack-command.h" -#include "request/slack-request-chat-memessage.h" - -void slack_command_display_workspace(struct t_slack_workspace *workspace) +#include <weechat/weechat-plugin.h> + +#include "xmpp.h" +//#include "xmpp-oauth.h" +//#include "xmpp-teaminfo.h" +//#include "xmpp-workspace.h" +//#include "xmpp-channel.h" +//#include "xmpp-buffer.h" +//#include "xmpp-message.h" +#include "xmpp-command.h" +//#include "request/xmpp-request-chat-memessage.h" + +/* +void xmpp_command_display_workspace(xmpp_conn_t *workspace) { int num_channels, num_pv; if (workspace->is_connected) { - num_channels = 0;//slack_workspace_get_channel_count(workspace); - num_pv = 0;//slack_workspace_get_pv_count(workspace); + num_channels = 0;//xmpp_workspace_get_channel_count(workspace); + num_pv = 0;//xmpp_workspace_get_pv_count(workspace); weechat_printf( 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) ? "*" : " ", weechat_color("chat_server"), workspace->domain, @@ -50,7 +51,7 @@ void slack_command_display_workspace(struct t_slack_workspace *workspace) { weechat_printf( 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"), workspace->domain, 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; - struct t_slack_workspace *ptr_workspace2; + xmpp_conn_t *ptr_workspace2; char *workspace_name = NULL; for (i = 2; i < argc; i++) @@ -76,14 +77,14 @@ void slack_command_workspace_list(int argc, char **argv) } if (!workspace_name) { - if (slack_workspaces) + if (xmpp_workspaces) { weechat_printf(NULL, ""); 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) { - slack_command_display_workspace(ptr_workspace2); + xmpp_command_display_workspace(ptr_workspace2); } } else @@ -92,7 +93,7 @@ void slack_command_workspace_list(int argc, char **argv) else { one_workspace_found = 0; - for (ptr_workspace2 = slack_workspaces; ptr_workspace2; + for (ptr_workspace2 = xmpp_workspaces; ptr_workspace2; ptr_workspace2 = ptr_workspace2->next_workspace) { if (weechat_strcasestr(ptr_workspace2->name, workspace_name)) @@ -105,7 +106,7 @@ void slack_command_workspace_list(int argc, char **argv) workspace_name); } one_workspace_found = 1; - slack_command_display_workspace(ptr_workspace2); + xmpp_command_display_workspace(ptr_workspace2); } } 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) { weechat_printf( NULL, _("%s%s: workspace \"%s\" already exists, can't add it!"), - weechat_prefix("error"), SLACK_PLUGIN_NAME, - slack_teaminfo->domain); + weechat_prefix("error"), XMPP_PLUGIN_NAME, + xmpp_teaminfo->domain); return; } - workspace = slack_workspace_alloc(slack_teaminfo->domain); + workspace = xmpp_workspace_alloc(xmpp_teaminfo->domain); if (!workspace) { weechat_printf( NULL, _("%s%s: unable to add workspace"), - weechat_prefix("error"), SLACK_PLUGIN_NAME); + weechat_prefix("error"), XMPP_PLUGIN_NAME); return; } - workspace->id = strdup(slack_teaminfo->id); - workspace->name = strdup(slack_teaminfo->name); - weechat_config_option_set(workspace->options[SLACK_WORKSPACE_OPTION_TOKEN], - slack_teaminfo->token, 1); + workspace->id = strdup(xmpp_teaminfo->id); + workspace->name = strdup(xmpp_teaminfo->name); + weechat_config_option_set(workspace->options[XMPP_WORKSPACE_OPTION_TOKEN], + xmpp_teaminfo->token, 1); weechat_printf ( NULL, - _("%s: workspace %s%s%s.slack.com %s(%s%s%s)%s added"), - SLACK_PLUGIN_NAME, + _("%s: workspace %s%s%s.xmpp.com %s(%s%s%s)%s added"), + XMPP_PLUGIN_NAME, weechat_color("chat_server"), workspace->domain, weechat_color("reset"), @@ -158,47 +159,47 @@ void slack_command_add_workspace(struct t_slack_teaminfo *slack_teaminfo) weechat_color("chat_delimiters"), 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); } -void slack_command_workspace_register(int argc, char **argv) +void xmpp_command_workspace_register(int argc, char **argv) { char *code; if (argc > 2) { code = argv[2]; - + if (strncmp("xoxp", code, 4) == 0) { - slack_command_fetch_workspace(strdup(code)); + xmpp_command_fetch_workspace(strdup(code)); } else { - slack_oauth_request_token(code, &slack_command_fetch_workspace); + xmpp_oauth_request_token(code, &xmpp_command_fetch_workspace); } } else { weechat_printf(NULL, - _("\n#### Retrieving a Slack token via OAUTH ####\n" - "1) Paste this into a browser: https://slack.com/oauth/authorize?client_id=%s&scope=client\n" + _("\n#### Retrieving a Xmpp token via OAUTH ####\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" "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" - "5) Return to weechat and run `/slack register [code]`\n"), - SLACK_CLIENT_ID); + "5) Return to weechat and run `/xmpp register [code]`\n"), + XMPP_CLIENT_ID); } } -int slack_command_connect_workspace(struct t_slack_workspace *workspace) +int xmpp_command_connect_workspace(xmpp_conn_t *workspace) { if (!workspace) return 0; @@ -208,19 +209,19 @@ int slack_command_connect_workspace(struct t_slack_workspace *workspace) weechat_printf( NULL, _("%s%s: already connected to workspace \"%s\"!"), - weechat_prefix("error"), SLACK_PLUGIN_NAME, + weechat_prefix("error"), XMPP_PLUGIN_NAME, workspace->domain); } - slack_workspace_connect(workspace); + xmpp_workspace_connect(workspace); 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; - struct t_slack_workspace *ptr_workspace; + xmpp_conn_t *ptr_workspace; (void) argc; (void) argv; @@ -231,10 +232,10 @@ int slack_command_workspace_connect(int argc, char **argv) for (i = 2; i < argc; i++) { nb_connect++; - ptr_workspace = slack_workspace_search(argv[i]); + ptr_workspace = xmpp_workspace_search(argv[i]); if (ptr_workspace) { - if (!slack_command_connect_workspace(ptr_workspace)) + if (!xmpp_command_connect_workspace(ptr_workspace)) { connect_ok = 0; } @@ -244,8 +245,8 @@ int slack_command_workspace_connect(int argc, char **argv) weechat_printf( NULL, _("%s%s: workspace not found \"%s\" " - "(register first with: /slack register)"), - weechat_prefix("error"), SLACK_PLUGIN_NAME, + "(register first with: /xmpp register)"), + weechat_prefix("error"), XMPP_PLUGIN_NAME, argv[i]); } } @@ -253,9 +254,9 @@ int slack_command_workspace_connect(int argc, char **argv) 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; if (argc < 3) @@ -269,14 +270,14 @@ void slack_command_workspace_delete(int argc, char **argv) return; } - workspace = slack_workspace_search(argv[2]); + workspace = xmpp_workspace_search(argv[2]); if (!workspace) { weechat_printf( NULL, _("%s%s: workspace \"%s\" not found for \"%s\" command"), - weechat_prefix("error"), SLACK_PLUGIN_NAME, - argv[2], "slack delete"); + weechat_prefix("error"), XMPP_PLUGIN_NAME, + argv[2], "xmpp delete"); return; } if (workspace->is_connected) @@ -284,151 +285,151 @@ void slack_command_workspace_delete(int argc, char **argv) weechat_printf( NULL, _("%s%s: you cannot delete workspace \"%s\" because you" - "are connected. Try \"/slack disconnect %s\" first."), - weechat_prefix("error"), SLACK_PLUGIN_NAME, + "are connected. Try \"/xmpp disconnect %s\" first."), + weechat_prefix("error"), XMPP_PLUGIN_NAME, argv[2], argv[2]); return; } workspace_domain = strdup(workspace->domain); - slack_workspace_free(workspace); + xmpp_workspace_free(workspace); weechat_printf ( NULL, _("%s: workspace %s%s%s has been deleted"), - SLACK_PLUGIN_NAME, + XMPP_PLUGIN_NAME, weechat_color("chat_server"), (workspace_domain) ? workspace_domain : "???", weechat_color("reset")); if (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, char **argv, char **argv_eol) { - + (void) pointer; (void) data; (void) buffer; - if (argc <= 1 || weechat_strcasecmp(argv[1], "list") == 0) - { - slack_command_workspace_list(argc, argv); - return WEECHAT_RC_OK; - } - - if (argc > 1) - { - if (weechat_strcasecmp(argv[1], "register") == 0) - { - slack_command_workspace_register(argc, argv); - return WEECHAT_RC_OK; - } - - if (weechat_strcasecmp(argv[1], "connect") == 0) - { - slack_command_workspace_connect(argc, argv); - return WEECHAT_RC_OK; - } - - if (weechat_strcasecmp(argv[1], "delete") == 0) - { - slack_command_workspace_delete(argc, argv); - return WEECHAT_RC_OK; - } - - WEECHAT_COMMAND_ERROR; - } + //if (argc <= 1 || weechat_strcasecmp(argv[1], "list") == 0) + //{ + // xmpp_command_workspace_list(argc, argv); + // return WEECHAT_RC_OK; + //} + + //if (argc > 1) + //{ + // if (weechat_strcasecmp(argv[1], "register") == 0) + // { + // xmpp_command_workspace_register(argc, argv); + // return WEECHAT_RC_OK; + // } + + // if (weechat_strcasecmp(argv[1], "connect") == 0) + // { + // xmpp_command_workspace_connect(argc, argv); + // return WEECHAT_RC_OK; + // } + + // if (weechat_strcasecmp(argv[1], "delete") == 0) + // { + // xmpp_command_workspace_delete(argc, argv); + // return WEECHAT_RC_OK; + // } + + // WEECHAT_COMMAND_ERROR; + //} 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, char **argv, char **argv_eol) { - struct t_slack_workspace *ptr_workspace = NULL; - struct t_slack_channel *ptr_channel = NULL; - struct t_slack_request *request; + xmpp_conn_t *ptr_workspace = NULL; + //struct t_xmpp_channel *ptr_channel = NULL; + //struct t_xmpp_request *request; char *text; - - + (void) pointer; (void) data; (void) buffer; (void) argv; - slack_buffer_get_workspace_and_channel(buffer, &ptr_workspace, &ptr_channel); - - if (!ptr_workspace) - return WEECHAT_RC_ERROR; - - if (!ptr_channel) - { - weechat_printf ( - ptr_workspace->buffer, - _("%s%s: \"%s\" command can not be executed on a workspace buffer"), - weechat_prefix("error"), SLACK_PLUGIN_NAME, "me"); - return WEECHAT_RC_OK; - } - - if (!ptr_workspace->is_connected) - { - weechat_printf(buffer, - _("%s%s: you are not connected to server"), - weechat_prefix("error"), SLACK_PLUGIN_NAME); - return WEECHAT_RC_OK; - } - - if (argc > 1) - { - text = malloc(SLACK_MESSAGE_MAX_LENGTH); - if (!text) - { - weechat_printf(buffer, - _("%s%s: error allocating string"), - weechat_prefix("error"), SLACK_PLUGIN_NAME); - return WEECHAT_RC_ERROR; - } - lws_urlencode(text, argv_eol[1], SLACK_MESSAGE_MAX_LENGTH); - - request = slack_request_chat_memessage(ptr_workspace, - weechat_config_string( - ptr_workspace->options[SLACK_WORKSPACE_OPTION_TOKEN]), - ptr_channel->id, text); - if (request) - slack_workspace_register_request(ptr_workspace, request); - - free(text); - } + //xmpp_buffer_get_workspace_and_channel(buffer, &ptr_workspace, &ptr_channel); + + //if (!ptr_workspace) + // return WEECHAT_RC_ERROR; + + //if (!ptr_channel) + //{ + // weechat_printf ( + // ptr_workspace->buffer, + // _("%s%s: \"%s\" command can not be executed on a workspace buffer"), + // weechat_prefix("error"), XMPP_PLUGIN_NAME, "me"); + // return WEECHAT_RC_OK; + //} + + //if (!ptr_workspace->is_connected) + //{ + // weechat_printf(buffer, + // _("%s%s: you are not connected to server"), + // weechat_prefix("error"), XMPP_PLUGIN_NAME); + // return WEECHAT_RC_OK; + //} + + //if (argc > 1) + //{ + // text = malloc(XMPP_MESSAGE_MAX_LENGTH); + // if (!text) + // { + // weechat_printf(buffer, + // _("%s%s: error allocating string"), + // weechat_prefix("error"), XMPP_PLUGIN_NAME); + // return WEECHAT_RC_ERROR; + // } + // lws_urlencode(text, argv_eol[1], XMPP_MESSAGE_MAX_LENGTH); + + // request = xmpp_request_chat_memessage(ptr_workspace, + // weechat_config_string( + // ptr_workspace->options[XMPP_WORKSPACE_OPTION_TOKEN]), + // ptr_channel->id, text); + // if (request) + // xmpp_workspace_register_request(ptr_workspace, request); + + // free(text); + //} return WEECHAT_RC_OK; } -void slack_command_init() +void xmpp_command_init() { weechat_hook_command( - "slack", - N_("slack control"), + "xmpp", + N_("xmpp control"), N_("list" " || register [token]" " || connect <workspace>" " || delete <workspace>"), N_(" list: list workspaces\n" - "register: add a slack workspace\n" - " connect: connect to a slack workspace\n" - " delete: delete a slack workspace\n"), + "register: add a xmpp workspace\n" + " connect: connect to a xmpp workspace\n" + " delete: delete a xmpp workspace\n"), "list" - " || register %(slack_token)" - " || connect %(slack_workspace)" - " || delete %(slack_workspace)", - &slack_command_slack, NULL, NULL); + " || register %(xmpp_token)" + " || connect %(xmpp_workspace)" + " || delete %(xmpp_workspace)", + &xmpp_command_xmpp, NULL, NULL); weechat_hook_command( "me", - N_("send a slack action to the current channel"), + N_("send a xmpp action to the current channel"), N_("<message>"), N_("message: message to send"), - NULL, &slack_command_me, NULL, NULL); + NULL, &xmpp_command_me, NULL, NULL); } diff --git a/slack-command.h b/xmpp-command.h similarity index 65% rename from slack-command.h rename to xmpp-command.h index 9d27194..62be0e5 100644 --- a/slack-command.h +++ b/xmpp-command.h @@ -2,9 +2,9 @@ // 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/. -#ifndef _SLACK_COMMAND_H_ -#define _SLACK_COMMAND_H_ +#ifndef _XMPP_COMMAND_H_ +#define _XMPP_COMMAND_H_ -extern void slack_command_init(); +extern void xmpp_command_init(); -#endif /*SLACK_COMMAND_H*/ +#endif /*XMPP_COMMAND_H*/ diff --git a/xmpp-connection.c b/xmpp-connection.c index 47152f1..993996d 100644 --- a/xmpp-connection.c +++ b/xmpp-connection.c @@ -16,13 +16,12 @@ //#include "api/xmpp-api-message.h" //#include "api/xmpp-api-user-typing.h" -xmpp_ctx_t *xmpp_context = NULL; - -xmpp_conn_t *xmpp_connection = NULL; +xmpp_conn_t *xmpp_connection; void xmpp_log_emit_weechat(void *const userdata, const xmpp_log_level_t level, const char *const area, const char *const msg) { (void) userdata; + time_t date = time(NULL); const char *timestamp = weechat_util_get_time_string(&date); @@ -40,22 +39,27 @@ xmpp_log_t xmpp_logger = { void xmpp_connection_init() { - 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_client_connect_info ccinfo; //const char *url_protocol, *url_path; @@ -117,6 +121,7 @@ void xmpp_connection_connect(xmpp_conn_t *connection) //ccinfo.userdata = workspace; //lws_client_connect_via_info(&ccinfo); + return xmpp_connection; } int xmpp_connection_route_message(xmpp_conn_t *workspace, diff --git a/xmpp-connection.h b/xmpp-connection.h index f6e7979..339b6db 100644 --- a/xmpp-connection.h +++ b/xmpp-connection.h @@ -5,13 +5,13 @@ #ifndef _XMPP_CONNECTION_H_ #define _XMPP_CONNECTION_H_ -extern xmpp_ctx_t *xmpp_context; - extern xmpp_conn_t *xmpp_connection; 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, const char *type, json_object *message); diff --git a/xmpp.c b/xmpp.c index c489c66..788f573 100644 --- a/xmpp.c +++ b/xmpp.c @@ -12,10 +12,10 @@ #include "xmpp.h" #include "xmpp-config.h" #include "xmpp-connection.h" -//#include "slack-command.h" -//#include "slack-workspace.h" -//#include "slack-buffer.h" -//#include "slack-completion.h" +#include "xmpp-command.h" +//#include "xmpp-workspace.h" +//#include "xmpp-buffer.h" +//#include "xmpp-completion.h" 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; +/* +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[]) { (void) argc; @@ -45,7 +54,9 @@ int weechat_plugin_init(struct t_weechat_plugin *plugin, int argc, char *argv[]) xmpp_connection_init(); - //xmpp_command_init(); + xmpp_command_init(); + + xmpp_connection_autoconnect(); //xmpp_completion_init(); @@ -81,9 +92,17 @@ int weechat_plugin_end(struct t_weechat_plugin *plugin) 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();