mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge branch 'master' into osx-functional
Conflicts: .travis.yml
This commit is contained in:
commit
8e15527079
2
.gitignore
vendored
2
.gitignore
vendored
@ -33,9 +33,11 @@ m4/
|
|||||||
src/config.h
|
src/config.h
|
||||||
src/config.h.in
|
src/config.h.in
|
||||||
src/config.h.in~
|
src/config.h.in~
|
||||||
|
src/prof_config.h
|
||||||
src/gitversion.h
|
src/gitversion.h
|
||||||
src/gitversion.h.in
|
src/gitversion.h.in
|
||||||
src/stamp-h1
|
src/stamp-h1
|
||||||
|
src/plugins/profapi.lo
|
||||||
|
|
||||||
# binaries
|
# binaries
|
||||||
profanity
|
profanity
|
||||||
|
@ -4,6 +4,7 @@ install:
|
|||||||
- uname -a
|
- uname -a
|
||||||
- sudo apt-get update
|
- sudo apt-get update
|
||||||
- sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev libgpgme11-dev expect-dev tcl-dev
|
- sudo apt-get -y install libssl-dev libexpat1-dev libncursesw5-dev libglib2.0-dev libnotify-dev libcurl3-dev libxss-dev libotr2-dev libgpgme11-dev expect-dev tcl-dev
|
||||||
|
- sudo apt-get -y install autoconf-archive libtool
|
||||||
- git clone git://github.com/boothj5/libmesode.git
|
- git clone git://github.com/boothj5/libmesode.git
|
||||||
- cd libmesode
|
- cd libmesode
|
||||||
- mkdir m4
|
- mkdir m4
|
||||||
@ -33,4 +34,4 @@ install:
|
|||||||
- cd ..
|
- cd ..
|
||||||
- rm -rf stabber
|
- rm -rf stabber
|
||||||
- ./bootstrap.sh
|
- ./bootstrap.sh
|
||||||
script: ./configure && make && make check-unit
|
script: ./configure --enable-c-plugins && make && make check-unit
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Profanity
|
Profanity
|
||||||
Copyright (C) 2012 - 2015 James Booth <boothj5@gmail.com>
|
Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
|
||||||
Profanity is free software: you can redistribute it and/or modify
|
Profanity is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
30
Makefile.am
30
Makefile.am
@ -41,7 +41,12 @@ core_sources = \
|
|||||||
src/config/account.c src/config/account.h \
|
src/config/account.c src/config/account.h \
|
||||||
src/config/preferences.c src/config/preferences.h \
|
src/config/preferences.c src/config/preferences.h \
|
||||||
src/config/theme.c src/config/theme.h \
|
src/config/theme.c src/config/theme.h \
|
||||||
src/config/scripts.c src/config/scripts.h
|
src/config/scripts.c src/config/scripts.h \
|
||||||
|
src/plugins/plugins.h src/plugins/plugins.c \
|
||||||
|
src/plugins/api.h src/plugins/api.c \
|
||||||
|
src/plugins/callbacks.h src/plugins/callbacks.c \
|
||||||
|
src/plugins/autocompleters.c src/plugins/autocompleters.h \
|
||||||
|
src/plugins/themes.c src/plugins/themes.h
|
||||||
|
|
||||||
unittest_sources = \
|
unittest_sources = \
|
||||||
src/contact.c src/contact.h src/common.c \
|
src/contact.c src/contact.h src/common.c \
|
||||||
@ -69,6 +74,11 @@ unittest_sources = \
|
|||||||
src/config/theme.c src/config/theme.h \
|
src/config/theme.c src/config/theme.h \
|
||||||
src/config/scripts.c src/config/scripts.h \
|
src/config/scripts.c src/config/scripts.h \
|
||||||
src/config/conflists.c src/config/conflists.h \
|
src/config/conflists.c src/config/conflists.h \
|
||||||
|
src/plugins/plugins.h src/plugins/plugins.c \
|
||||||
|
src/plugins/api.h src/plugins/api.c \
|
||||||
|
src/plugins/callbacks.h src/plugins/callbacks.c \
|
||||||
|
src/plugins/autocompleters.c src/plugins/autocompleters.h \
|
||||||
|
src/plugins/themes.c src/plugins/themes.h \
|
||||||
src/window_list.c src/window_list.h \
|
src/window_list.c src/window_list.h \
|
||||||
src/event/server_events.c src/event/server_events.h \
|
src/event/server_events.c src/event/server_events.h \
|
||||||
src/event/client_events.c src/event/client_events.h \
|
src/event/client_events.c src/event/client_events.h \
|
||||||
@ -120,6 +130,10 @@ functionaltest_sources = \
|
|||||||
|
|
||||||
main_source = src/main.c
|
main_source = src/main.c
|
||||||
|
|
||||||
|
c_sources = \
|
||||||
|
src/plugins/c_plugins.h src/plugins/c_plugins.c \
|
||||||
|
src/plugins/c_api.h src/plugins/c_api.c
|
||||||
|
|
||||||
git_include = src/gitversion.h
|
git_include = src/gitversion.h
|
||||||
|
|
||||||
pgp_sources = \
|
pgp_sources = \
|
||||||
@ -134,6 +148,11 @@ otr3_sources = \
|
|||||||
otr4_sources = \
|
otr4_sources = \
|
||||||
src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c
|
src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c
|
||||||
|
|
||||||
|
if BUILD_C_API
|
||||||
|
core_sources += $(c_sources)
|
||||||
|
unittest_sources += $(c_sources)
|
||||||
|
endif
|
||||||
|
|
||||||
otr_unittest_sources = \
|
otr_unittest_sources = \
|
||||||
tests/unittests/otr/stub_otr.c
|
tests/unittests/otr/stub_otr.c
|
||||||
|
|
||||||
@ -168,6 +187,15 @@ if INCLUDE_GIT_VERSION
|
|||||||
BUILT_SOURCES = $(git_include)
|
BUILT_SOURCES = $(git_include)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if BUILD_C_API
|
||||||
|
lib_LTLIBRARIES = libprofanity.la
|
||||||
|
libprofanity_la_LDFLAGS=-avoid-version -shared
|
||||||
|
libprofanity_la_SOURCES = src/plugins/profapi.c
|
||||||
|
|
||||||
|
library_includedir=$(includedir)
|
||||||
|
library_include_HEADERS = src/plugins/profapi.h
|
||||||
|
endif
|
||||||
|
|
||||||
TESTS = tests/unittests/unittests
|
TESTS = tests/unittests/unittests
|
||||||
check_PROGRAMS = tests/unittests/unittests
|
check_PROGRAMS = tests/unittests/unittests
|
||||||
tests_unittests_unittests_SOURCES = $(unittest_sources)
|
tests_unittests_unittests_SOURCES = $(unittest_sources)
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
autoreconf --install
|
autoreconf -fiv
|
||||||
|
28
configure.ac
28
configure.ac
@ -2,14 +2,16 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_INIT([profanity], [0.5.0], [boothj5web@gmail.com])
|
AC_INIT([profanity], [0.5.0], [boothj5web@gmail.com])
|
||||||
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_SRCDIR([src/main.c])
|
AC_CONFIG_SRCDIR([src/main.c])
|
||||||
AC_CONFIG_HEADERS([src/config.h])
|
AC_CONFIG_HEADERS([src/config.h])
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
|
||||||
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
||||||
|
AX_PREFIX_CONFIG_H([src/prof_config.h], [PROF], [src/config.h])
|
||||||
|
|
||||||
### Checks for programs.
|
### Checks for programs.
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
## Check for LFS
|
## Check for LFS
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
@ -43,6 +45,10 @@ AS_IF([test "x$PLATFORM" = xosx],
|
|||||||
### Options
|
### Options
|
||||||
AC_ARG_ENABLE([notifications],
|
AC_ARG_ENABLE([notifications],
|
||||||
[AS_HELP_STRING([--enable-notifications], [enable desktop notifications])])
|
[AS_HELP_STRING([--enable-notifications], [enable desktop notifications])])
|
||||||
|
AC_ARG_ENABLE([c-plugins],
|
||||||
|
[AS_HELP_STRING([--enable-c-plugins], [enable C plugins])])
|
||||||
|
AC_ARG_ENABLE([plugins],
|
||||||
|
[AS_HELP_STRING([--enable-plugins], [enable plugins])])
|
||||||
AC_ARG_ENABLE([otr],
|
AC_ARG_ENABLE([otr],
|
||||||
[AS_HELP_STRING([--enable-otr], [enable otr encryption])])
|
[AS_HELP_STRING([--enable-otr], [enable otr encryption])])
|
||||||
AC_ARG_ENABLE([pgp],
|
AC_ARG_ENABLE([pgp],
|
||||||
@ -52,6 +58,23 @@ AC_ARG_WITH([xscreensaver],
|
|||||||
AC_ARG_WITH([themes],
|
AC_ARG_WITH([themes],
|
||||||
[AS_HELP_STRING([--with-themes[[=PATH]]], [install themes (default yes)])])
|
[AS_HELP_STRING([--with-themes[[=PATH]]], [install themes (default yes)])])
|
||||||
|
|
||||||
|
### plugins
|
||||||
|
# c
|
||||||
|
LT_INIT
|
||||||
|
if test "x$enable_plugins" = xno; then
|
||||||
|
AM_CONDITIONAL([BUILD_C_API], [false])
|
||||||
|
elif test "x$enable_c_plugins" != xno; then
|
||||||
|
AC_CHECK_LIB([dl], [main],
|
||||||
|
[AM_CONDITIONAL([BUILD_C_API], [true]) LIBS="$LIBS -ldl" AC_DEFINE([HAVE_C], [1], [C support])],
|
||||||
|
[AS_IF(
|
||||||
|
[test "x$enable_c_plugins" = xyes],
|
||||||
|
[AC_MSG_ERROR([dl library needed to run C plugins])],
|
||||||
|
[AM_CONDITIONAL([BUILD_C_API], [false])])
|
||||||
|
])
|
||||||
|
else
|
||||||
|
AM_CONDITIONAL([BUILD_C_API], [false])
|
||||||
|
fi
|
||||||
|
|
||||||
### Check for libmesode, fall back to libstrophe
|
### Check for libmesode, fall back to libstrophe
|
||||||
PKG_CHECK_MODULES([libmesode], [libmesode],
|
PKG_CHECK_MODULES([libmesode], [libmesode],
|
||||||
[LIBS="$libmesode_LIBS $LIBS" CFLAGS="$CFLAGS $libmesode_CFLAGS" AC_DEFINE([HAVE_LIBMESODE], [1], [libmesode])],
|
[LIBS="$libmesode_LIBS $LIBS" CFLAGS="$CFLAGS $libmesode_CFLAGS" AC_DEFINE([HAVE_LIBMESODE], [1], [libmesode])],
|
||||||
@ -208,10 +231,12 @@ AC_CHECK_HEADERS([ncurses.h], [], [])
|
|||||||
AM_CFLAGS="-Wall -Wno-deprecated-declarations"
|
AM_CFLAGS="-Wall -Wno-deprecated-declarations"
|
||||||
AS_IF([test "x$PACKAGE_STATUS" = xdevelopment],
|
AS_IF([test "x$PACKAGE_STATUS" = xdevelopment],
|
||||||
[AM_CFLAGS="$AM_CFLAGS -Wunused -Werror"])
|
[AM_CFLAGS="$AM_CFLAGS -Wunused -Werror"])
|
||||||
|
AM_LDFLAGS="$AM_LDFLAGS -export-dynamic"
|
||||||
AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $curl_CFLAGS $libnotify_CFLAGS"
|
AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $curl_CFLAGS $libnotify_CFLAGS"
|
||||||
AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\""
|
AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\""
|
||||||
LIBS="$glib_LIBS $curl_LIBS $libnotify_LIBS $LIBS"
|
LIBS="$glib_LIBS $curl_LIBS $libnotify_LIBS $LIBS"
|
||||||
|
|
||||||
|
AC_SUBST(AM_LDFLAGS)
|
||||||
AC_SUBST(AM_CFLAGS)
|
AC_SUBST(AM_CFLAGS)
|
||||||
AC_SUBST(AM_CPPFLAGS)
|
AC_SUBST(AM_CPPFLAGS)
|
||||||
|
|
||||||
@ -226,6 +251,7 @@ echo "PLATFORM : $host_os"
|
|||||||
echo "PACKAGE_STATUS : $PACKAGE_STATUS"
|
echo "PACKAGE_STATUS : $PACKAGE_STATUS"
|
||||||
echo "AM_CFLAGS : $AM_CFLAGS"
|
echo "AM_CFLAGS : $AM_CFLAGS"
|
||||||
echo "AM_CPPFLAGS : $AM_CPPFLAGS"
|
echo "AM_CPPFLAGS : $AM_CPPFLAGS"
|
||||||
|
echo "AM_LDFLAGS : $AM_LDFLAGS"
|
||||||
echo "LIBS : $LIBS"
|
echo "LIBS : $LIBS"
|
||||||
echo "XML Parser : $PARSER"
|
echo "XML Parser : $PARSER"
|
||||||
echo "Install themes : $THEMES_INSTALL"
|
echo "Install themes : $THEMES_INSTALL"
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -58,10 +58,11 @@
|
|||||||
#include "xmpp/form.h"
|
#include "xmpp/form.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "muc.h"
|
#include "muc.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#include "plugins/plugins.h"
|
||||||
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
#include "pgp/gpg.h"
|
#include "pgp/gpg.h"
|
||||||
#endif
|
#endif
|
||||||
#include "profanity.h"
|
#include "profanity.h"
|
||||||
@ -126,6 +127,7 @@ GHashTable *commands = NULL;
|
|||||||
#define CMD_TAG_CONNECTION "connection"
|
#define CMD_TAG_CONNECTION "connection"
|
||||||
#define CMD_TAG_DISCOVERY "discovery"
|
#define CMD_TAG_DISCOVERY "discovery"
|
||||||
#define CMD_TAG_UI "ui"
|
#define CMD_TAG_UI "ui"
|
||||||
|
#define CMD_TAG_PLUGINS "plugins"
|
||||||
|
|
||||||
#define CMD_NOTAGS { { NULL },
|
#define CMD_NOTAGS { { NULL },
|
||||||
#define CMD_TAGS(...) { { __VA_ARGS__, NULL },
|
#define CMD_TAGS(...) { { __VA_ARGS__, NULL },
|
||||||
@ -1733,6 +1735,17 @@ static struct cmd_t command_defs[] =
|
|||||||
"/account rename me gtalk")
|
"/account rename me gtalk")
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ "/plugins",
|
||||||
|
cmd_plugins, parse_args, 0, 0, NULL,
|
||||||
|
CMD_NOTAGS
|
||||||
|
CMD_SYN(
|
||||||
|
"/plugins")
|
||||||
|
CMD_DESC(
|
||||||
|
"Show currently installed plugins. ")
|
||||||
|
CMD_NOARGS
|
||||||
|
CMD_NOEXAMPLES
|
||||||
|
},
|
||||||
|
|
||||||
{ "/prefs",
|
{ "/prefs",
|
||||||
cmd_prefs, parse_args, 0, 1, NULL,
|
cmd_prefs, parse_args, 0, 1, NULL,
|
||||||
CMD_NOTAGS
|
CMD_NOTAGS
|
||||||
@ -2053,6 +2066,7 @@ cmd_init(void)
|
|||||||
autocomplete_add(help_commands_ac, "discovery");
|
autocomplete_add(help_commands_ac, "discovery");
|
||||||
autocomplete_add(help_commands_ac, "connection");
|
autocomplete_add(help_commands_ac, "connection");
|
||||||
autocomplete_add(help_commands_ac, "ui");
|
autocomplete_add(help_commands_ac, "ui");
|
||||||
|
autocomplete_add(help_commands_ac, "plugins");
|
||||||
|
|
||||||
prefs_ac = autocomplete_new();
|
prefs_ac = autocomplete_new();
|
||||||
autocomplete_add(prefs_ac, "ui");
|
autocomplete_add(prefs_ac, "ui");
|
||||||
@ -2641,13 +2655,21 @@ cmd_exists(char *cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cmd_autocomplete_add(char *value)
|
cmd_autocomplete_add(const char *const value)
|
||||||
{
|
{
|
||||||
if (commands_ac) {
|
if (commands_ac) {
|
||||||
autocomplete_add(commands_ac, value);
|
autocomplete_add(commands_ac, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cmd_help_autocomplete_add(const char *const value)
|
||||||
|
{
|
||||||
|
if (help_ac) {
|
||||||
|
autocomplete_add(help_ac, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cmd_autocomplete_add_form_fields(DataForm *form)
|
cmd_autocomplete_add_form_fields(DataForm *form)
|
||||||
{
|
{
|
||||||
@ -2687,7 +2709,7 @@ cmd_autocomplete_remove_form_fields(DataForm *form)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cmd_autocomplete_remove(char *value)
|
cmd_autocomplete_remove(const char *const value)
|
||||||
{
|
{
|
||||||
if (commands_ac) {
|
if (commands_ac) {
|
||||||
autocomplete_remove(commands_ac, value);
|
autocomplete_remove(commands_ac, value);
|
||||||
@ -2756,7 +2778,7 @@ cmd_reset_autocomplete(ProfWin *window)
|
|||||||
tlscerts_reset_ac();
|
tlscerts_reset_ac();
|
||||||
prefs_reset_boolean_choice();
|
prefs_reset_boolean_choice();
|
||||||
presence_reset_sub_request_search();
|
presence_reset_sub_request_search();
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
p_gpg_autocomplete_key_reset();
|
p_gpg_autocomplete_key_reset();
|
||||||
#endif
|
#endif
|
||||||
autocomplete_reset(help_ac);
|
autocomplete_reset(help_ac);
|
||||||
@ -2867,6 +2889,7 @@ cmd_reset_autocomplete(ProfWin *window)
|
|||||||
prefs_reset_room_trigger_ac();
|
prefs_reset_room_trigger_ac();
|
||||||
win_reset_search_attempts();
|
win_reset_search_attempts();
|
||||||
win_close_reset_search_attempts();
|
win_close_reset_search_attempts();
|
||||||
|
plugins_reset_autocomplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -2878,7 +2901,8 @@ cmd_valid_tag(const char *const str)
|
|||||||
(g_strcmp0(str, CMD_TAG_ROSTER) == 0) ||
|
(g_strcmp0(str, CMD_TAG_ROSTER) == 0) ||
|
||||||
(g_strcmp0(str, CMD_TAG_DISCOVERY) == 0) ||
|
(g_strcmp0(str, CMD_TAG_DISCOVERY) == 0) ||
|
||||||
(g_strcmp0(str, CMD_TAG_CONNECTION) == 0) ||
|
(g_strcmp0(str, CMD_TAG_CONNECTION) == 0) ||
|
||||||
(g_strcmp0(str, CMD_TAG_UI) == 0));
|
(g_strcmp0(str, CMD_TAG_UI) == 0) ||
|
||||||
|
(g_strcmp0(str, CMD_TAG_PLUGINS) == 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -2968,6 +2992,8 @@ _cmd_execute(ProfWin *window, const char *const command, const char *const inp)
|
|||||||
g_strfreev(args);
|
g_strfreev(args);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
} else if (plugins_run_command(inp)) {
|
||||||
|
return TRUE;
|
||||||
} else {
|
} else {
|
||||||
gboolean ran_alias = FALSE;
|
gboolean ran_alias = FALSE;
|
||||||
gboolean alias_result = cmd_execute_alias(window, inp, &ran_alias);
|
gboolean alias_result = cmd_execute_alias(window, inp, &ran_alias);
|
||||||
@ -3128,6 +3154,11 @@ _cmd_complete_parameters(ProfWin *window, const char *const input)
|
|||||||
}
|
}
|
||||||
g_hash_table_destroy(ac_funcs);
|
g_hash_table_destroy(ac_funcs);
|
||||||
|
|
||||||
|
result = plugins_autocomplete(input);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
if (g_str_has_prefix(input, "/field")) {
|
if (g_str_has_prefix(input, "/field")) {
|
||||||
result = _form_field_autocomplete(window, input);
|
result = _form_field_autocomplete(window, input);
|
||||||
if (result) {
|
if (result) {
|
||||||
@ -3190,7 +3221,7 @@ _who_autocomplete(ProfWin *window, const char *const input)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char*
|
static char*
|
||||||
@ -3647,7 +3678,7 @@ _pgp_autocomplete(ProfWin *window, const char *const input)
|
|||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
gboolean result;
|
gboolean result;
|
||||||
gchar **args = parse_args(input, 2, 3, &result);
|
gchar **args = parse_args(input, 2, 3, &result);
|
||||||
if ((strncmp(input, "/pgp", 4) == 0) && (result == TRUE)) {
|
if ((strncmp(input, "/pgp", 4) == 0) && (result == TRUE)) {
|
||||||
@ -4568,7 +4599,7 @@ _account_autocomplete(ProfWin *window, const char *const input)
|
|||||||
if (found) {
|
if (found) {
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
} else if ((g_strv_length(args) > 3) && (g_strcmp0(args[2], "pgpkeyid")) == 0) {
|
} else if ((g_strv_length(args) > 3) && (g_strcmp0(args[2], "pgpkeyid")) == 0) {
|
||||||
g_string_append(beginning, " ");
|
g_string_append(beginning, " ");
|
||||||
g_string_append(beginning, args[2]);
|
g_string_append(beginning, args[2]);
|
||||||
|
@ -47,8 +47,9 @@ void cmd_uninit(void);
|
|||||||
|
|
||||||
char* cmd_autocomplete(ProfWin *window, const char *const input);
|
char* cmd_autocomplete(ProfWin *window, const char *const input);
|
||||||
void cmd_reset_autocomplete(ProfWin *window);
|
void cmd_reset_autocomplete(ProfWin *window);
|
||||||
void cmd_autocomplete_add(char *value);
|
void cmd_help_autocomplete_add(const char *const value);
|
||||||
void cmd_autocomplete_remove(char *value);
|
void cmd_autocomplete_add(const char *const value);
|
||||||
|
void cmd_autocomplete_remove(const char *const value);
|
||||||
void cmd_autocomplete_add_form_fields(DataForm *form);
|
void cmd_autocomplete_add_form_fields(DataForm *form);
|
||||||
void cmd_autocomplete_remove_form_fields(DataForm *form);
|
void cmd_autocomplete_remove_form_fields(DataForm *form);
|
||||||
void cmd_alias_add(char *value);
|
void cmd_alias_add(char *value);
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -61,13 +61,14 @@
|
|||||||
#include "jid.h"
|
#include "jid.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "muc.h"
|
#include "muc.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
#include "pgp/gpg.h"
|
#include "pgp/gpg.h"
|
||||||
#endif
|
#endif
|
||||||
#include "profanity.h"
|
#include "profanity.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
#include "tools/autocomplete.h"
|
#include "tools/autocomplete.h"
|
||||||
#include "tools/parser.h"
|
#include "tools/parser.h"
|
||||||
#include "tools/tinyurl.h"
|
#include "tools/tinyurl.h"
|
||||||
@ -100,12 +101,19 @@ cmd_execute_default(ProfWin *window, const char *inp)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle non commands in non chat windows
|
// handle non commands in non chat or plugin windows
|
||||||
if (window->type != WIN_CHAT && window->type != WIN_MUC && window->type != WIN_PRIVATE) {
|
if (window->type != WIN_CHAT && window->type != WIN_MUC && window->type != WIN_PRIVATE && window->type != WIN_PLUGIN) {
|
||||||
cons_show("Unknown command: %s", inp);
|
cons_show("Unknown command: %s", inp);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handle plugin window
|
||||||
|
if (window->type == WIN_PLUGIN) {
|
||||||
|
ProfPluginWin *pluginwin = (ProfPluginWin*)window;
|
||||||
|
plugins_win_process_line(pluginwin->tag, inp);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
jabber_conn_status_t status = jabber_get_connection_status();
|
jabber_conn_status_t status = jabber_get_connection_status();
|
||||||
if (status != JABBER_CONNECTED) {
|
if (status != JABBER_CONNECTED) {
|
||||||
ui_current_print_line("You are not currently connected.");
|
ui_current_print_line("You are not currently connected.");
|
||||||
@ -167,7 +175,7 @@ gboolean
|
|||||||
cmd_tls(ProfWin *window, const char *const command, gchar **args)
|
cmd_tls(ProfWin *window, const char *const command, gchar **args)
|
||||||
{
|
{
|
||||||
if (g_strcmp0(args[0], "certpath") == 0) {
|
if (g_strcmp0(args[0], "certpath") == 0) {
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
if (g_strcmp0(args[1], "set") == 0) {
|
if (g_strcmp0(args[1], "set") == 0) {
|
||||||
if (args[2] == NULL) {
|
if (args[2] == NULL) {
|
||||||
cons_bad_cmd_usage(command);
|
cons_bad_cmd_usage(command);
|
||||||
@ -203,7 +211,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
#endif
|
#endif
|
||||||
} else if (g_strcmp0(args[0], "trust") == 0) {
|
} else if (g_strcmp0(args[0], "trust") == 0) {
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
||||||
if (conn_status != JABBER_CONNECTED) {
|
if (conn_status != JABBER_CONNECTED) {
|
||||||
cons_show("You are not currently connected.");
|
cons_show("You are not currently connected.");
|
||||||
@ -232,7 +240,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
#endif
|
#endif
|
||||||
} else if (g_strcmp0(args[0], "trusted") == 0) {
|
} else if (g_strcmp0(args[0], "trusted") == 0) {
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
GList *certs = tlscerts_list();
|
GList *certs = tlscerts_list();
|
||||||
GList *curr = certs;
|
GList *curr = certs;
|
||||||
|
|
||||||
@ -255,7 +263,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
#endif
|
#endif
|
||||||
} else if (g_strcmp0(args[0], "revoke") == 0) {
|
} else if (g_strcmp0(args[0], "revoke") == 0) {
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
if (args[1] == NULL) {
|
if (args[1] == NULL) {
|
||||||
cons_bad_cmd_usage(command);
|
cons_bad_cmd_usage(command);
|
||||||
} else {
|
} else {
|
||||||
@ -274,7 +282,7 @@ cmd_tls(ProfWin *window, const char *const command, gchar **args)
|
|||||||
} else if (g_strcmp0(args[0], "show") == 0) {
|
} else if (g_strcmp0(args[0], "show") == 0) {
|
||||||
return _cmd_set_boolean_preference(args[1], command, "TLS titlebar indicator", PREF_TLS_SHOW);
|
return _cmd_set_boolean_preference(args[1], command, "TLS titlebar indicator", PREF_TLS_SHOW);
|
||||||
} else if (g_strcmp0(args[0], "cert") == 0) {
|
} else if (g_strcmp0(args[0], "cert") == 0) {
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
if (args[1]) {
|
if (args[1]) {
|
||||||
TLSCertificate *cert = tlscerts_get_trusted(args[1]);
|
TLSCertificate *cert = tlscerts_get_trusted(args[1]);
|
||||||
if (!cert) {
|
if (!cert) {
|
||||||
@ -654,7 +662,7 @@ cmd_account(ProfWin *window, const char *const command, gchar **args)
|
|||||||
}
|
}
|
||||||
cons_show("");
|
cons_show("");
|
||||||
} else if (strcmp(property, "pgpkeyid") == 0) {
|
} else if (strcmp(property, "pgpkeyid") == 0) {
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
char *err_str = NULL;
|
char *err_str = NULL;
|
||||||
if (!p_gpg_valid_key(value, &err_str)) {
|
if (!p_gpg_valid_key(value, &err_str)) {
|
||||||
cons_show("Invalid PGP key ID specified: %s, see /pgp keys", err_str);
|
cons_show("Invalid PGP key ID specified: %s, see /pgp keys", err_str);
|
||||||
@ -1285,6 +1293,16 @@ _cmd_help_cmd_list(const char *const tag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GList *ordered_commands = NULL;
|
GList *ordered_commands = NULL;
|
||||||
|
|
||||||
|
if (g_strcmp0(tag, "plugins") == 0) {
|
||||||
|
GList *plugins_cmds = plugins_get_command_names();
|
||||||
|
GList *curr = plugins_cmds;
|
||||||
|
while (curr) {
|
||||||
|
ordered_commands = g_list_insert_sorted(ordered_commands, curr->data, (GCompareFunc)g_strcmp0);
|
||||||
|
curr = g_list_next(curr);
|
||||||
|
}
|
||||||
|
g_list_free(plugins_cmds);
|
||||||
|
} else {
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
gpointer key;
|
gpointer key;
|
||||||
gpointer value;
|
gpointer value;
|
||||||
@ -1301,6 +1319,18 @@ _cmd_help_cmd_list(const char *const tag)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add plugins if showing all commands
|
||||||
|
if (!tag) {
|
||||||
|
GList *plugins_cmds = plugins_get_command_names();
|
||||||
|
GList *curr = plugins_cmds;
|
||||||
|
while (curr) {
|
||||||
|
ordered_commands = g_list_insert_sorted(ordered_commands, curr->data, (GCompareFunc)g_strcmp0);
|
||||||
|
curr = g_list_next(curr);
|
||||||
|
}
|
||||||
|
g_list_free(plugins_cmds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int maxlen = 0;
|
int maxlen = 0;
|
||||||
GList *curr = ordered_commands;
|
GList *curr = ordered_commands;
|
||||||
while (curr) {
|
while (curr) {
|
||||||
@ -1360,10 +1390,15 @@ cmd_help(ProfWin *window, const char *const command, gchar **args)
|
|||||||
|
|
||||||
Command *command = g_hash_table_lookup(commands, cmd_with_slash);
|
Command *command = g_hash_table_lookup(commands, cmd_with_slash);
|
||||||
if (command) {
|
if (command) {
|
||||||
cons_show_help(command);
|
cons_show_help(cmd_with_slash, &command->help);
|
||||||
|
} else {
|
||||||
|
CommandHelp *commandHelp = plugins_get_help(cmd_with_slash);
|
||||||
|
if (commandHelp) {
|
||||||
|
cons_show_help(cmd_with_slash, commandHelp);
|
||||||
} else {
|
} else {
|
||||||
cons_show("No such command.");
|
cons_show("No such command.");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
cons_show("");
|
cons_show("");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1886,7 +1921,7 @@ cmd_msg(ProfWin *window, const char *const command, gchar **args)
|
|||||||
if (msg) {
|
if (msg) {
|
||||||
cl_ev_send_msg(chatwin, msg);
|
cl_ev_send_msg(chatwin, msg);
|
||||||
} else {
|
} else {
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
if (otr_is_secure(barejid)) {
|
if (otr_is_secure(barejid)) {
|
||||||
chatwin_otr_secured(chatwin, otr_is_trusted(barejid));
|
chatwin_otr_secured(chatwin, otr_is_trusted(barejid));
|
||||||
}
|
}
|
||||||
@ -2774,7 +2809,7 @@ cmd_resource(ProfWin *window, const char *const command, gchar **args)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
if (otr_is_secure(chatwin->barejid)) {
|
if (otr_is_secure(chatwin->barejid)) {
|
||||||
cons_show("Cannot choose resource during an OTR session.");
|
cons_show("Cannot choose resource during an OTR session.");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -5602,10 +5637,31 @@ cmd_xa(ProfWin *window, const char *const command, gchar **args)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
cmd_plugins(ProfWin *window, const char *const command, gchar **args)
|
||||||
|
{
|
||||||
|
GSList *plugins = plugins_get_list();
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
if (curr == NULL) {
|
||||||
|
cons_show("No plugins installed.");
|
||||||
|
} else {
|
||||||
|
cons_show("Installed plugins:");
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
char *lang = plugins_get_lang_string(plugin);
|
||||||
|
cons_show(" %s (%s)", plugin->name, lang);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_slist_free(curr);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
cmd_pgp(ProfWin *window, const char *const command, gchar **args)
|
cmd_pgp(ProfWin *window, const char *const command, gchar **args)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
if (args[0] == NULL) {
|
if (args[0] == NULL) {
|
||||||
cons_bad_cmd_usage(command);
|
cons_bad_cmd_usage(command);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -5837,13 +5893,12 @@ cmd_pgp(ProfWin *window, const char *const command, gchar **args)
|
|||||||
cons_show("This version of Profanity has not been built with PGP support enabled");
|
cons_show("This version of Profanity has not been built with PGP support enabled");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
cmd_otr(ProfWin *window, const char *const command, gchar **args)
|
cmd_otr(ProfWin *window, const char *const command, gchar **args)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
if (args[0] == NULL) {
|
if (args[0] == NULL) {
|
||||||
cons_bad_cmd_usage(command);
|
cons_bad_cmd_usage(command);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -153,6 +153,7 @@ gboolean cmd_script(ProfWin *window, const char *const command, gchar **args);
|
|||||||
gboolean cmd_export(ProfWin *window, const char *const command, gchar **args);
|
gboolean cmd_export(ProfWin *window, const char *const command, gchar **args);
|
||||||
gboolean cmd_charset(ProfWin *window, const char *const command, gchar **args);
|
gboolean cmd_charset(ProfWin *window, const char *const command, gchar **args);
|
||||||
gboolean cmd_console(ProfWin *window, const char *const command, gchar **args);
|
gboolean cmd_console(ProfWin *window, const char *const command, gchar **args);
|
||||||
|
gboolean cmd_plugins(ProfWin *window, const char *const command, gchar **args);
|
||||||
|
|
||||||
gboolean cmd_form_field(ProfWin *window, char *tag, gchar **args);
|
gboolean cmd_form_field(ProfWin *window, char *tag, gchar **args);
|
||||||
|
|
||||||
|
14
src/common.c
14
src/common.c
@ -31,7 +31,7 @@
|
|||||||
* source files in the program, then also delete it here.
|
* source files in the program, then also delete it here.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@ -46,6 +46,12 @@
|
|||||||
#include <curl/easy.h>
|
#include <curl/easy.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
|
#include <ncursesw/ncurses.h>
|
||||||
|
#elif PROF_HAVE_NCURSES_H
|
||||||
|
#include <ncurses.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "tools/p_sha1.h"
|
#include "tools/p_sha1.h"
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@ -341,7 +347,7 @@ release_is_new(char *found_version)
|
|||||||
{
|
{
|
||||||
int curr_maj, curr_min, curr_patch, found_maj, found_min, found_patch;
|
int curr_maj, curr_min, curr_patch, found_maj, found_min, found_patch;
|
||||||
|
|
||||||
int parse_curr = sscanf(PACKAGE_VERSION, "%d.%d.%d", &curr_maj, &curr_min,
|
int parse_curr = sscanf(PROF_PACKAGE_VERSION, "%d.%d.%d", &curr_maj, &curr_min,
|
||||||
&curr_patch);
|
&curr_patch);
|
||||||
int parse_found = sscanf(found_version, "%d.%d.%d", &found_maj, &found_min,
|
int parse_found = sscanf(found_version, "%d.%d.%d", &found_maj, &found_min,
|
||||||
&found_patch);
|
&found_patch);
|
||||||
@ -651,10 +657,10 @@ is_notify_enabled(void)
|
|||||||
{
|
{
|
||||||
gboolean notify_enabled = FALSE;
|
gboolean notify_enabled = FALSE;
|
||||||
|
|
||||||
#ifdef HAVE_OSXNOTIFY
|
#ifdef PROF_HAVE_OSXNOTIFY
|
||||||
notify_enabled = TRUE;
|
notify_enabled = TRUE;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBNOTIFY
|
#ifdef PROF_HAVE_LIBNOTIFY
|
||||||
notify_enabled = TRUE;
|
notify_enabled = TRUE;
|
||||||
#endif
|
#endif
|
||||||
#ifdef PLATFORM_CYGWIN
|
#ifdef PLATFORM_CYGWIN
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -591,6 +591,25 @@ prefs_set_autoxa_time(gint value)
|
|||||||
_save_prefs();
|
_save_prefs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gchar**
|
||||||
|
prefs_get_plugins(void)
|
||||||
|
{
|
||||||
|
if (!g_key_file_has_group(prefs, "plugins")) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (!g_key_file_has_key(prefs, "plugins", "load", NULL)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_key_file_get_string_list(prefs, "plugins", "load", NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
prefs_free_plugins(gchar **plugins)
|
||||||
|
{
|
||||||
|
g_strfreev(plugins);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
prefs_set_occupants_size(gint value)
|
prefs_set_occupants_size(gint value)
|
||||||
{
|
{
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#ifndef PREFERENCES_H
|
#ifndef PREFERENCES_H
|
||||||
#define PREFERENCES_H
|
#define PREFERENCES_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
@ -183,6 +183,9 @@ void prefs_set_autoaway_time(gint value);
|
|||||||
gint prefs_get_autoxa_time(void);
|
gint prefs_get_autoxa_time(void);
|
||||||
void prefs_set_autoxa_time(gint value);
|
void prefs_set_autoxa_time(gint value);
|
||||||
|
|
||||||
|
gchar** prefs_get_plugins(void);
|
||||||
|
void prefs_free_plugins(gchar **plugins);
|
||||||
|
|
||||||
char prefs_get_otr_char(void);
|
char prefs_get_otr_char(void);
|
||||||
void prefs_set_otr_char(char ch);
|
void prefs_set_otr_char(char ch);
|
||||||
char prefs_get_pgp_char(void);
|
char prefs_get_pgp_char(void);
|
||||||
|
@ -32,15 +32,15 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#ifndef THEME_H
|
#ifndef THEME_H
|
||||||
#define THEME_H
|
#define THEME_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
@ -43,10 +43,11 @@
|
|||||||
#include "xmpp/xmpp.h"
|
#include "xmpp/xmpp.h"
|
||||||
#include "roster_list.h"
|
#include "roster_list.h"
|
||||||
#include "chat_session.h"
|
#include "chat_session.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#include "plugins/plugins.h"
|
||||||
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
#include "pgp/gpg.h"
|
#include "pgp/gpg.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -80,7 +81,7 @@ cl_ev_disconnect(void)
|
|||||||
muc_invites_clear();
|
muc_invites_clear();
|
||||||
chat_sessions_clear();
|
chat_sessions_clear();
|
||||||
tlscerts_clear_current();
|
tlscerts_clear_current();
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
p_gpg_on_disconnect();
|
p_gpg_on_disconnect();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -90,7 +91,7 @@ cl_ev_presence_send(const resource_presence_t presence_type, const char *const m
|
|||||||
{
|
{
|
||||||
char *signed_status = NULL;
|
char *signed_status = NULL;
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
char *account_name = jabber_get_account_name();
|
char *account_name = jabber_get_account_name();
|
||||||
ProfAccount *account = accounts_get_account(account_name);
|
ProfAccount *account = accounts_get_account(account_name);
|
||||||
if (account->pgp_keyid) {
|
if (account->pgp_keyid) {
|
||||||
@ -108,67 +109,80 @@ void
|
|||||||
cl_ev_send_msg(ProfChatWin *chatwin, const char *const msg)
|
cl_ev_send_msg(ProfChatWin *chatwin, const char *const msg)
|
||||||
{
|
{
|
||||||
chat_state_active(chatwin->state);
|
chat_state_active(chatwin->state);
|
||||||
|
char *plugin_msg = plugins_pre_chat_message_send(chatwin->barejid, msg);
|
||||||
|
|
||||||
// OTR suported, PGP supported
|
// OTR suported, PGP supported
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
if (chatwin->pgp_send) {
|
if (chatwin->pgp_send) {
|
||||||
char *id = message_send_chat_pgp(chatwin->barejid, msg);
|
char *id = message_send_chat_pgp(chatwin->barejid, plugin_msg);
|
||||||
chat_log_pgp_msg_out(chatwin->barejid, msg);
|
chat_log_pgp_msg_out(chatwin->barejid, plugin_msg);
|
||||||
chatwin_outgoing_msg(chatwin, msg, id, PROF_MSG_PGP);
|
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PGP);
|
||||||
free(id);
|
free(id);
|
||||||
} else {
|
} else {
|
||||||
gboolean handled = otr_on_message_send(chatwin, msg);
|
gboolean handled = otr_on_message_send(chatwin, plugin_msg);
|
||||||
if (!handled) {
|
if (!handled) {
|
||||||
char *id = message_send_chat(chatwin->barejid, msg);
|
char *id = message_send_chat(chatwin->barejid, plugin_msg);
|
||||||
chat_log_msg_out(chatwin->barejid, msg);
|
chat_log_msg_out(chatwin->barejid, plugin_msg);
|
||||||
chatwin_outgoing_msg(chatwin, msg, id, PROF_MSG_PLAIN);
|
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN);
|
||||||
free(id);
|
free(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugins_post_chat_message_send(chatwin->barejid, plugin_msg);
|
||||||
|
free(plugin_msg);
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// OTR supported, PGP unsupported
|
// OTR supported, PGP unsupported
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#ifndef HAVE_LIBGPGME
|
#ifndef PROF_HAVE_LIBGPGME
|
||||||
gboolean handled = otr_on_message_send(chatwin, msg);
|
gboolean handled = otr_on_message_send(chatwin, plugin_msg);
|
||||||
if (!handled) {
|
if (!handled) {
|
||||||
char *id = message_send_chat(chatwin->barejid, msg);
|
char *id = message_send_chat(chatwin->barejid, plugin_msg);
|
||||||
chat_log_msg_out(chatwin->barejid, msg);
|
chat_log_msg_out(chatwin->barejid, plugin_msg);
|
||||||
chatwin_outgoing_msg(chatwin, msg, id, PROF_MSG_PLAIN);
|
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN);
|
||||||
free(id);
|
free(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugins_post_chat_message_send(chatwin->barejid, plugin_msg);
|
||||||
|
free(plugin_msg);
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// OTR unsupported, PGP supported
|
// OTR unsupported, PGP supported
|
||||||
#ifndef HAVE_LIBOTR
|
#ifndef PROF_HAVE_LIBOTR
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
if (chatwin->pgp_send) {
|
if (chatwin->pgp_send) {
|
||||||
char *id = message_send_chat_pgp(chatwin->barejid, msg);
|
char *id = message_send_chat_pgp(chatwin->barejid, plugin_msg);
|
||||||
chat_log_pgp_msg_out(chatwin->barejid, msg);
|
chat_log_pgp_msg_out(chatwin->barejid, plugin_msg);
|
||||||
chatwin_outgoing_msg(chatwin, msg, id, PROF_MSG_PGP);
|
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PGP);
|
||||||
free(id);
|
free(id);
|
||||||
} else {
|
} else {
|
||||||
char *id = message_send_chat(chatwin->barejid, msg);
|
char *id = message_send_chat(chatwin->barejid, plugin_msg);
|
||||||
chat_log_msg_out(chatwin->barejid, msg);
|
chat_log_msg_out(chatwin->barejid, plugin_msg);
|
||||||
chatwin_outgoing_msg(chatwin, msg, id, PROF_MSG_PLAIN);
|
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN);
|
||||||
free(id);
|
free(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugins_post_chat_message_send(chatwin->barejid, plugin_msg);
|
||||||
|
free(plugin_msg);
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// OTR unsupported, PGP unsupported
|
// OTR unsupported, PGP unsupported
|
||||||
#ifndef HAVE_LIBOTR
|
#ifndef PROF_HAVE_LIBOTR
|
||||||
#ifndef HAVE_LIBGPGME
|
#ifndef PROF_HAVE_LIBGPGME
|
||||||
char *id = message_send_chat(chatwin->barejid, msg);
|
char *id = message_send_chat(chatwin->barejid, plugin_msg);
|
||||||
chat_log_msg_out(chatwin->barejid, msg);
|
chat_log_msg_out(chatwin->barejid, plugin_msg);
|
||||||
chatwin_outgoing_msg(chatwin, msg, id, PROF_MSG_PLAIN);
|
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN);
|
||||||
free(id);
|
free(id);
|
||||||
|
|
||||||
|
plugins_post_chat_message_send(chatwin->barejid, plugin_msg);
|
||||||
|
free(plugin_msg);
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@ -177,7 +191,12 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char *const msg)
|
|||||||
void
|
void
|
||||||
cl_ev_send_muc_msg(ProfMucWin *mucwin, const char *const msg)
|
cl_ev_send_muc_msg(ProfMucWin *mucwin, const char *const msg)
|
||||||
{
|
{
|
||||||
message_send_groupchat(mucwin->roomjid, msg);
|
char *plugin_msg = plugins_pre_room_message_send(mucwin->roomjid, msg);
|
||||||
|
|
||||||
|
message_send_groupchat(mucwin->roomjid, plugin_msg);
|
||||||
|
|
||||||
|
plugins_post_room_message_send(mucwin->roomjid, plugin_msg);
|
||||||
|
free(plugin_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -188,7 +207,12 @@ cl_ev_send_priv_msg(ProfPrivateWin *privwin, const char *const msg)
|
|||||||
} else if (privwin->room_left) {
|
} else if (privwin->room_left) {
|
||||||
privwin_message_left_room(privwin);
|
privwin_message_left_room(privwin);
|
||||||
} else {
|
} else {
|
||||||
message_send_private(privwin->fulljid, msg);
|
char *plugin_msg = plugins_pre_priv_message_send(privwin->fulljid, msg);
|
||||||
privwin_outgoing_msg(privwin, msg);
|
|
||||||
|
message_send_private(privwin->fulljid, plugin_msg);
|
||||||
|
privwin_outgoing_msg(privwin, plugin_msg);
|
||||||
|
|
||||||
|
plugins_post_priv_message_send(privwin->fulljid, plugin_msg);
|
||||||
|
free(plugin_msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -45,15 +45,16 @@
|
|||||||
#include "config/account.h"
|
#include "config/account.h"
|
||||||
#include "config/scripts.h"
|
#include "config/scripts.h"
|
||||||
#include "roster_list.h"
|
#include "roster_list.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
#include "window_list.h"
|
#include "window_list.h"
|
||||||
#include "config/tlscerts.h"
|
#include "config/tlscerts.h"
|
||||||
#include "profanity.h"
|
#include "profanity.h"
|
||||||
#include "event/client_events.h"
|
#include "event/client_events.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
#include "pgp/gpg.h"
|
#include "pgp/gpg.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -66,11 +67,11 @@ sv_ev_login_account_success(char *account_name, int secured)
|
|||||||
|
|
||||||
roster_create();
|
roster_create();
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
otr_on_connect(account);
|
otr_on_connect(account);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
p_gpg_on_connect(account->jid);
|
p_gpg_on_connect(account->jid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ sv_ev_roster_received(void)
|
|||||||
|
|
||||||
char *account_name = jabber_get_account_name();
|
char *account_name = jabber_get_account_name();
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
// check pgp key valid if specified
|
// check pgp key valid if specified
|
||||||
ProfAccount *account = accounts_get_account(account_name);
|
ProfAccount *account = accounts_get_account(account_name);
|
||||||
if (account && account->pgp_keyid) {
|
if (account && account->pgp_keyid) {
|
||||||
@ -146,6 +147,9 @@ sv_ev_roster_received(void)
|
|||||||
} else {
|
} else {
|
||||||
cl_ev_presence_send(conn_presence, NULL, 0);
|
cl_ev_presence_send(conn_presence, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *fulljid = jabber_get_fulljid();
|
||||||
|
plugins_on_connect(account_name, fulljid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -153,7 +157,7 @@ sv_ev_lost_connection(void)
|
|||||||
{
|
{
|
||||||
cons_show_error("Lost connection.");
|
cons_show_error("Lost connection.");
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
GSList *recipients = wins_get_chat_recipients();
|
GSList *recipients = wins_get_chat_recipients();
|
||||||
GSList *curr = recipients;
|
GSList *curr = recipients;
|
||||||
while (curr) {
|
while (curr) {
|
||||||
@ -174,7 +178,7 @@ sv_ev_lost_connection(void)
|
|||||||
chat_sessions_clear();
|
chat_sessions_clear();
|
||||||
ui_disconnected();
|
ui_disconnected();
|
||||||
roster_destroy();
|
roster_destroy();
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
p_gpg_on_disconnect();
|
p_gpg_on_disconnect();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -244,10 +248,11 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *new_message = plugins_pre_room_message_display(room_jid, nick, message);
|
||||||
char *mynick = muc_nick(mucwin->roomjid);
|
char *mynick = muc_nick(mucwin->roomjid);
|
||||||
|
|
||||||
gboolean mention = FALSE;
|
gboolean mention = FALSE;
|
||||||
char *message_lower = g_utf8_strdown(message, -1);
|
char *message_lower = g_utf8_strdown(new_message, -1);
|
||||||
char *mynick_lower = g_utf8_strdown(mynick, -1);
|
char *mynick_lower = g_utf8_strdown(mynick, -1);
|
||||||
if (g_strrstr(message_lower, mynick_lower)) {
|
if (g_strrstr(message_lower, mynick_lower)) {
|
||||||
mention = TRUE;
|
mention = TRUE;
|
||||||
@ -255,9 +260,9 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha
|
|||||||
g_free(message_lower);
|
g_free(message_lower);
|
||||||
g_free(mynick_lower);
|
g_free(mynick_lower);
|
||||||
|
|
||||||
GList *triggers = prefs_message_get_triggers(message);
|
GList *triggers = prefs_message_get_triggers(new_message);
|
||||||
|
|
||||||
mucwin_message(mucwin, nick, message, mention, triggers);
|
mucwin_message(mucwin, nick, new_message, mention, triggers);
|
||||||
|
|
||||||
ProfWin *window = (ProfWin*)mucwin;
|
ProfWin *window = (ProfWin*)mucwin;
|
||||||
int num = wins_get_num(window);
|
int num = wins_get_num(window);
|
||||||
@ -292,9 +297,9 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prefs_do_room_notify(is_current, mucwin->roomjid, mynick, nick, message, mention, triggers != NULL)) {
|
if (prefs_do_room_notify(is_current, mucwin->roomjid, mynick, nick, new_message, mention, triggers != NULL)) {
|
||||||
Jid *jidp = jid_create(mucwin->roomjid);
|
Jid *jidp = jid_create(mucwin->roomjid);
|
||||||
notify_room_message(nick, jidp->localpart, num, message);
|
notify_room_message(nick, jidp->localpart, num, new_message);
|
||||||
jid_destroy(jidp);
|
jid_destroy(jidp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,29 +308,44 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
rosterwin_roster();
|
rosterwin_roster();
|
||||||
|
|
||||||
|
plugins_post_room_message_display(room_jid, nick, new_message);
|
||||||
|
free(new_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sv_ev_incoming_private_message(const char *const fulljid, char *message)
|
sv_ev_incoming_private_message(const char *const fulljid, char *message)
|
||||||
{
|
{
|
||||||
|
char *plugin_message = plugins_pre_priv_message_display(fulljid, message);
|
||||||
|
|
||||||
ProfPrivateWin *privatewin = wins_get_private(fulljid);
|
ProfPrivateWin *privatewin = wins_get_private(fulljid);
|
||||||
if (privatewin == NULL) {
|
if (privatewin == NULL) {
|
||||||
ProfWin *window = wins_new_private(fulljid);
|
ProfWin *window = wins_new_private(fulljid);
|
||||||
privatewin = (ProfPrivateWin*)window;
|
privatewin = (ProfPrivateWin*)window;
|
||||||
}
|
}
|
||||||
privwin_incoming_msg(privatewin, message, NULL);
|
privwin_incoming_msg(privatewin, plugin_message, NULL);
|
||||||
|
|
||||||
|
plugins_post_priv_message_display(fulljid, plugin_message);
|
||||||
|
|
||||||
|
free(plugin_message);
|
||||||
rosterwin_roster();
|
rosterwin_roster();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sv_ev_delayed_private_message(const char *const fulljid, char *message, GDateTime *timestamp)
|
sv_ev_delayed_private_message(const char *const fulljid, char *message, GDateTime *timestamp)
|
||||||
{
|
{
|
||||||
|
char *new_message = plugins_pre_priv_message_display(fulljid, message);
|
||||||
|
|
||||||
ProfPrivateWin *privatewin = wins_get_private(fulljid);
|
ProfPrivateWin *privatewin = wins_get_private(fulljid);
|
||||||
if (privatewin == NULL) {
|
if (privatewin == NULL) {
|
||||||
ProfWin *window = wins_new_private(fulljid);
|
ProfWin *window = wins_new_private(fulljid);
|
||||||
privatewin = (ProfPrivateWin*)window;
|
privatewin = (ProfPrivateWin*)window;
|
||||||
}
|
}
|
||||||
privwin_incoming_msg(privatewin, message, timestamp);
|
privwin_incoming_msg(privatewin, new_message, timestamp);
|
||||||
|
|
||||||
|
plugins_post_priv_message_display(fulljid, new_message);
|
||||||
|
|
||||||
|
free(new_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -356,7 +376,7 @@ sv_ev_incoming_carbon(char *barejid, char *resource, char *message)
|
|||||||
chat_log_msg_in(barejid, message, NULL);
|
chat_log_msg_in(barejid, message, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
static void
|
static void
|
||||||
_sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message, char *pgp_message, GDateTime *timestamp)
|
_sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message, char *pgp_message, GDateTime *timestamp)
|
||||||
{
|
{
|
||||||
@ -374,7 +394,7 @@ _sv_ev_incoming_pgp(ProfChatWin *chatwin, gboolean new_win, char *barejid, char
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
static void
|
static void
|
||||||
_sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message, GDateTime *timestamp)
|
_sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message, GDateTime *timestamp)
|
||||||
{
|
{
|
||||||
@ -394,7 +414,7 @@ _sv_ev_incoming_otr(ProfChatWin *chatwin, gboolean new_win, char *barejid, char
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_LIBOTR
|
#ifndef PROF_HAVE_LIBOTR
|
||||||
static void
|
static void
|
||||||
_sv_ev_incoming_plain(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message, GDateTime *timestamp)
|
_sv_ev_incoming_plain(ProfChatWin *chatwin, gboolean new_win, char *barejid, char *resource, char *message, GDateTime *timestamp)
|
||||||
{
|
{
|
||||||
@ -416,8 +436,8 @@ sv_ev_incoming_message(char *barejid, char *resource, char *message, char *pgp_m
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OTR suported, PGP supported
|
// OTR suported, PGP supported
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
if (pgp_message) {
|
if (pgp_message) {
|
||||||
if (chatwin->is_otr) {
|
if (chatwin->is_otr) {
|
||||||
win_println((ProfWin*)chatwin, 0, "PGP encrypted message received whilst in OTR session.");
|
win_println((ProfWin*)chatwin, 0, "PGP encrypted message received whilst in OTR session.");
|
||||||
@ -433,8 +453,8 @@ sv_ev_incoming_message(char *barejid, char *resource, char *message, char *pgp_m
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// OTR supported, PGP unsupported
|
// OTR supported, PGP unsupported
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#ifndef HAVE_LIBGPGME
|
#ifndef PROF_HAVE_LIBGPGME
|
||||||
_sv_ev_incoming_otr(chatwin, new_win, barejid, resource, message, timestamp);
|
_sv_ev_incoming_otr(chatwin, new_win, barejid, resource, message, timestamp);
|
||||||
rosterwin_roster();
|
rosterwin_roster();
|
||||||
return;
|
return;
|
||||||
@ -442,8 +462,8 @@ sv_ev_incoming_message(char *barejid, char *resource, char *message, char *pgp_m
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// OTR unsupported, PGP supported
|
// OTR unsupported, PGP supported
|
||||||
#ifndef HAVE_LIBOTR
|
#ifndef PROF_HAVE_LIBOTR
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
if (pgp_message) {
|
if (pgp_message) {
|
||||||
_sv_ev_incoming_pgp(chatwin, new_win, barejid, resource, message, pgp_message, timestamp);
|
_sv_ev_incoming_pgp(chatwin, new_win, barejid, resource, message, pgp_message, timestamp);
|
||||||
} else {
|
} else {
|
||||||
@ -455,8 +475,8 @@ sv_ev_incoming_message(char *barejid, char *resource, char *message, char *pgp_m
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// OTR unsupported, PGP unsupported
|
// OTR unsupported, PGP unsupported
|
||||||
#ifndef HAVE_LIBOTR
|
#ifndef PROF_HAVE_LIBOTR
|
||||||
#ifndef HAVE_LIBGPGME
|
#ifndef PROF_HAVE_LIBGPGME
|
||||||
_sv_ev_incoming_plain(chatwin, new_win, barejid, resource, message, timestamp);
|
_sv_ev_incoming_plain(chatwin, new_win, barejid, resource, message, timestamp);
|
||||||
rosterwin_roster();
|
rosterwin_roster();
|
||||||
return;
|
return;
|
||||||
@ -568,7 +588,7 @@ sv_ev_contact_offline(char *barejid, char *resource, char *status)
|
|||||||
ui_contact_offline(barejid, resource, status);
|
ui_contact_offline(barejid, resource, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
ProfChatWin *chatwin = wins_get_chat(barejid);
|
ProfChatWin *chatwin = wins_get_chat(barejid);
|
||||||
if (chatwin && otr_is_secure(barejid)) {
|
if (chatwin && otr_is_secure(barejid)) {
|
||||||
chatwin_otr_unsecured(chatwin);
|
chatwin_otr_unsecured(chatwin);
|
||||||
@ -589,7 +609,7 @@ sv_ev_contact_online(char *barejid, Resource *resource, GDateTime *last_activity
|
|||||||
ui_contact_online(barejid, resource, last_activity);
|
ui_contact_online(barejid, resource, last_activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
if (pgpsig) {
|
if (pgpsig) {
|
||||||
p_gpg_verify(barejid, pgpsig);
|
p_gpg_verify(barejid, pgpsig);
|
||||||
}
|
}
|
||||||
|
32
src/main.c
32
src/main.c
@ -32,12 +32,12 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
#include "gitversion.h"
|
#include "gitversion.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ static char *account_name = NULL;
|
|||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (argc == 2 && g_strcmp0(argv[1], "docgen") == 0 && g_strcmp0(PACKAGE_STATUS, "development") == 0) {
|
if (argc == 2 && g_strcmp0(argv[1], "docgen") == 0 && g_strcmp0(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
command_docgen();
|
command_docgen();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -80,17 +80,17 @@ main(int argc, char **argv)
|
|||||||
g_option_context_free(context);
|
g_option_context_free(context);
|
||||||
|
|
||||||
if (version == TRUE) {
|
if (version == TRUE) {
|
||||||
if (strcmp(PACKAGE_STATUS, "development") == 0) {
|
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
g_print("Profanity, version %sdev.%s.%s\n", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
g_print("Profanity, version %sdev.%s.%s\n", PROF_PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
||||||
#else
|
#else
|
||||||
g_print("Profanity, version %sdev\n", PACKAGE_VERSION);
|
g_print("Profanity, version %sdev\n", PROF_PACKAGE_VERSION);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
g_print("Profanity, version %s\n", PACKAGE_VERSION);
|
g_print("Profanity, version %s\n", PROF_PACKAGE_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_print("Copyright (C) 2012 - 2016 James Booth <%s>.\n", PACKAGE_BUGREPORT);
|
g_print("Copyright (C) 2012 - 2016 James Booth <%s>.\n", PROF_PACKAGE_BUGREPORT);
|
||||||
g_print("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n");
|
g_print("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n");
|
||||||
g_print("\n");
|
g_print("\n");
|
||||||
g_print("This is free software; you are free to change and redistribute it.\n");
|
g_print("This is free software; you are free to change and redistribute it.\n");
|
||||||
@ -99,10 +99,10 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
g_print("Build information:\n");
|
g_print("Build information:\n");
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
g_print("XMPP library: libmesode\n");
|
g_print("XMPP library: libmesode\n");
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
g_print("XMPP library: libstrophe\n");
|
g_print("XMPP library: libstrophe\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -112,18 +112,24 @@ main(int argc, char **argv)
|
|||||||
g_print("Desktop notification support: Disabled\n");
|
g_print("Desktop notification support: Disabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
g_print("OTR support: Enabled\n");
|
g_print("OTR support: Enabled\n");
|
||||||
#else
|
#else
|
||||||
g_print("OTR support: Disabled\n");
|
g_print("OTR support: Disabled\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
g_print("PGP support: Enabled\n");
|
g_print("PGP support: Enabled\n");
|
||||||
#else
|
#else
|
||||||
g_print("PGP support: Disabled\n");
|
g_print("PGP support: Disabled\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PROF_HAVE_C
|
||||||
|
g_print("C plugins: Enabled\n");
|
||||||
|
#else
|
||||||
|
g_print("C plugins: Disabled\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
311
src/plugins/api.c
Normal file
311
src/plugins/api.c
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
/*
|
||||||
|
* api.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include "plugins/callbacks.h"
|
||||||
|
#include "plugins/autocompleters.h"
|
||||||
|
#include "plugins/themes.h"
|
||||||
|
#include "profanity.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
#include "config/theme.h"
|
||||||
|
#include "command/command.h"
|
||||||
|
#include "window_list.h"
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
api_cons_alert(void)
|
||||||
|
{
|
||||||
|
cons_alert();
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
api_cons_show(const char * const message)
|
||||||
|
{
|
||||||
|
if (message == NULL) {
|
||||||
|
log_warning("%s", "prof_cons_show failed, message is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *parsed = str_replace(message, "\r\n", "\n");
|
||||||
|
cons_show("%s", parsed);
|
||||||
|
free(parsed);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
api_cons_show_themed(const char *const group, const char *const key, const char *const def, const char *const message)
|
||||||
|
{
|
||||||
|
if (message == NULL) {
|
||||||
|
log_warning("%s", "prof_cons_show_themed failed, message is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *parsed = str_replace(message, "\r\n", "\n");
|
||||||
|
theme_item_t themeitem = plugin_themes_get(group, key, def);
|
||||||
|
ProfWin *console = wins_get_console();
|
||||||
|
win_print(console, '-', 0, NULL, 0, themeitem, "", parsed);
|
||||||
|
|
||||||
|
free(parsed);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
api_cons_bad_cmd_usage(const char *const cmd)
|
||||||
|
{
|
||||||
|
if (cmd == NULL) {
|
||||||
|
log_warning("%s", "prof_cons_bad_cmd_usage failed, cmd is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cons_bad_cmd_usage(cmd);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_register_command(const char *command_name, int min_args, int max_args,
|
||||||
|
const char **synopsis, const char *description, const char *arguments[][2], const char **examples, void *callback,
|
||||||
|
void(*callback_func)(PluginCommand *command, gchar **args))
|
||||||
|
{
|
||||||
|
PluginCommand *command = malloc(sizeof(PluginCommand));
|
||||||
|
command->command_name = command_name;
|
||||||
|
command->min_args = min_args;
|
||||||
|
command->max_args = max_args;
|
||||||
|
command->callback = callback;
|
||||||
|
command->callback_func = callback_func;
|
||||||
|
|
||||||
|
CommandHelp *help = malloc(sizeof(CommandHelp));
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (i = 0; synopsis[i] != NULL; i++) {
|
||||||
|
help->synopsis[i] = strdup(synopsis[i]);
|
||||||
|
}
|
||||||
|
help->synopsis[i] = NULL;
|
||||||
|
|
||||||
|
help->desc = strdup(description);
|
||||||
|
for (i = 0; arguments[i][0] != NULL; i++) {
|
||||||
|
help->args[i][0] = strdup(arguments[i][0]);
|
||||||
|
help->args[i][1] = strdup(arguments[i][1]);
|
||||||
|
}
|
||||||
|
help->args[i][0] = NULL;
|
||||||
|
help->args[i][1] = NULL;
|
||||||
|
|
||||||
|
for (i = 0; examples[i] != NULL; i++) {
|
||||||
|
help->examples[i] = strdup(examples[i]);
|
||||||
|
}
|
||||||
|
help->examples[i] = NULL;
|
||||||
|
|
||||||
|
command->help = help;
|
||||||
|
|
||||||
|
callbacks_add_command(command);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_register_timed(void *callback, int interval_seconds,
|
||||||
|
void (*callback_func)(PluginTimedFunction *timed_function))
|
||||||
|
{
|
||||||
|
PluginTimedFunction *timed_function = malloc(sizeof(PluginTimedFunction));
|
||||||
|
timed_function->callback = callback;
|
||||||
|
timed_function->callback_func = callback_func;
|
||||||
|
timed_function->interval_seconds = interval_seconds;
|
||||||
|
timed_function->timer = g_timer_new();
|
||||||
|
|
||||||
|
callbacks_add_timed(timed_function);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_register_ac(const char *key, char **items)
|
||||||
|
{
|
||||||
|
autocompleters_add(key, items);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_notify(const char *message, const char *category, int timeout_ms)
|
||||||
|
{
|
||||||
|
notify(message, timeout_ms, category);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_send_line(char *line)
|
||||||
|
{
|
||||||
|
ProfWin *current = wins_get_current();
|
||||||
|
cmd_process_input(current, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
api_get_current_recipient(void)
|
||||||
|
{
|
||||||
|
ProfWin *current = wins_get_current();
|
||||||
|
if (current->type == WIN_CHAT) {
|
||||||
|
ProfChatWin *chatwin = (ProfChatWin*)current;
|
||||||
|
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
|
||||||
|
return chatwin->barejid;
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
api_get_current_muc(void)
|
||||||
|
{
|
||||||
|
ProfWin *current = wins_get_current();
|
||||||
|
if (current->type == WIN_MUC) {
|
||||||
|
ProfMucWin *mucwin = (ProfMucWin*)current;
|
||||||
|
assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
|
||||||
|
return mucwin->roomjid;
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_log_debug(const char *message)
|
||||||
|
{
|
||||||
|
log_debug("%s", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_log_info(const char *message)
|
||||||
|
{
|
||||||
|
log_info("%s", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_log_warning(const char *message)
|
||||||
|
{
|
||||||
|
log_warning("%s", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_log_error(const char *message)
|
||||||
|
{
|
||||||
|
log_error("%s", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
api_win_exists(const char *tag)
|
||||||
|
{
|
||||||
|
return (wins_get_plugin(tag) != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
api_win_create(const char *tag, void *callback,
|
||||||
|
void(*callback_func)(PluginWindowCallback *window_callback, const char *tag, const char * const line))
|
||||||
|
{
|
||||||
|
PluginWindowCallback *window = malloc(sizeof(PluginWindowCallback));
|
||||||
|
window->callback = callback;
|
||||||
|
window->callback_func = callback_func;
|
||||||
|
callbacks_add_window_handler(tag, window);
|
||||||
|
wins_new_plugin(tag);
|
||||||
|
|
||||||
|
// set status bar active
|
||||||
|
ProfPluginWin *pluginwin = wins_get_plugin(tag);
|
||||||
|
int num = wins_get_num((ProfWin*)pluginwin);
|
||||||
|
status_bar_active(num);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
api_win_focus(const char *tag)
|
||||||
|
{
|
||||||
|
if (tag == NULL) {
|
||||||
|
log_warning("%s", "prof_win_focus failed, tag is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfPluginWin *pluginwin = wins_get_plugin(tag);
|
||||||
|
if (pluginwin == NULL) {
|
||||||
|
log_warning("prof_win_focus failed, no window with tag: %s", tag);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui_focus_win((ProfWin*)pluginwin);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
api_win_show(const char *tag, const char *line)
|
||||||
|
{
|
||||||
|
if (tag == NULL) {
|
||||||
|
log_warning("%s", "prof_win_show failed, tag is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (line == NULL) {
|
||||||
|
log_warning("%s", "prof_win_show failed, line is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfPluginWin *pluginwin = wins_get_plugin(tag);
|
||||||
|
if (pluginwin == NULL) {
|
||||||
|
log_warning("prof_win_show failed, no window with tag: %s", tag);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfWin *window = (ProfWin*)pluginwin;
|
||||||
|
win_print(window, '!', 0, NULL, 0, 0, "", line);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
api_win_show_themed(const char *tag, const char *const group, const char *const key, const char *const def, const char *line)
|
||||||
|
{
|
||||||
|
if (tag == NULL) {
|
||||||
|
log_warning("%s", "prof_win_show_themed failed, tag is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (line == NULL) {
|
||||||
|
log_warning("%s", "prof_win_show_themed failed, line is NULL");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfPluginWin *pluginwin = wins_get_plugin(tag);
|
||||||
|
if (pluginwin == NULL) {
|
||||||
|
log_warning("prof_win_show_themed failed, no window with tag: %s", tag);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
theme_item_t themeitem = plugin_themes_get(group, key, def);
|
||||||
|
ProfWin *window = (ProfWin*)pluginwin;
|
||||||
|
win_print(window, '!', 0, NULL, 0, themeitem, "", line);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
69
src/plugins/api.h
Normal file
69
src/plugins/api.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* api.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef API_H
|
||||||
|
#define API_H
|
||||||
|
|
||||||
|
#include "plugins/callbacks.h"
|
||||||
|
|
||||||
|
void api_cons_alert(void);
|
||||||
|
int api_cons_show(const char * const message);
|
||||||
|
int api_cons_show_themed(const char *const group, const char *const item, const char *const def, const char *const message);
|
||||||
|
int api_cons_bad_cmd_usage(const char *const cmd);
|
||||||
|
void api_notify(const char *message, const char *category, int timeout_ms);
|
||||||
|
void api_send_line(char *line);
|
||||||
|
char * api_get_current_recipient(void);
|
||||||
|
char * api_get_current_muc(void);
|
||||||
|
|
||||||
|
void api_register_command(const char *command_name, int min_args, int max_args,
|
||||||
|
const char **synopsis, const char *description, const char *arguments[][2], const char **examples,
|
||||||
|
void *callback, void(*callback_func)(PluginCommand *command, gchar **args));
|
||||||
|
void api_register_timed(void *callback, int interval_seconds,
|
||||||
|
void (*callback_func)(PluginTimedFunction *timed_function));
|
||||||
|
void api_register_ac(const char *key, char **items);
|
||||||
|
|
||||||
|
void api_log_debug(const char *message);
|
||||||
|
void api_log_info(const char *message);
|
||||||
|
void api_log_warning(const char *message);
|
||||||
|
void api_log_error(const char *message);
|
||||||
|
|
||||||
|
int api_win_exists(const char *tag);
|
||||||
|
void api_win_create(const char *tag, void *callback,
|
||||||
|
void(*callback_func)(PluginWindowCallback *window_callback, char *tag, char *line));
|
||||||
|
int api_win_focus(const char *tag);
|
||||||
|
int api_win_show(const char *tag, const char *line);
|
||||||
|
int api_win_show_themed(const char *tag, const char *const group, const char *const key, const char *const def, const char *line);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
92
src/plugins/autocompleters.c
Normal file
92
src/plugins/autocompleters.c
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* autocompleters.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "tools/autocomplete.h"
|
||||||
|
|
||||||
|
static GHashTable *autocompleters;
|
||||||
|
|
||||||
|
void
|
||||||
|
autocompleters_init(void)
|
||||||
|
{
|
||||||
|
autocompleters = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)autocomplete_free);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
autocompleters_add(const char *key, char **items)
|
||||||
|
{
|
||||||
|
Autocomplete new_ac = autocomplete_new();
|
||||||
|
int i = 0;
|
||||||
|
for (i = 0; i < g_strv_length(items); i++) {
|
||||||
|
autocomplete_add(new_ac, items[i]);
|
||||||
|
}
|
||||||
|
g_hash_table_insert(autocompleters, strdup(key), new_ac);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
autocompleters_complete(const char * const input)
|
||||||
|
{
|
||||||
|
char *result = NULL;
|
||||||
|
|
||||||
|
GList *keys = g_hash_table_get_keys(autocompleters);
|
||||||
|
GList *curr = keys;
|
||||||
|
while (curr) {
|
||||||
|
result = autocomplete_param_with_ac(input, curr->data, g_hash_table_lookup(autocompleters, curr->data), TRUE);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
curr = g_list_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
autocompleters_reset(void)
|
||||||
|
{
|
||||||
|
GList *acs = g_hash_table_get_values(autocompleters);
|
||||||
|
GList *curr = acs;
|
||||||
|
while (curr) {
|
||||||
|
autocomplete_reset(curr->data);
|
||||||
|
curr = g_list_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void autocompleters_destroy(void)
|
||||||
|
{
|
||||||
|
g_hash_table_destroy(autocompleters);
|
||||||
|
}
|
46
src/plugins/autocompleters.h
Normal file
46
src/plugins/autocompleters.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* autocompleters.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AUTOCOMPLETERS_H
|
||||||
|
#define AUTOCOMPLETERS_H
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
void autocompleters_init(void);
|
||||||
|
void autocompleters_add(const char *key, char **items);
|
||||||
|
char* autocompleters_complete(const char * const input);
|
||||||
|
void autocompleters_reset(void);
|
||||||
|
void autocompleters_destroy(void);
|
||||||
|
|
||||||
|
#endif
|
232
src/plugins/c_api.c
Normal file
232
src/plugins/c_api.c
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
/*
|
||||||
|
* c_api.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include "plugins/api.h"
|
||||||
|
#include "plugins/c_api.h"
|
||||||
|
#include "plugins/callbacks.h"
|
||||||
|
#include "plugins/profapi.h"
|
||||||
|
|
||||||
|
typedef struct command_wrapper_t {
|
||||||
|
void(*func)(char **args);
|
||||||
|
} CommandWrapper;
|
||||||
|
|
||||||
|
typedef struct timed_wrapper_t {
|
||||||
|
void(*func)(void);
|
||||||
|
} TimedWrapper;
|
||||||
|
|
||||||
|
typedef struct window_wrapper_t {
|
||||||
|
void(*func)(char *tag, char *line);
|
||||||
|
} WindowWrapper;
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_cons_alert(void)
|
||||||
|
{
|
||||||
|
api_cons_alert();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
c_api_cons_show(const char * const message)
|
||||||
|
{
|
||||||
|
return api_cons_show(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
c_api_cons_show_themed(const char *const group, const char *const item, const char *const def, const char *const message)
|
||||||
|
{
|
||||||
|
return api_cons_show_themed(group, item, def, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
c_api_cons_bad_cmd_usage(const char *const cmd)
|
||||||
|
{
|
||||||
|
return api_cons_bad_cmd_usage(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_register_command(const char *command_name, int min_args, int max_args,
|
||||||
|
const char **synopsis, const char *description, const char *arguments[][2], const char **examples,
|
||||||
|
void(*callback)(char **args))
|
||||||
|
{
|
||||||
|
CommandWrapper *wrapper = malloc(sizeof(CommandWrapper));
|
||||||
|
wrapper->func = callback;
|
||||||
|
api_register_command(command_name, min_args, max_args, synopsis,
|
||||||
|
description, arguments, examples, wrapper, c_command_callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_register_timed(void(*callback)(void), int interval_seconds)
|
||||||
|
{
|
||||||
|
TimedWrapper *wrapper = malloc(sizeof(TimedWrapper));
|
||||||
|
wrapper->func = callback;
|
||||||
|
api_register_timed(wrapper, interval_seconds, c_timed_callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_register_ac(const char *key, char **items)
|
||||||
|
{
|
||||||
|
api_register_ac(key, items);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_notify(const char *message, int timeout_ms, const char *category)
|
||||||
|
{
|
||||||
|
api_notify(message, category, timeout_ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_send_line(char *line)
|
||||||
|
{
|
||||||
|
api_send_line(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
c_api_get_current_recipient(void)
|
||||||
|
{
|
||||||
|
return api_get_current_recipient();
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
c_api_get_current_muc(void)
|
||||||
|
{
|
||||||
|
return api_get_current_muc();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_log_debug(const char *message)
|
||||||
|
{
|
||||||
|
api_log_debug(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_log_info(const char *message)
|
||||||
|
{
|
||||||
|
api_log_info(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_log_warning(const char *message)
|
||||||
|
{
|
||||||
|
api_log_warning(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_log_error(const char *message)
|
||||||
|
{
|
||||||
|
api_log_error(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
c_api_win_exists(char *tag)
|
||||||
|
{
|
||||||
|
return api_win_exists(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
c_api_win_create(char *tag, void(*callback)(char *tag, char *line))
|
||||||
|
{
|
||||||
|
WindowWrapper *wrapper = malloc(sizeof(WindowWrapper));
|
||||||
|
wrapper->func = callback;
|
||||||
|
api_win_create(tag, wrapper, c_window_callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
c_api_win_focus(char *tag)
|
||||||
|
{
|
||||||
|
return api_win_focus(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
c_api_win_show(char *tag, char *line)
|
||||||
|
{
|
||||||
|
return api_win_show(tag, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
c_api_win_show_themed(char *tag, char *group, char *key, char *def, char *line)
|
||||||
|
{
|
||||||
|
return api_win_show_themed(tag, group, key, def, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_command_callback(PluginCommand *command, gchar **args)
|
||||||
|
{
|
||||||
|
CommandWrapper *wrapper = command->callback;
|
||||||
|
void(*f)(gchar **args) = wrapper->func;
|
||||||
|
f(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_timed_callback(PluginTimedFunction *timed_function)
|
||||||
|
{
|
||||||
|
TimedWrapper *wrapper = timed_function->callback;
|
||||||
|
void(*f)(void) = wrapper->func;
|
||||||
|
f();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_window_callback(PluginWindowCallback *window_callback, char *tag, char *line)
|
||||||
|
{
|
||||||
|
WindowWrapper *wrapper = window_callback->callback;
|
||||||
|
void(*f)(char *tag, char *line) = wrapper->func;
|
||||||
|
f(tag, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_api_init(void)
|
||||||
|
{
|
||||||
|
prof_cons_alert = c_api_cons_alert;
|
||||||
|
prof_cons_show = c_api_cons_show;
|
||||||
|
prof_cons_show_themed = c_api_cons_show_themed;
|
||||||
|
prof_cons_bad_cmd_usage = c_api_cons_bad_cmd_usage;
|
||||||
|
prof_register_command = c_api_register_command;
|
||||||
|
prof_register_timed = c_api_register_timed;
|
||||||
|
prof_register_ac = c_api_register_ac;
|
||||||
|
prof_notify = c_api_notify;
|
||||||
|
prof_send_line = c_api_send_line;
|
||||||
|
prof_get_current_recipient = c_api_get_current_recipient;
|
||||||
|
prof_get_current_muc = c_api_get_current_muc;
|
||||||
|
prof_log_debug = c_api_log_debug;
|
||||||
|
prof_log_info = c_api_log_info;
|
||||||
|
prof_log_warning = c_api_log_warning;
|
||||||
|
prof_log_error = c_api_log_error;
|
||||||
|
prof_win_exists = c_api_win_exists;
|
||||||
|
prof_win_create = c_api_win_create;
|
||||||
|
prof_win_focus = c_api_win_focus;
|
||||||
|
prof_win_show = c_api_win_show;
|
||||||
|
prof_win_show_themed = c_api_win_show_themed;
|
||||||
|
}
|
41
src/plugins/c_api.h
Normal file
41
src/plugins/c_api.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* c_api.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
void c_api_init(void);
|
||||||
|
|
||||||
|
void c_command_callback(PluginCommand *command, gchar **args);
|
||||||
|
void c_timed_callback(PluginTimedFunction *timed_function);
|
||||||
|
void c_window_callback(PluginWindowCallback *window_callback, char *tag, char *line);
|
367
src/plugins/c_plugins.c
Normal file
367
src/plugins/c_plugins.c
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
/*
|
||||||
|
* c_plugins.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "config/preferences.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "plugins/api.h"
|
||||||
|
#include "plugins/callbacks.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
|
#include "plugins/c_plugins.h"
|
||||||
|
#include "plugins/c_api.h"
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
c_env_init(void)
|
||||||
|
{
|
||||||
|
c_api_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfPlugin *
|
||||||
|
c_plugin_create(const char * const filename)
|
||||||
|
{
|
||||||
|
ProfPlugin *plugin;
|
||||||
|
void *handle = NULL;
|
||||||
|
|
||||||
|
gchar *plugins_dir = plugins_get_dir();
|
||||||
|
GString *path = g_string_new(plugins_dir);
|
||||||
|
g_free(plugins_dir);
|
||||||
|
g_string_append(path, "/");
|
||||||
|
g_string_append(path, filename);
|
||||||
|
|
||||||
|
handle = dlopen (path->str, RTLD_NOW | RTLD_GLOBAL);
|
||||||
|
|
||||||
|
if (!handle) {
|
||||||
|
log_warning("dlopen failed to open `%s', %s", filename, dlerror ());
|
||||||
|
g_string_free(path, TRUE);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
gchar *module_name = g_strndup(filename, strlen(filename) - 3);
|
||||||
|
|
||||||
|
plugin = malloc(sizeof(ProfPlugin));
|
||||||
|
plugin->name = strdup(module_name);
|
||||||
|
plugin->lang = LANG_C;
|
||||||
|
plugin->module = handle;
|
||||||
|
plugin->init_func = c_init_hook;
|
||||||
|
plugin->on_start_func = c_on_start_hook;
|
||||||
|
plugin->on_shutdown_func = c_on_shutdown_hook;
|
||||||
|
plugin->on_connect_func = c_on_connect_hook;
|
||||||
|
plugin->on_disconnect_func = c_on_disconnect_hook;
|
||||||
|
plugin->pre_chat_message_display = c_pre_chat_message_display_hook;
|
||||||
|
plugin->post_chat_message_display = c_post_chat_message_display_hook;
|
||||||
|
plugin->pre_chat_message_send = c_pre_chat_message_send_hook;
|
||||||
|
plugin->post_chat_message_send = c_post_chat_message_send_hook;
|
||||||
|
plugin->pre_room_message_display = c_pre_room_message_display_hook;
|
||||||
|
plugin->post_room_message_display = c_post_room_message_display_hook;
|
||||||
|
plugin->pre_room_message_send = c_pre_room_message_send_hook;
|
||||||
|
plugin->post_room_message_send = c_post_room_message_send_hook;
|
||||||
|
plugin->pre_priv_message_display = c_pre_priv_message_display_hook;
|
||||||
|
plugin->post_priv_message_display = c_post_priv_message_display_hook;
|
||||||
|
plugin->pre_priv_message_send = c_pre_priv_message_send_hook;
|
||||||
|
plugin->post_priv_message_send = c_post_priv_message_send_hook;
|
||||||
|
|
||||||
|
g_string_free(path, TRUE);
|
||||||
|
g_free(module_name);
|
||||||
|
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_init_hook(ProfPlugin *plugin, const char * const version, const char * const status)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __version, const char * const __status);
|
||||||
|
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_init"))) {
|
||||||
|
log_warning ("warning: %s does not have init function", plugin->name);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char * const))f;
|
||||||
|
|
||||||
|
// FIXME maybe we want to make it boolean to see if it succeeded or not?
|
||||||
|
func (version, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_on_start_hook(ProfPlugin *plugin)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(void);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_on_start")))
|
||||||
|
return ;
|
||||||
|
|
||||||
|
func = (void (*)(void)) f;
|
||||||
|
func ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_on_shutdown_hook(ProfPlugin *plugin)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(void);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_on_shutdown")))
|
||||||
|
return ;
|
||||||
|
|
||||||
|
func = (void (*)(void)) f;
|
||||||
|
func ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_on_connect_hook(ProfPlugin *plugin, const char * const account_name, const char * const fulljid)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __account_name, const char * const __fulljid);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_on_connect")))
|
||||||
|
return ;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char * const)) f;
|
||||||
|
func (account_name, fulljid);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_on_disconnect_hook(ProfPlugin *plugin, const char * const account_name, const char * const fulljid)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __account_name, const char * const __fulljid);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_on_disconnect")))
|
||||||
|
return ;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char * const)) f;
|
||||||
|
func (account_name, fulljid);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
c_pre_chat_message_display_hook(ProfPlugin *plugin, const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
char* (*func)(const char * const __jid, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_pre_chat_message_display")))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
func = (char* (*)(const char * const, const char *)) f;
|
||||||
|
return func (jid, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_post_chat_message_display_hook(ProfPlugin *plugin, const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __jid, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_post_chat_message_display")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char *)) f;
|
||||||
|
func (jid, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
c_pre_chat_message_send_hook(ProfPlugin *plugin, const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
char* (*func)(const char * const __jid, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_pre_chat_message_send")))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
func = (char* (*)(const char * const, const char *)) f;
|
||||||
|
return func (jid, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_post_chat_message_send_hook(ProfPlugin *plugin, const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __jid, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_post_chat_message_send")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char *)) f;
|
||||||
|
func (jid, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
c_pre_room_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
char* (*func)(const char * const __room, const char * const __nick, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_pre_room_message_display")))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
func = (char* (*)(const char * const, const char * const, const char *)) f;
|
||||||
|
return func (room, nick, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_post_room_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __room, const char * const __nick, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_post_room_message_display")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char * const, const char *)) f;
|
||||||
|
func (room, nick, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
c_pre_room_message_send_hook(ProfPlugin *plugin, const char * const room, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
char* (*func)(const char * const __room, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_pre_room_message_send")))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
func = (char* (*)(const char * const, const char *)) f;
|
||||||
|
return func (room, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_post_room_message_send_hook(ProfPlugin *plugin, const char * const room, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __room, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_post_room_message_send")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char *)) f;
|
||||||
|
func (room, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
c_pre_priv_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
char* (*func)(const char * const __room, const char * const __nick, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_pre_priv_message_display")))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
func = (char* (*)(const char * const, const char * const, const char *)) f;
|
||||||
|
return func (room, nick, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_post_priv_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __room, const char * const __nick, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_post_priv_message_display")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char * const, const char *)) f;
|
||||||
|
func (room, nick, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
c_pre_priv_message_send_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
char* (*func)(const char * const __room, const char * const __nick, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_pre_priv_message_send")))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
func = (char* (*)(const char * const, const char * const, const char *)) f;
|
||||||
|
return func (room, nick, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_post_priv_message_send_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
void * f = NULL;
|
||||||
|
void (*func)(const char * const __room, const char * const __nick, const char * __message);
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (NULL == (f = dlsym (plugin->module, "prof_post_priv_message_send")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
func = (void (*)(const char * const, const char * const, const char *)) f;
|
||||||
|
func (room, nick, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_plugin_destroy(ProfPlugin *plugin)
|
||||||
|
{
|
||||||
|
assert (plugin && plugin->module);
|
||||||
|
|
||||||
|
if (dlclose (plugin->module)) {
|
||||||
|
log_warning ("dlclose failed to close `%s' with `%s'", plugin->name, dlerror ());
|
||||||
|
}
|
||||||
|
|
||||||
|
free(plugin->name);
|
||||||
|
free(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
c_shutdown(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
67
src/plugins/c_plugins.h
Normal file
67
src/plugins/c_plugins.h
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* c_plugins.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef C_PLUGINS_H
|
||||||
|
#define C_PLUGINS_H
|
||||||
|
|
||||||
|
#include "plugins/plugins.h"
|
||||||
|
|
||||||
|
void c_env_init(void);
|
||||||
|
|
||||||
|
ProfPlugin* c_plugin_create(const char * const filename);
|
||||||
|
void c_plugin_destroy(ProfPlugin * plugin);
|
||||||
|
void c_shutdown(void);
|
||||||
|
|
||||||
|
void c_init_hook(ProfPlugin *plugin, const char * const version, const char * const status);
|
||||||
|
void c_on_start_hook(ProfPlugin *plugin);
|
||||||
|
void c_on_shutdown_hook(ProfPlugin *plugin);
|
||||||
|
void c_on_connect_hook(ProfPlugin *plugin, const char * const account_name, const char * const fulljid);
|
||||||
|
void c_on_disconnect_hook(ProfPlugin *plugin, const char * const account_name, const char * const fulljid);
|
||||||
|
|
||||||
|
char* c_pre_chat_message_display_hook(ProfPlugin *plugin, const char * const jid, const char *message);
|
||||||
|
void c_post_chat_message_display_hook(ProfPlugin *plugin, const char * const jid, const char *message);
|
||||||
|
char* c_pre_chat_message_send_hook(ProfPlugin *plugin, const char * const jid, const char *message);
|
||||||
|
void c_post_chat_message_send_hook(ProfPlugin *plugin, const char * const jid, const char *message);
|
||||||
|
|
||||||
|
char* c_pre_room_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
void c_post_room_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
char* c_pre_room_message_send_hook(ProfPlugin *plugin, const char * const room, const char *message);
|
||||||
|
void c_post_room_message_send_hook(ProfPlugin *plugin, const char * const room, const char *message);
|
||||||
|
|
||||||
|
char* c_pre_priv_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
void c_post_priv_message_display_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
char* c_pre_priv_message_send_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char * const message);
|
||||||
|
void c_post_priv_message_send_hook(ProfPlugin *plugin, const char * const room, const char * const nick, const char * const message);
|
||||||
|
|
||||||
|
#endif
|
160
src/plugins/callbacks.c
Normal file
160
src/plugins/callbacks.c
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
* callbacks.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "command/command.h"
|
||||||
|
#include "plugins/callbacks.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
|
#include "tools/autocomplete.h"
|
||||||
|
#include "tools/parser.h"
|
||||||
|
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
static GSList *p_commands = NULL;
|
||||||
|
static GSList *p_timed_functions = NULL;
|
||||||
|
static GHashTable *p_window_callbacks = NULL;
|
||||||
|
|
||||||
|
void
|
||||||
|
callbacks_add_command(PluginCommand *command)
|
||||||
|
{
|
||||||
|
p_commands = g_slist_append(p_commands, command);
|
||||||
|
cmd_autocomplete_add(command->command_name);
|
||||||
|
cmd_help_autocomplete_add(&command->command_name[1]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
callbacks_add_timed(PluginTimedFunction *timed_function)
|
||||||
|
{
|
||||||
|
p_timed_functions = g_slist_append(p_timed_functions, timed_function);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
callbacks_add_window_handler(const char *tag, PluginWindowCallback *window_callback)
|
||||||
|
{
|
||||||
|
if (p_window_callbacks == NULL) {
|
||||||
|
p_window_callbacks = g_hash_table_new(g_str_hash, g_str_equal);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_hash_table_insert(p_window_callbacks, strdup(tag), window_callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
callbacks_get_window_handler(const char *tag)
|
||||||
|
{
|
||||||
|
if (p_window_callbacks) {
|
||||||
|
return g_hash_table_lookup(p_window_callbacks, tag);
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
plugins_run_command(const char * const input)
|
||||||
|
{
|
||||||
|
gchar **split = g_strsplit(input, " ", -1);
|
||||||
|
|
||||||
|
GSList *p_command = p_commands;
|
||||||
|
while (p_command) {
|
||||||
|
PluginCommand *command = p_command->data;
|
||||||
|
if (g_strcmp0(split[0], command->command_name) == 0) {
|
||||||
|
gboolean result;
|
||||||
|
gchar **args = parse_args(input, command->min_args, command->max_args, &result);
|
||||||
|
if (result == FALSE) {
|
||||||
|
ui_invalid_command_usage(command->command_name, NULL);
|
||||||
|
g_strfreev(split);
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
command->callback_func(command, args);
|
||||||
|
g_strfreev(split);
|
||||||
|
g_strfreev(args);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p_command = g_slist_next(p_command);
|
||||||
|
}
|
||||||
|
g_strfreev(split);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CommandHelp*
|
||||||
|
plugins_get_help(const char *const cmd)
|
||||||
|
{
|
||||||
|
GSList *curr = p_commands;
|
||||||
|
while (curr) {
|
||||||
|
PluginCommand *command = curr->data;
|
||||||
|
if (g_strcmp0(cmd, command->command_name) == 0) {
|
||||||
|
return command->help;
|
||||||
|
}
|
||||||
|
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_run_timed(void)
|
||||||
|
{
|
||||||
|
GSList *p_timed_function = p_timed_functions;
|
||||||
|
|
||||||
|
while (p_timed_function) {
|
||||||
|
PluginTimedFunction *timed_function = p_timed_function->data;
|
||||||
|
gdouble elapsed = g_timer_elapsed(timed_function->timer, NULL);
|
||||||
|
|
||||||
|
if (timed_function->interval_seconds > 0 && elapsed >= timed_function->interval_seconds) {
|
||||||
|
timed_function->callback_func(timed_function);
|
||||||
|
g_timer_start(timed_function->timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
p_timed_function = g_slist_next(p_timed_function);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GList*
|
||||||
|
plugins_get_command_names(void)
|
||||||
|
{
|
||||||
|
GList *result = NULL;
|
||||||
|
|
||||||
|
GSList *curr = p_commands;
|
||||||
|
while (curr) {
|
||||||
|
PluginCommand *command = curr->data;
|
||||||
|
result = g_list_append(result, (char*)command->command_name);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
68
src/plugins/callbacks.h
Normal file
68
src/plugins/callbacks.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* callbacks.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CALLBACKS_H
|
||||||
|
#define CALLBACKS_H
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "command/command.h"
|
||||||
|
|
||||||
|
typedef struct p_command {
|
||||||
|
const char *command_name;
|
||||||
|
int min_args;
|
||||||
|
int max_args;
|
||||||
|
CommandHelp *help;
|
||||||
|
void *callback;
|
||||||
|
void (*callback_func)(struct p_command *command, gchar **args);
|
||||||
|
} PluginCommand;
|
||||||
|
|
||||||
|
typedef struct p_timed_function {
|
||||||
|
void *callback;
|
||||||
|
void (*callback_func)(struct p_timed_function *timed_function);
|
||||||
|
int interval_seconds;
|
||||||
|
GTimer *timer;
|
||||||
|
} PluginTimedFunction;
|
||||||
|
|
||||||
|
typedef struct p_window_input_callback {
|
||||||
|
void *callback;
|
||||||
|
void (*callback_func)(struct p_window_input_callback *window_callback, const char *tag, const char * const line);
|
||||||
|
} PluginWindowCallback;
|
||||||
|
|
||||||
|
void callbacks_add_command(PluginCommand *command);
|
||||||
|
void callbacks_add_timed(PluginTimedFunction *timed_function);
|
||||||
|
void callbacks_add_window_handler(const char *tag, PluginWindowCallback *window_callback);
|
||||||
|
void * callbacks_get_window_handler(const char *tag);
|
||||||
|
|
||||||
|
#endif
|
420
src/plugins/plugins.c
Normal file
420
src/plugins/plugins.c
Normal file
@ -0,0 +1,420 @@
|
|||||||
|
/*
|
||||||
|
* plugins.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "config/preferences.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "plugins/callbacks.h"
|
||||||
|
#include "plugins/autocompleters.h"
|
||||||
|
#include "plugins/themes.h"
|
||||||
|
#include "plugins/api.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
|
|
||||||
|
#ifdef PROF_HAVE_C
|
||||||
|
#include "plugins/c_plugins.h"
|
||||||
|
#include "plugins/c_api.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#include "ui/ui.h"
|
||||||
|
|
||||||
|
static GSList* plugins;
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_init(void)
|
||||||
|
{
|
||||||
|
plugins = NULL;
|
||||||
|
autocompleters_init();
|
||||||
|
plugin_themes_init();
|
||||||
|
|
||||||
|
#ifdef PROF_HAVE_C
|
||||||
|
c_env_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// load plugins
|
||||||
|
gchar **plugins_load = prefs_get_plugins();
|
||||||
|
if (plugins_load) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < g_strv_length(plugins_load); i++)
|
||||||
|
{
|
||||||
|
gboolean loaded = FALSE;
|
||||||
|
gchar *filename = plugins_load[i];
|
||||||
|
#ifdef PROF_HAVE_C
|
||||||
|
if (g_str_has_suffix(filename, ".so")) {
|
||||||
|
ProfPlugin *plugin = c_plugin_create(filename);
|
||||||
|
if (plugin) {
|
||||||
|
plugins = g_slist_append(plugins, plugin);
|
||||||
|
loaded = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (loaded == TRUE) {
|
||||||
|
log_info("Loaded plugin: %s", filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialise plugins
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->init_func(plugin, PROF_PACKAGE_VERSION, PROF_PACKAGE_STATUS);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prefs_free_plugins(plugins_load);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GSList *
|
||||||
|
plugins_get_list(void)
|
||||||
|
{
|
||||||
|
return plugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
plugins_get_lang_string(ProfPlugin *plugin)
|
||||||
|
{
|
||||||
|
switch (plugin->lang)
|
||||||
|
{
|
||||||
|
case LANG_C:
|
||||||
|
return "C";
|
||||||
|
default:
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
plugins_autocomplete(const char * const input)
|
||||||
|
{
|
||||||
|
return autocompleters_complete(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_reset_autocomplete(void)
|
||||||
|
{
|
||||||
|
autocompleters_reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_win_process_line(char *win, const char * const line)
|
||||||
|
{
|
||||||
|
PluginWindowCallback *window = callbacks_get_window_handler(win);
|
||||||
|
window->callback_func(window, win, line);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_on_start(void)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->on_start_func(plugin);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_on_shutdown(void)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->on_shutdown_func(plugin);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_on_connect(const char * const account_name, const char * const fulljid)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->on_connect_func(plugin, account_name, fulljid);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_on_disconnect(const char * const account_name, const char * const fulljid)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->on_disconnect_func(plugin, account_name, fulljid);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
plugins_pre_chat_message_display(const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
char *new_message = NULL;
|
||||||
|
char *curr_message = strdup(message);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
new_message = plugin->pre_chat_message_display(plugin, jid, curr_message);
|
||||||
|
if (new_message) {
|
||||||
|
free(curr_message);
|
||||||
|
curr_message = strdup(new_message);
|
||||||
|
free(new_message);
|
||||||
|
}
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return curr_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_post_chat_message_display(const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->post_chat_message_display(plugin, jid, message);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
plugins_pre_chat_message_send(const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
char *new_message = NULL;
|
||||||
|
char *curr_message = strdup(message);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
new_message = plugin->pre_chat_message_send(plugin, jid, curr_message);
|
||||||
|
if (new_message) {
|
||||||
|
free(curr_message);
|
||||||
|
curr_message = strdup(new_message);
|
||||||
|
free(new_message);
|
||||||
|
}
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return curr_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_post_chat_message_send(const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->post_chat_message_send(plugin, jid, message);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
plugins_pre_room_message_display(const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
char *new_message = NULL;
|
||||||
|
char *curr_message = strdup(message);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
new_message = plugin->pre_room_message_display(plugin, room, nick, curr_message);
|
||||||
|
if (new_message) {
|
||||||
|
free(curr_message);
|
||||||
|
curr_message = strdup(new_message);
|
||||||
|
free(new_message);
|
||||||
|
}
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return curr_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_post_room_message_display(const char * const room, const char * const nick, const char *message)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->post_room_message_display(plugin, room, nick, message);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
plugins_pre_room_message_send(const char * const room, const char *message)
|
||||||
|
{
|
||||||
|
char *new_message = NULL;
|
||||||
|
char *curr_message = strdup(message);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
new_message = plugin->pre_room_message_send(plugin, room, curr_message);
|
||||||
|
if (new_message) {
|
||||||
|
free(curr_message);
|
||||||
|
curr_message = strdup(new_message);
|
||||||
|
free(new_message);
|
||||||
|
}
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return curr_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_post_room_message_send(const char * const room, const char *message)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->post_room_message_send(plugin, room, message);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
plugins_pre_priv_message_display(const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
Jid *jidp = jid_create(jid);
|
||||||
|
char *new_message = NULL;
|
||||||
|
char *curr_message = strdup(message);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
new_message = plugin->pre_priv_message_display(plugin, jidp->barejid, jidp->resourcepart, curr_message);
|
||||||
|
if (new_message) {
|
||||||
|
free(curr_message);
|
||||||
|
curr_message = strdup(new_message);
|
||||||
|
free(new_message);
|
||||||
|
}
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
jid_destroy(jidp);
|
||||||
|
return curr_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_post_priv_message_display(const char * const jid, const char *message)
|
||||||
|
{
|
||||||
|
Jid *jidp = jid_create(jid);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->post_priv_message_display(plugin, jidp->barejid, jidp->resourcepart, message);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
jid_destroy(jidp);
|
||||||
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
plugins_pre_priv_message_send(const char * const jid, const char * const message)
|
||||||
|
{
|
||||||
|
Jid *jidp = jid_create(jid);
|
||||||
|
char *new_message = NULL;
|
||||||
|
char *curr_message = strdup(message);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
new_message = plugin->pre_priv_message_send(plugin, jidp->barejid, jidp->resourcepart, curr_message);
|
||||||
|
if (new_message) {
|
||||||
|
free(curr_message);
|
||||||
|
curr_message = strdup(new_message);
|
||||||
|
free(new_message);
|
||||||
|
}
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
jid_destroy(jidp);
|
||||||
|
return curr_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_post_priv_message_send(const char * const jid, const char * const message)
|
||||||
|
{
|
||||||
|
Jid *jidp = jid_create(jid);
|
||||||
|
|
||||||
|
GSList *curr = plugins;
|
||||||
|
while (curr) {
|
||||||
|
ProfPlugin *plugin = curr->data;
|
||||||
|
plugin->post_priv_message_send(plugin, jidp->barejid, jidp->resourcepart, message);
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
jid_destroy(jidp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugins_shutdown(void)
|
||||||
|
{
|
||||||
|
GSList *curr = plugins;
|
||||||
|
|
||||||
|
while (curr) {
|
||||||
|
#ifdef PROF_HAVE_C
|
||||||
|
if (((ProfPlugin *)curr->data)->lang == LANG_C) {
|
||||||
|
c_plugin_destroy(curr->data);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
curr = g_slist_next(curr);
|
||||||
|
}
|
||||||
|
#ifdef PROF_HAVE_C
|
||||||
|
c_shutdown();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
autocompleters_destroy();
|
||||||
|
plugin_themes_close();
|
||||||
|
}
|
||||||
|
|
||||||
|
gchar *
|
||||||
|
plugins_get_dir(void)
|
||||||
|
{
|
||||||
|
gchar *xdg_data = xdg_get_data_home();
|
||||||
|
GString *plugins_dir = g_string_new(xdg_data);
|
||||||
|
g_string_append(plugins_dir, "/profanity/plugins");
|
||||||
|
gchar *result = strdup(plugins_dir->str);
|
||||||
|
g_free(xdg_data);
|
||||||
|
g_string_free(plugins_dir, TRUE);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
109
src/plugins/plugins.h
Normal file
109
src/plugins/plugins.h
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
* plugins.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PLUGINS_H
|
||||||
|
#define PLUGINS_H
|
||||||
|
|
||||||
|
#include "command/command.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
LANG_C
|
||||||
|
} lang_t;
|
||||||
|
|
||||||
|
typedef struct prof_plugin_t {
|
||||||
|
char *name;
|
||||||
|
lang_t lang;
|
||||||
|
void *module;
|
||||||
|
void (*init_func)(struct prof_plugin_t* plugin, const char * const version,
|
||||||
|
const char * const status);
|
||||||
|
|
||||||
|
void (*on_start_func)(struct prof_plugin_t* plugin);
|
||||||
|
void (*on_shutdown_func)(struct prof_plugin_t* plugin);
|
||||||
|
|
||||||
|
void (*on_connect_func)(struct prof_plugin_t* plugin, const char * const account_name, const char * const fulljid);
|
||||||
|
void (*on_disconnect_func)(struct prof_plugin_t* plugin, const char * const account_name, const char * const fulljid);
|
||||||
|
|
||||||
|
char* (*pre_chat_message_display)(struct prof_plugin_t* plugin, const char * const jid, const char *message);
|
||||||
|
void (*post_chat_message_display)(struct prof_plugin_t* plugin, const char * const jid, const char *message);
|
||||||
|
char* (*pre_chat_message_send)(struct prof_plugin_t* plugin, const char * const jid, const char *message);
|
||||||
|
void (*post_chat_message_send)(struct prof_plugin_t* plugin, const char * const jid, const char *message);
|
||||||
|
|
||||||
|
char* (*pre_room_message_display)(struct prof_plugin_t* plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
void (*post_room_message_display)(struct prof_plugin_t* plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
char* (*pre_room_message_send)(struct prof_plugin_t* plugin, const char * const room, const char *message);
|
||||||
|
void (*post_room_message_send)(struct prof_plugin_t* plugin, const char * const room, const char *message);
|
||||||
|
|
||||||
|
char* (*pre_priv_message_display)(struct prof_plugin_t* plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
void (*post_priv_message_display)(struct prof_plugin_t* plugin, const char * const room, const char * const nick, const char *message);
|
||||||
|
char* (*pre_priv_message_send)(struct prof_plugin_t* plugin, const char * const room, const char * const nick, const char * const message);
|
||||||
|
void (*post_priv_message_send)(struct prof_plugin_t* plugin, const char * const room, const char * const nick, const char * const message);
|
||||||
|
|
||||||
|
} ProfPlugin;
|
||||||
|
|
||||||
|
void plugins_init(void);
|
||||||
|
GSList* plugins_get_list(void);
|
||||||
|
char* plugins_get_lang_string(ProfPlugin *plugin);
|
||||||
|
char* plugins_autocomplete(const char * const input);
|
||||||
|
void plugins_reset_autocomplete(void);
|
||||||
|
void plugins_shutdown(void);
|
||||||
|
|
||||||
|
void plugins_on_start(void);
|
||||||
|
void plugins_on_shutdown(void);
|
||||||
|
|
||||||
|
void plugins_on_connect(const char * const account_name, const char * const fulljid);
|
||||||
|
void plugins_on_disconnect(const char * const account_name, const char * const fulljid);
|
||||||
|
|
||||||
|
char* plugins_pre_chat_message_display(const char * const jid, const char *message);
|
||||||
|
void plugins_post_chat_message_display(const char * const jid, const char *message);
|
||||||
|
char* plugins_pre_chat_message_send(const char * const jid, const char *message);
|
||||||
|
void plugins_post_chat_message_send(const char * const jid, const char *message);
|
||||||
|
|
||||||
|
char* plugins_pre_room_message_display(const char * const room, const char * const nick, const char *message);
|
||||||
|
void plugins_post_room_message_display(const char * const room, const char * const nick, const char *message);
|
||||||
|
char* plugins_pre_room_message_send(const char * const room, const char *message);
|
||||||
|
void plugins_post_room_message_send(const char * const room, const char *message);
|
||||||
|
|
||||||
|
char* plugins_pre_priv_message_display(const char * const jid, const char *message);
|
||||||
|
void plugins_post_priv_message_display(const char * const jid, const char *message);
|
||||||
|
char* plugins_pre_priv_message_send(const char * const jid, const char * const message);
|
||||||
|
void plugins_post_priv_message_send(const char * const jid, const char * const message);
|
||||||
|
|
||||||
|
gboolean plugins_run_command(const char * const cmd);
|
||||||
|
void plugins_run_timed(void);
|
||||||
|
GList* plugins_get_command_names(void);
|
||||||
|
gchar * plugins_get_dir(void);
|
||||||
|
CommandHelp* plugins_get_help(const char *const cmd);
|
||||||
|
|
||||||
|
void plugins_win_process_line(char *win, const char * const line);
|
||||||
|
#endif
|
70
src/plugins/profapi.c
Normal file
70
src/plugins/profapi.c
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* prof_api.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "plugins/profapi.h"
|
||||||
|
#include "plugins/callbacks.h"
|
||||||
|
|
||||||
|
void (*prof_cons_alert)(void) = NULL;
|
||||||
|
int (*prof_cons_show)(const char * const message) = NULL;
|
||||||
|
int (*prof_cons_show_themed)(const char *const group, const char *const item, const char *const def, const char *const message) = NULL;
|
||||||
|
int (*prof_cons_bad_cmd_usage)(const char *const cmd) = NULL;
|
||||||
|
|
||||||
|
void (*prof_register_command)(const char *command_name, int min_args, int max_args,
|
||||||
|
const char **synopsis, const char *description, const char *arguments[][2], const char **examples,
|
||||||
|
void(*callback)(char **args)) = NULL;
|
||||||
|
|
||||||
|
void (*prof_register_timed)(void(*callback)(void), int interval_seconds) = NULL;
|
||||||
|
|
||||||
|
void (*prof_register_ac)(const char *key, char **items) = NULL;
|
||||||
|
|
||||||
|
void (*prof_notify)(const char *message, int timeout_ms, const char *category) = NULL;
|
||||||
|
|
||||||
|
void (*prof_send_line)(char *line) = NULL;
|
||||||
|
|
||||||
|
char* (*prof_get_current_recipient)(void) = NULL;
|
||||||
|
char* (*prof_get_current_muc)(void) = NULL;
|
||||||
|
|
||||||
|
void (*prof_log_debug)(const char *message) = NULL;
|
||||||
|
void (*prof_log_info)(const char *message) = NULL;
|
||||||
|
void (*prof_log_warning)(const char *message) = NULL;
|
||||||
|
void (*prof_log_error)(const char *message) = NULL;
|
||||||
|
|
||||||
|
int (*prof_win_exists)(PROF_WIN_TAG win) = NULL;
|
||||||
|
void (*prof_win_create)(PROF_WIN_TAG win, void(*input_handler)(PROF_WIN_TAG win, char *line)) = NULL;
|
||||||
|
int (*prof_win_focus)(PROF_WIN_TAG win) = NULL;
|
||||||
|
int (*prof_win_show)(PROF_WIN_TAG win, char *line) = NULL;
|
||||||
|
int (*prof_win_show_themed)(PROF_WIN_TAG tag, char *group, char *key, char *def, char *line) = NULL;
|
||||||
|
|
72
src/plugins/profapi.h
Normal file
72
src/plugins/profapi.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* prof_api.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PROF_API_H
|
||||||
|
#define PROF_API_H
|
||||||
|
|
||||||
|
typedef char* PROF_WIN_TAG;
|
||||||
|
|
||||||
|
void (*prof_cons_alert)(void);
|
||||||
|
int (*prof_cons_show)(const char * const message);
|
||||||
|
int (*prof_cons_show_themed)(const char *const group, const char *const item, const char *const def, const char *const message);
|
||||||
|
int (*prof_cons_bad_cmd_usage)(const char *const cmd);
|
||||||
|
|
||||||
|
void (*prof_register_command)(const char *command_name, int min_args, int max_args,
|
||||||
|
const char **synopsis, const char *description, const char *arguments[][2], const char **examples,
|
||||||
|
void(*callback)(char **args));
|
||||||
|
|
||||||
|
void (*prof_register_timed)(void(*callback)(void), int interval_seconds);
|
||||||
|
|
||||||
|
void (*prof_register_ac)(const char *key, char **items);
|
||||||
|
|
||||||
|
void (*prof_notify)(const char *message, int timeout_ms, const char *category);
|
||||||
|
|
||||||
|
void (*prof_send_line)(char *line);
|
||||||
|
|
||||||
|
char* (*prof_get_current_recipient)(void);
|
||||||
|
char* (*prof_get_current_muc)(void);
|
||||||
|
|
||||||
|
void (*prof_log_debug)(const char *message);
|
||||||
|
void (*prof_log_info)(const char *message);
|
||||||
|
void (*prof_log_warning)(const char *message);
|
||||||
|
void (*prof_log_error)(const char *message);
|
||||||
|
|
||||||
|
int (*prof_win_exists)(PROF_WIN_TAG win);
|
||||||
|
void (*prof_win_create)(PROF_WIN_TAG win, void(*input_handler)(PROF_WIN_TAG win, char *line));
|
||||||
|
int (*prof_win_focus)(PROF_WIN_TAG win);
|
||||||
|
int (*prof_win_show)(PROF_WIN_TAG win, char *line);
|
||||||
|
int (*prof_win_show_themed)(PROF_WIN_TAG tag, char *group, char *key, char *def, char *line);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
142
src/plugins/themes.c
Normal file
142
src/plugins/themes.c
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
/*
|
||||||
|
* themes.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <glib/gstdio.h>
|
||||||
|
|
||||||
|
#include "config/theme.h"
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
static GKeyFile *themes;
|
||||||
|
|
||||||
|
void
|
||||||
|
plugin_themes_init(void)
|
||||||
|
{
|
||||||
|
gchar *xdg_data = xdg_get_data_home();
|
||||||
|
GString *fileloc = g_string_new(xdg_data);
|
||||||
|
g_string_append(fileloc, "/profanity/plugin_themes");
|
||||||
|
g_free(xdg_data);
|
||||||
|
|
||||||
|
if (g_file_test(fileloc->str, G_FILE_TEST_EXISTS)) {
|
||||||
|
g_chmod(fileloc->str, S_IRUSR | S_IWUSR);
|
||||||
|
}
|
||||||
|
|
||||||
|
themes = g_key_file_new();
|
||||||
|
g_key_file_load_from_file(themes, fileloc->str, G_KEY_FILE_KEEP_COMMENTS, NULL);
|
||||||
|
|
||||||
|
gsize g_data_size;
|
||||||
|
gchar *g_data = g_key_file_to_data(themes, &g_data_size, NULL);
|
||||||
|
g_file_set_contents(fileloc->str, g_data, g_data_size, NULL);
|
||||||
|
g_chmod(fileloc->str, S_IRUSR | S_IWUSR);
|
||||||
|
g_free(g_data);
|
||||||
|
g_string_free(fileloc, TRUE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
plugin_themes_close(void)
|
||||||
|
{
|
||||||
|
g_key_file_free(themes);
|
||||||
|
themes = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
theme_item_t
|
||||||
|
plugin_themes_get(const char *const group, const char *const key, const char *const def)
|
||||||
|
{
|
||||||
|
if (g_key_file_has_key(themes, group, key, NULL)) {
|
||||||
|
gchar *result = g_key_file_get_string(themes, group, key, NULL);
|
||||||
|
|
||||||
|
theme_item_t ret;
|
||||||
|
|
||||||
|
if (g_strcmp0(result, "white") == 0) ret = THEME_WHITE;
|
||||||
|
else if (g_strcmp0(result, "bold_white") == 0) ret = THEME_WHITE_BOLD;
|
||||||
|
else if (g_strcmp0(result, "red") == 0) ret = THEME_RED;
|
||||||
|
else if (g_strcmp0(result, "bold_red") == 0) ret = THEME_RED_BOLD;
|
||||||
|
else if (g_strcmp0(result, "green") == 0) ret = THEME_GREEN;
|
||||||
|
else if (g_strcmp0(result, "bold_green") == 0) ret = THEME_GREEN_BOLD;
|
||||||
|
else if (g_strcmp0(result, "blue") == 0) ret = THEME_BLUE;
|
||||||
|
else if (g_strcmp0(result, "bold_blue") == 0) ret = THEME_BLUE_BOLD;
|
||||||
|
else if (g_strcmp0(result, "yellow") == 0) ret = THEME_YELLOW;
|
||||||
|
else if (g_strcmp0(result, "bold_yellow") == 0) ret = THEME_YELLOW_BOLD;
|
||||||
|
else if (g_strcmp0(result, "cyan") == 0) ret = THEME_CYAN;
|
||||||
|
else if (g_strcmp0(result, "bold_cyan") == 0) ret = THEME_CYAN_BOLD;
|
||||||
|
else if (g_strcmp0(result, "magenta") == 0) ret = THEME_MAGENTA;
|
||||||
|
else if (g_strcmp0(result, "bold_magenta") == 0) ret = THEME_MAGENTA_BOLD;
|
||||||
|
else if (g_strcmp0(result, "black") == 0) ret = THEME_BLACK;
|
||||||
|
else if (g_strcmp0(result, "bold_black") == 0) ret = THEME_BLACK_BOLD;
|
||||||
|
|
||||||
|
else if (g_strcmp0(def, "white") == 0) ret = THEME_WHITE;
|
||||||
|
else if (g_strcmp0(def, "bold_white") == 0) ret = THEME_WHITE_BOLD;
|
||||||
|
else if (g_strcmp0(def, "red") == 0) ret = THEME_RED;
|
||||||
|
else if (g_strcmp0(def, "bold_red") == 0) ret = THEME_RED_BOLD;
|
||||||
|
else if (g_strcmp0(def, "green") == 0) ret = THEME_GREEN;
|
||||||
|
else if (g_strcmp0(def, "bold_green") == 0) ret = THEME_GREEN_BOLD;
|
||||||
|
else if (g_strcmp0(def, "blue") == 0) ret = THEME_BLUE;
|
||||||
|
else if (g_strcmp0(def, "bold_blue") == 0) ret = THEME_BLUE_BOLD;
|
||||||
|
else if (g_strcmp0(def, "yellow") == 0) ret = THEME_YELLOW;
|
||||||
|
else if (g_strcmp0(def, "bold_yellow") == 0) ret = THEME_YELLOW_BOLD;
|
||||||
|
else if (g_strcmp0(def, "cyan") == 0) ret = THEME_CYAN;
|
||||||
|
else if (g_strcmp0(def, "bold_cyan") == 0) ret = THEME_CYAN_BOLD;
|
||||||
|
else if (g_strcmp0(def, "magenta") == 0) ret = THEME_MAGENTA;
|
||||||
|
else if (g_strcmp0(def, "bold_magenta") == 0) ret = THEME_MAGENTA_BOLD;
|
||||||
|
else if (g_strcmp0(def, "black") == 0) ret = THEME_BLACK;
|
||||||
|
else if (g_strcmp0(def, "bold_black") == 0) ret = THEME_BLACK_BOLD;
|
||||||
|
|
||||||
|
else ret = THEME_TEXT;
|
||||||
|
|
||||||
|
g_free(result);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (g_strcmp0(def, "white") == 0) return THEME_WHITE;
|
||||||
|
else if (g_strcmp0(def, "bold_white") == 0) return THEME_WHITE_BOLD;
|
||||||
|
else if (g_strcmp0(def, "red") == 0) return THEME_RED;
|
||||||
|
else if (g_strcmp0(def, "bold_red") == 0) return THEME_RED_BOLD;
|
||||||
|
else if (g_strcmp0(def, "green") == 0) return THEME_GREEN;
|
||||||
|
else if (g_strcmp0(def, "bold_green") == 0) return THEME_GREEN_BOLD;
|
||||||
|
else if (g_strcmp0(def, "blue") == 0) return THEME_BLUE;
|
||||||
|
else if (g_strcmp0(def, "bold_blue") == 0) return THEME_BLUE_BOLD;
|
||||||
|
else if (g_strcmp0(def, "yellow") == 0) return THEME_YELLOW;
|
||||||
|
else if (g_strcmp0(def, "bold_yellow") == 0) return THEME_YELLOW_BOLD;
|
||||||
|
else if (g_strcmp0(def, "cyan") == 0) return THEME_CYAN;
|
||||||
|
else if (g_strcmp0(def, "bold_cyan") == 0) return THEME_CYAN_BOLD;
|
||||||
|
else if (g_strcmp0(def, "magenta") == 0) return THEME_MAGENTA;
|
||||||
|
else if (g_strcmp0(def, "bold_magenta") == 0) return THEME_MAGENTA_BOLD;
|
||||||
|
else if (g_strcmp0(def, "black") == 0) return THEME_BLACK;
|
||||||
|
else if (g_strcmp0(def, "bold_black") == 0) return THEME_BLACK_BOLD;
|
||||||
|
|
||||||
|
else return THEME_TEXT;
|
||||||
|
}
|
||||||
|
}
|
37
src/plugins/themes.h
Normal file
37
src/plugins/themes.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* themes.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 - 2016 James Booth <boothj5@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is part of Profanity.
|
||||||
|
*
|
||||||
|
* Profanity is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Profanity is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link the code of portions of this program with the OpenSSL library under
|
||||||
|
* certain conditions as described in each individual source file, and
|
||||||
|
* distribute linked combinations including the two.
|
||||||
|
*
|
||||||
|
* You must obey the GNU General Public License in all respects for all of the
|
||||||
|
* code used other than OpenSSL. If you modify file(s) with this exception, you
|
||||||
|
* may extend this exception to your version of the file(s), but you are not
|
||||||
|
* obligated to do so. If you do not wish to do so, delete this exception
|
||||||
|
* statement from your version. If you delete this exception statement from all
|
||||||
|
* source files in the program, then also delete it here.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void plugin_themes_init(void);
|
||||||
|
void plugin_themes_close(void);
|
||||||
|
theme_item_t plugin_themes_get(const char *const group, const char *const key, const char *const def);
|
@ -31,9 +31,9 @@
|
|||||||
* source files in the program, then also delete it here.
|
* source files in the program, then also delete it here.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
#include "gitversion.h"
|
#include "gitversion.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -59,10 +59,11 @@
|
|||||||
#include "config/tlscerts.h"
|
#include "config/tlscerts.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "muc.h"
|
#include "muc.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#include "plugins/plugins.h"
|
||||||
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
#include "pgp/gpg.h"
|
#include "pgp/gpg.h"
|
||||||
#endif
|
#endif
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
@ -96,7 +97,9 @@ void
|
|||||||
prof_run(char *log_level, char *account_name)
|
prof_run(char *log_level, char *account_name)
|
||||||
{
|
{
|
||||||
_init(log_level);
|
_init(log_level);
|
||||||
|
plugins_on_start();
|
||||||
_connect_default(account_name);
|
_connect_default(account_name);
|
||||||
|
|
||||||
ui_update();
|
ui_update();
|
||||||
|
|
||||||
log_info("Starting main event loop");
|
log_info("Starting main event loop");
|
||||||
@ -119,9 +122,10 @@ prof_run(char *log_level, char *account_name)
|
|||||||
cont = TRUE;
|
cont = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
otr_poll();
|
otr_poll();
|
||||||
#endif
|
#endif
|
||||||
|
plugins_run_timed();
|
||||||
notify_remind();
|
notify_remind();
|
||||||
jabber_process_events(10);
|
jabber_process_events(10);
|
||||||
iq_autoping_check();
|
iq_autoping_check();
|
||||||
@ -318,14 +322,14 @@ _init(char *log_level)
|
|||||||
prefs_load();
|
prefs_load();
|
||||||
log_init(prof_log_level);
|
log_init(prof_log_level);
|
||||||
log_stderr_init(PROF_LEVEL_ERROR);
|
log_stderr_init(PROF_LEVEL_ERROR);
|
||||||
if (strcmp(PACKAGE_STATUS, "development") == 0) {
|
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
log_info("Starting Profanity (%sdev.%s.%s)...", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
log_info("Starting Profanity (%sdev.%s.%s)...", PROF_PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
||||||
#else
|
#else
|
||||||
log_info("Starting Profanity (%sdev)...", PACKAGE_VERSION);
|
log_info("Starting Profanity (%sdev)...", PROF_PACKAGE_VERSION);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
log_info("Starting Profanity (%s)...", PACKAGE_VERSION);
|
log_info("Starting Profanity (%s)...", PROF_PACKAGE_VERSION);
|
||||||
}
|
}
|
||||||
chat_log_init();
|
chat_log_init();
|
||||||
groupchat_log_init();
|
groupchat_log_init();
|
||||||
@ -340,13 +344,14 @@ _init(char *log_level)
|
|||||||
muc_init();
|
muc_init();
|
||||||
tlscerts_init();
|
tlscerts_init();
|
||||||
scripts_init();
|
scripts_init();
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
otr_init();
|
otr_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
p_gpg_init();
|
p_gpg_init();
|
||||||
#endif
|
#endif
|
||||||
atexit(_shutdown);
|
atexit(_shutdown);
|
||||||
|
plugins_init();
|
||||||
inp_nonblocking(TRUE);
|
inp_nonblocking(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,13 +372,14 @@ _shutdown(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
jabber_shutdown();
|
jabber_shutdown();
|
||||||
|
plugins_on_shutdown();
|
||||||
muc_close();
|
muc_close();
|
||||||
caps_close();
|
caps_close();
|
||||||
ui_close();
|
ui_close();
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
otr_shutdown();
|
otr_shutdown();
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
p_gpg_close();
|
p_gpg_close();
|
||||||
#endif
|
#endif
|
||||||
chat_log_close();
|
chat_log_close();
|
||||||
@ -383,6 +389,7 @@ _shutdown(void)
|
|||||||
cmd_uninit();
|
cmd_uninit();
|
||||||
log_stderr_close();
|
log_stderr_close();
|
||||||
log_close();
|
log_close();
|
||||||
|
plugins_shutdown();
|
||||||
prefs_close();
|
prefs_close();
|
||||||
if (saved_status) {
|
if (saved_status) {
|
||||||
free(saved_status);
|
free(saved_status);
|
||||||
@ -401,6 +408,8 @@ _create_directories(void)
|
|||||||
g_string_append(chatlogs_dir, "/profanity/chatlogs");
|
g_string_append(chatlogs_dir, "/profanity/chatlogs");
|
||||||
GString *logs_dir = g_string_new(xdg_data);
|
GString *logs_dir = g_string_new(xdg_data);
|
||||||
g_string_append(logs_dir, "/profanity/logs");
|
g_string_append(logs_dir, "/profanity/logs");
|
||||||
|
GString *plugins_dir = g_string_new(xdg_data);
|
||||||
|
g_string_append(plugins_dir, "/profanity/plugins");
|
||||||
|
|
||||||
if (!mkdir_recursive(themes_dir->str)) {
|
if (!mkdir_recursive(themes_dir->str)) {
|
||||||
log_error("Error while creating directory %s", themes_dir->str);
|
log_error("Error while creating directory %s", themes_dir->str);
|
||||||
@ -411,10 +420,14 @@ _create_directories(void)
|
|||||||
if (!mkdir_recursive(logs_dir->str)) {
|
if (!mkdir_recursive(logs_dir->str)) {
|
||||||
log_error("Error while creating directory %s", logs_dir->str);
|
log_error("Error while creating directory %s", logs_dir->str);
|
||||||
}
|
}
|
||||||
|
if (!mkdir_recursive(plugins_dir->str)) {
|
||||||
|
log_error("Error while creating directory %s", plugins_dir->str);
|
||||||
|
}
|
||||||
|
|
||||||
g_string_free(themes_dir, TRUE);
|
g_string_free(themes_dir, TRUE);
|
||||||
g_string_free(chatlogs_dir, TRUE);
|
g_string_free(chatlogs_dir, TRUE);
|
||||||
g_string_free(logs_dir, TRUE);
|
g_string_free(logs_dir, TRUE);
|
||||||
|
g_string_free(plugins_dir, TRUE);
|
||||||
|
|
||||||
g_free(xdg_config);
|
g_free(xdg_config);
|
||||||
g_free(xdg_data);
|
g_free(xdg_data);
|
||||||
|
@ -42,8 +42,7 @@ void prof_run(char *log_level, char *account_name);
|
|||||||
|
|
||||||
void prof_handle_idle(void);
|
void prof_handle_idle(void);
|
||||||
void prof_handle_activity(void);
|
void prof_handle_activity(void);
|
||||||
|
gboolean prof_process_input(char *inp);
|
||||||
gboolean process_input(char *inp);
|
|
||||||
|
|
||||||
void prof_set_quit(void);
|
void prof_set_quit(void);
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -40,9 +40,9 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#ifndef UI_BUFFER_H
|
#ifndef UI_BUFFER_H
|
||||||
#define UI_BUFFER_H
|
#define UI_BUFFER_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
#include "config/theme.h"
|
#include "config/theme.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -46,7 +46,8 @@
|
|||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "ui/titlebar.h"
|
#include "ui/titlebar.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#include "plugins/plugins.h"
|
||||||
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ chatwin_receipt_received(ProfChatWin *chatwin, const char *const id)
|
|||||||
win_mark_received(win, id);
|
win_mark_received(win, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
void
|
void
|
||||||
chatwin_otr_secured(ProfChatWin *chatwin, gboolean trusted)
|
chatwin_otr_secured(ProfChatWin *chatwin, gboolean trusted)
|
||||||
{
|
{
|
||||||
@ -234,6 +235,8 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
|
|||||||
{
|
{
|
||||||
assert(chatwin != NULL);
|
assert(chatwin != NULL);
|
||||||
|
|
||||||
|
char *plugin_message = plugins_pre_chat_message_display(chatwin->barejid, message);
|
||||||
|
|
||||||
ProfWin *window = (ProfWin*)chatwin;
|
ProfWin *window = (ProfWin*)chatwin;
|
||||||
int num = wins_get_num(window);
|
int num = wins_get_num(window);
|
||||||
|
|
||||||
@ -244,7 +247,7 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
|
|||||||
|
|
||||||
// currently viewing chat window with sender
|
// currently viewing chat window with sender
|
||||||
if (wins_is_current(window)) {
|
if (wins_is_current(window)) {
|
||||||
win_print_incoming_message(window, timestamp, display_name, message, enc_mode);
|
win_print_incoming_message(window, timestamp, display_name, plugin_message, enc_mode);
|
||||||
title_bar_set_typing(FALSE);
|
title_bar_set_typing(FALSE);
|
||||||
status_bar_active(num);
|
status_bar_active(num);
|
||||||
|
|
||||||
@ -271,7 +274,7 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
win_print_incoming_message(window, timestamp, display_name, message, enc_mode);
|
win_print_incoming_message(window, timestamp, display_name, plugin_message, enc_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prefs_get_boolean(PREF_BEEP)) {
|
if (prefs_get_boolean(PREF_BEEP)) {
|
||||||
@ -279,10 +282,14 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (notify) {
|
if (notify) {
|
||||||
notify_message(display_name, num, message);
|
notify_message(display_name, num, plugin_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(display_name);
|
free(display_name);
|
||||||
|
|
||||||
|
plugins_post_chat_message_display(chatwin->barejid, plugin_message);
|
||||||
|
|
||||||
|
free(plugin_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -37,9 +37,9 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -57,7 +57,7 @@
|
|||||||
#include "xmpp/xmpp.h"
|
#include "xmpp/xmpp.h"
|
||||||
#include "xmpp/bookmark.h"
|
#include "xmpp/bookmark.h"
|
||||||
|
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
#include "gitversion.h"
|
#include "gitversion.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ void
|
|||||||
cons_debug(const char *const msg, ...)
|
cons_debug(const char *const msg, ...)
|
||||||
{
|
{
|
||||||
ProfWin *console = wins_get_console();
|
ProfWin *console = wins_get_console();
|
||||||
if (strcmp(PACKAGE_STATUS, "development") == 0) {
|
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
va_list arg;
|
va_list arg;
|
||||||
va_start(arg, msg);
|
va_start(arg, msg);
|
||||||
GString *fmt_msg = g_string_new(NULL);
|
GString *fmt_msg = g_string_new(NULL);
|
||||||
@ -120,45 +120,45 @@ cons_show_padded(int pad, const char *const msg, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cons_show_help(Command *command)
|
cons_show_help(const char *const cmd, CommandHelp *help)
|
||||||
{
|
{
|
||||||
ProfWin *console = wins_get_console();
|
ProfWin *console = wins_get_console();
|
||||||
|
|
||||||
cons_show("");
|
cons_show("");
|
||||||
win_vprint(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "%s", &command->cmd[1]);
|
win_vprint(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "%s", &cmd[1]);
|
||||||
win_print(console, '-', 0, NULL, NO_EOL, THEME_WHITE_BOLD, "", "");
|
win_print(console, '-', 0, NULL, NO_EOL, THEME_WHITE_BOLD, "", "");
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < strlen(command->cmd) - 1 ; i++) {
|
for (i = 0; i < strlen(cmd) - 1 ; i++) {
|
||||||
win_print(console, '-', 0, NULL, NO_EOL | NO_DATE, THEME_WHITE_BOLD, "", "-");
|
win_print(console, '-', 0, NULL, NO_EOL | NO_DATE, THEME_WHITE_BOLD, "", "-");
|
||||||
}
|
}
|
||||||
win_print(console, '-', 0, NULL, NO_DATE, THEME_WHITE_BOLD, "", "");
|
win_print(console, '-', 0, NULL, NO_DATE, THEME_WHITE_BOLD, "", "");
|
||||||
cons_show("");
|
cons_show("");
|
||||||
|
|
||||||
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Synopsis");
|
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Synopsis");
|
||||||
ui_show_lines(console, command->help.synopsis);
|
ui_show_lines(console, help->synopsis);
|
||||||
cons_show("");
|
cons_show("");
|
||||||
|
|
||||||
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Description");
|
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Description");
|
||||||
win_println(console, 0, command->help.desc);
|
win_println(console, 0, help->desc);
|
||||||
|
|
||||||
int maxlen = 0;
|
int maxlen = 0;
|
||||||
for (i = 0; command->help.args[i][0] != NULL; i++) {
|
for (i = 0; help->args[i][0] != NULL; i++) {
|
||||||
if (strlen(command->help.args[i][0]) > maxlen)
|
if (strlen(help->args[i][0]) > maxlen)
|
||||||
maxlen = strlen(command->help.args[i][0]);
|
maxlen = strlen(help->args[i][0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
cons_show("");
|
cons_show("");
|
||||||
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Arguments");
|
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Arguments");
|
||||||
for (i = 0; command->help.args[i][0] != NULL; i++) {
|
for (i = 0; help->args[i][0] != NULL; i++) {
|
||||||
win_vprint(console, '-', maxlen + 3, NULL, 0, 0, "", "%-*s: %s", maxlen + 1, command->help.args[i][0], command->help.args[i][1]);
|
win_vprint(console, '-', maxlen + 3, NULL, 0, 0, "", "%-*s: %s", maxlen + 1, help->args[i][0], help->args[i][1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_strv_length((gchar**)command->help.examples) > 0) {
|
if (g_strv_length((gchar**)help->examples) > 0) {
|
||||||
cons_show("");
|
cons_show("");
|
||||||
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Examples");
|
win_print(console, '-', 0, NULL, 0, THEME_WHITE_BOLD, "", "Examples");
|
||||||
ui_show_lines(console, command->help.examples);
|
ui_show_lines(console, help->examples);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -416,18 +416,18 @@ cons_about(void)
|
|||||||
_cons_splash_logo();
|
_cons_splash_logo();
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (strcmp(PACKAGE_STATUS, "development") == 0) {
|
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
win_vprint(console, '-', 0, NULL, 0, 0, "", "Welcome to Profanity, version %sdev.%s.%s", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
win_vprint(console, '-', 0, NULL, 0, 0, "", "Welcome to Profanity, version %sdev.%s.%s", PROF_PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
||||||
#else
|
#else
|
||||||
win_vprint(console, '-', 0, NULL, 0, 0, "", "Welcome to Profanity, version %sdev", PACKAGE_VERSION);
|
win_vprint(console, '-', 0, NULL, 0, 0, "", "Welcome to Profanity, version %sdev", PROF_PACKAGE_VERSION);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
win_vprint(console, '-', 0, NULL, 0, 0, "", "Welcome to Profanity, version %s", PACKAGE_VERSION);
|
win_vprint(console, '-', 0, NULL, 0, 0, "", "Welcome to Profanity, version %s", PROF_PACKAGE_VERSION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
win_vprint(console, '-', 0, NULL, 0, 0, "", "Copyright (C) 2012 - 2016 James Booth <%s>.", PACKAGE_BUGREPORT);
|
win_vprint(console, '-', 0, NULL, 0, 0, "", "Copyright (C) 2012 - 2016 James Booth <%s>.", PROF_PACKAGE_BUGREPORT);
|
||||||
win_println(console, 0, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>");
|
win_println(console, 0, "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>");
|
||||||
win_println(console, 0, "");
|
win_println(console, 0, "");
|
||||||
win_println(console, 0, "This is free software; you are free to change and redistribute it.");
|
win_println(console, 0, "This is free software; you are free to change and redistribute it.");
|
||||||
@ -2007,6 +2007,7 @@ cons_help(void)
|
|||||||
cons_show_padded(pad, "/help commands discovery : List service discovery commands.");
|
cons_show_padded(pad, "/help commands discovery : List service discovery commands.");
|
||||||
cons_show_padded(pad, "/help commands connection : List commands related to managing your connection.");
|
cons_show_padded(pad, "/help commands connection : List commands related to managing your connection.");
|
||||||
cons_show_padded(pad, "/help commands ui : List commands for manipulating the user interface.");
|
cons_show_padded(pad, "/help commands ui : List commands for manipulating the user interface.");
|
||||||
|
cons_show_padded(pad, "/help commands plugins : List plugin commands.");
|
||||||
cons_show_padded(pad, "/help [command] : Detailed help on a specific command.");
|
cons_show_padded(pad, "/help [command] : Detailed help on a specific command.");
|
||||||
cons_show_padded(pad, "/help navigation : How to navigate around Profanity.");
|
cons_show_padded(pad, "/help navigation : How to navigate around Profanity.");
|
||||||
cons_show("");
|
cons_show("");
|
||||||
@ -2304,14 +2305,14 @@ _cons_splash_logo(void)
|
|||||||
win_print(console, '-', 0, NULL, 0, THEME_SPLASH, "", "|_| (____/ ");
|
win_print(console, '-', 0, NULL, 0, THEME_SPLASH, "", "|_| (____/ ");
|
||||||
win_print(console, '-', 0, NULL, 0, THEME_SPLASH, "", "");
|
win_print(console, '-', 0, NULL, 0, THEME_SPLASH, "", "");
|
||||||
|
|
||||||
if (strcmp(PACKAGE_STATUS, "development") == 0) {
|
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %sdev.%s.%s", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %sdev.%s.%s", PROF_PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
|
||||||
#else
|
#else
|
||||||
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %sdev", PACKAGE_VERSION);
|
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %sdev", PROF_PACKAGE_VERSION);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %s", PACKAGE_VERSION);
|
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %s", PROF_PACKAGE_VERSION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,9 +32,9 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
#include "gitversion.h"
|
#include "gitversion.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -44,13 +44,13 @@
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBXSS
|
#ifdef PROF_HAVE_LIBXSS
|
||||||
#include <X11/extensions/scrnsaver.h>
|
#include <X11/extensions/scrnsaver.h>
|
||||||
#endif
|
#endif
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -64,7 +64,7 @@
|
|||||||
#include "jid.h"
|
#include "jid.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "muc.h"
|
#include "muc.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
@ -74,13 +74,14 @@
|
|||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "window_list.h"
|
#include "window_list.h"
|
||||||
#include "xmpp/xmpp.h"
|
#include "xmpp/xmpp.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
|
|
||||||
static char *win_title;
|
static char *win_title;
|
||||||
static int inp_size;
|
static int inp_size;
|
||||||
static gboolean perform_resize = FALSE;
|
static gboolean perform_resize = FALSE;
|
||||||
static GTimer *ui_idle_time;
|
static GTimer *ui_idle_time;
|
||||||
|
|
||||||
#ifdef HAVE_LIBXSS
|
#ifdef PROF_HAVE_LIBXSS
|
||||||
static Display *display;
|
static Display *display;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -104,7 +105,7 @@ ui_init(void)
|
|||||||
wins_init();
|
wins_init();
|
||||||
notifier_initialise();
|
notifier_initialise();
|
||||||
cons_about();
|
cons_about();
|
||||||
#ifdef HAVE_LIBXSS
|
#ifdef PROF_HAVE_LIBXSS
|
||||||
display = XOpenDisplay(0);
|
display = XOpenDisplay(0);
|
||||||
#endif
|
#endif
|
||||||
ui_idle_time = g_timer_new();
|
ui_idle_time = g_timer_new();
|
||||||
@ -149,7 +150,7 @@ unsigned long
|
|||||||
ui_get_idle_time(void)
|
ui_get_idle_time(void)
|
||||||
{
|
{
|
||||||
// if compiled with libxss, get the x sessions idle time
|
// if compiled with libxss, get the x sessions idle time
|
||||||
#ifdef HAVE_LIBXSS
|
#ifdef PROF_HAVE_LIBXSS
|
||||||
XScreenSaverInfo *info = XScreenSaverAllocInfo();
|
XScreenSaverInfo *info = XScreenSaverAllocInfo();
|
||||||
if (info && display) {
|
if (info && display) {
|
||||||
XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
|
XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
|
||||||
@ -496,7 +497,7 @@ ui_close_connected_win(int index)
|
|||||||
} else if (window->type == WIN_CHAT) {
|
} else if (window->type == WIN_CHAT) {
|
||||||
ProfChatWin *chatwin = (ProfChatWin*) window;
|
ProfChatWin *chatwin = (ProfChatWin*) window;
|
||||||
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
|
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
if (chatwin->is_otr) {
|
if (chatwin->is_otr) {
|
||||||
otr_end_session(chatwin->barejid);
|
otr_end_session(chatwin->barejid);
|
||||||
}
|
}
|
||||||
@ -1325,3 +1326,21 @@ ui_show_software_version(const char *const jid, const char *const presence,
|
|||||||
win_vprint(window, '-', 0, NULL, 0, 0, "", "OS : %s", os);
|
win_vprint(window, '-', 0, NULL, 0, 0, "", "OS : %s", os);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ui_status_bar_inactive(const int win)
|
||||||
|
{
|
||||||
|
status_bar_inactive(win);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ui_status_bar_active(const int win)
|
||||||
|
{
|
||||||
|
status_bar_active(win);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ui_status_bar_new(const int win)
|
||||||
|
{
|
||||||
|
status_bar_new(win);
|
||||||
|
}
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define _XOPEN_SOURCE_EXTENDED
|
#define _XOPEN_SOURCE_EXTENDED
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -46,9 +46,9 @@
|
|||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
|
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -31,14 +31,14 @@
|
|||||||
* source files in the program, then also delete it here.
|
* source files in the program, then also delete it here.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#ifdef HAVE_LIBNOTIFY
|
#ifdef PROF_HAVE_LIBNOTIFY
|
||||||
#include <libnotify/notify.h>
|
#include <libnotify/notify.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef PLATFORM_CYGWIN
|
#ifdef PLATFORM_CYGWIN
|
||||||
@ -51,8 +51,6 @@
|
|||||||
#include "window_list.h"
|
#include "window_list.h"
|
||||||
#include "config/preferences.h"
|
#include "config/preferences.h"
|
||||||
|
|
||||||
static void _notify(const char *const message, int timeout, const char *const category);
|
|
||||||
|
|
||||||
static GTimer *remind_timer;
|
static GTimer *remind_timer;
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -64,7 +62,7 @@ notifier_initialise(void)
|
|||||||
void
|
void
|
||||||
notifier_uninit(void)
|
notifier_uninit(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBNOTIFY
|
#ifdef PROF_HAVE_LIBNOTIFY
|
||||||
if (notify_is_initted()) {
|
if (notify_is_initted()) {
|
||||||
notify_uninit();
|
notify_uninit();
|
||||||
}
|
}
|
||||||
@ -78,7 +76,7 @@ notify_typing(const char *const name)
|
|||||||
char message[strlen(name) + 1 + 11];
|
char message[strlen(name) + 1 + 11];
|
||||||
sprintf(message, "%s: typing...", name);
|
sprintf(message, "%s: typing...", name);
|
||||||
|
|
||||||
_notify(message, 10000, "Incoming message");
|
notify(message, 10000, "Incoming message");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -92,7 +90,7 @@ notify_invite(const char *const from, const char *const room, const char *const
|
|||||||
g_string_append_printf(message, "\n\"%s\"", reason);
|
g_string_append_printf(message, "\n\"%s\"", reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
_notify(message->str, 10000, "Incoming message");
|
notify(message->str, 10000, "Incoming message");
|
||||||
|
|
||||||
g_string_free(message, TRUE);
|
g_string_free(message, TRUE);
|
||||||
}
|
}
|
||||||
@ -111,8 +109,7 @@ notify_message(const char *const name, int num, const char *const text)
|
|||||||
g_string_append_printf(message, "\n%s", text);
|
g_string_append_printf(message, "\n%s", text);
|
||||||
}
|
}
|
||||||
|
|
||||||
_notify(message->str, 10000, "incoming message");
|
notify(message->str, 10000, "incoming message");
|
||||||
|
|
||||||
g_string_free(message, TRUE);
|
g_string_free(message, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,7 +127,7 @@ notify_room_message(const char *const nick, const char *const room, int num, con
|
|||||||
g_string_append_printf(message, "\n%s", text);
|
g_string_append_printf(message, "\n%s", text);
|
||||||
}
|
}
|
||||||
|
|
||||||
_notify(message->str, 10000, "incoming message");
|
notify(message->str, 10000, "incoming message");
|
||||||
|
|
||||||
g_string_free(message, TRUE);
|
g_string_free(message, TRUE);
|
||||||
}
|
}
|
||||||
@ -140,7 +137,7 @@ notify_subscription(const char *const from)
|
|||||||
{
|
{
|
||||||
GString *message = g_string_new("Subscription request: \n");
|
GString *message = g_string_new("Subscription request: \n");
|
||||||
g_string_append(message, from);
|
g_string_append(message, from);
|
||||||
_notify(message->str, 10000, "Incoming message");
|
notify(message->str, 10000, "Incomming message");
|
||||||
g_string_free(message, TRUE);
|
g_string_free(message, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,14 +147,14 @@ notify_remind(void)
|
|||||||
gdouble elapsed = g_timer_elapsed(remind_timer, NULL);
|
gdouble elapsed = g_timer_elapsed(remind_timer, NULL);
|
||||||
gint remind_period = prefs_get_notify_remind();
|
gint remind_period = prefs_get_notify_remind();
|
||||||
if (remind_period > 0 && elapsed >= remind_period) {
|
if (remind_period > 0 && elapsed >= remind_period) {
|
||||||
gboolean notify = wins_do_notify_remind();
|
gboolean donotify = wins_do_notify_remind();
|
||||||
gint unread = wins_get_total_unread();
|
gint unread = wins_get_total_unread();
|
||||||
gint open = muc_invites_count();
|
gint open = muc_invites_count();
|
||||||
gint subs = presence_sub_request_count();
|
gint subs = presence_sub_request_count();
|
||||||
|
|
||||||
GString *text = g_string_new("");
|
GString *text = g_string_new("");
|
||||||
|
|
||||||
if (notify && unread > 0) {
|
if (donotify && unread > 0) {
|
||||||
if (unread == 1) {
|
if (unread == 1) {
|
||||||
g_string_append(text, "1 unread message");
|
g_string_append(text, "1 unread message");
|
||||||
} else {
|
} else {
|
||||||
@ -186,8 +183,8 @@ notify_remind(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((notify && unread > 0) || (open > 0) || (subs > 0)) {
|
if ((donotify && unread > 0) || (open > 0) || (subs > 0)) {
|
||||||
_notify(text->str, 5000, "Incoming message");
|
notify(text->str, 5000, "Incoming message");
|
||||||
}
|
}
|
||||||
|
|
||||||
g_string_free(text, TRUE);
|
g_string_free(text, TRUE);
|
||||||
@ -196,10 +193,10 @@ notify_remind(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
_notify(const char *const message, int timeout, const char *const category)
|
notify(const char *const message, int timeout, const char *const category)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBNOTIFY
|
#ifdef PROF_HAVE_LIBNOTIFY
|
||||||
log_debug("Attempting notification: %s", message);
|
log_debug("Attempting notification: %s", message);
|
||||||
if (notify_is_initted()) {
|
if (notify_is_initted()) {
|
||||||
log_debug("Reinitialising libnotify");
|
log_debug("Reinitialising libnotify");
|
||||||
@ -251,7 +248,7 @@ _notify(const char *const message, int timeout, const char *const category)
|
|||||||
|
|
||||||
Shell_NotifyIcon(NIM_MODIFY, &nid);
|
Shell_NotifyIcon(NIM_MODIFY, &nid);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_OSXNOTIFY
|
#ifdef PROF_HAVE_OSXNOTIFY
|
||||||
GString *notify_command = g_string_new("terminal-notifier -title \"Profanity\" -message '");
|
GString *notify_command = g_string_new("terminal-notifier -title \"Profanity\" -message '");
|
||||||
|
|
||||||
char *escaped_single = str_replace(message, "'", "'\\''");
|
char *escaped_single = str_replace(message, "'", "'\\''");
|
||||||
|
@ -32,15 +32,15 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "config/theme.h"
|
#include "config/theme.h"
|
||||||
|
11
src/ui/ui.h
11
src/ui/ui.h
@ -35,12 +35,12 @@
|
|||||||
#ifndef UI_UI_H
|
#ifndef UI_UI_H
|
||||||
#define UI_UI_H
|
#define UI_UI_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include "command/commands.h"
|
#include "command/commands.h"
|
||||||
#include "ui/win_types.h"
|
#include "ui/win_types.h"
|
||||||
#include "muc.h"
|
#include "muc.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -135,8 +135,7 @@ void chatwin_outgoing_carbon(ProfChatWin *chatwin, const char *const message);
|
|||||||
void chatwin_contact_online(ProfChatWin *chatwin, Resource *resource, GDateTime *last_activity);
|
void chatwin_contact_online(ProfChatWin *chatwin, Resource *resource, GDateTime *last_activity);
|
||||||
void chatwin_contact_offline(ProfChatWin *chatwin, char *resource, char *status);
|
void chatwin_contact_offline(ProfChatWin *chatwin, char *resource, char *status);
|
||||||
char* chatwin_get_string(ProfChatWin *chatwin);
|
char* chatwin_get_string(ProfChatWin *chatwin);
|
||||||
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#ifdef HAVE_LIBOTR
|
|
||||||
void chatwin_otr_secured(ProfChatWin *chatwin, gboolean trusted);
|
void chatwin_otr_secured(ProfChatWin *chatwin, gboolean trusted);
|
||||||
void chatwin_otr_unsecured(ProfChatWin *chatwin);
|
void chatwin_otr_unsecured(ProfChatWin *chatwin);
|
||||||
void chatwin_otr_trust(ProfChatWin *chatwin);
|
void chatwin_otr_trust(ProfChatWin *chatwin);
|
||||||
@ -231,7 +230,7 @@ void cons_show(const char *const msg, ...);
|
|||||||
void cons_show_padded(int pad, const char *const msg, ...);
|
void cons_show_padded(int pad, const char *const msg, ...);
|
||||||
void cons_about(void);
|
void cons_about(void);
|
||||||
void cons_help(void);
|
void cons_help(void);
|
||||||
void cons_show_help(Command *command);
|
void cons_show_help(const char *const cmd, CommandHelp *help);
|
||||||
void cons_bad_cmd_usage(const char *const cmd);
|
void cons_bad_cmd_usage(const char *const cmd);
|
||||||
void cons_navigation_help(void);
|
void cons_navigation_help(void);
|
||||||
void cons_prefs(void);
|
void cons_prefs(void);
|
||||||
@ -343,6 +342,7 @@ ProfWin* win_create_chat(const char *const barejid);
|
|||||||
ProfWin* win_create_muc(const char *const roomjid);
|
ProfWin* win_create_muc(const char *const roomjid);
|
||||||
ProfWin* win_create_muc_config(const char *const title, DataForm *form);
|
ProfWin* win_create_muc_config(const char *const title, DataForm *form);
|
||||||
ProfWin* win_create_private(const char *const fulljid);
|
ProfWin* win_create_private(const char *const fulljid);
|
||||||
|
ProfWin* win_create_plugin(const char *const tag);
|
||||||
void win_update_virtual(ProfWin *window);
|
void win_update_virtual(ProfWin *window);
|
||||||
void win_free(ProfWin *window);
|
void win_free(ProfWin *window);
|
||||||
gboolean win_notify_remind(ProfWin *window);
|
gboolean win_notify_remind(ProfWin *window);
|
||||||
@ -372,6 +372,7 @@ void notify_message(const char *const name, int win, const char *const text);
|
|||||||
void notify_room_message(const char *const nick, const char *const room, int win, const char *const text);
|
void notify_room_message(const char *const nick, const char *const room, int win, const char *const text);
|
||||||
void notify_remind(void);
|
void notify_remind(void);
|
||||||
void notify_invite(const char *const from, const char *const room, const char *const reason);
|
void notify_invite(const char *const from, const char *const room, const char *const reason);
|
||||||
|
void notify(const char *const message, int timeout, const char *const category);
|
||||||
void notify_subscription(const char *const from);
|
void notify_subscription(const char *const from);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,13 +35,13 @@
|
|||||||
#ifndef UI_WIN_TYPES_H
|
#ifndef UI_WIN_TYPES_H
|
||||||
#define UI_WIN_TYPES_H
|
#define UI_WIN_TYPES_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -55,6 +55,7 @@
|
|||||||
#define PROFPRIVATEWIN_MEMCHECK 77437483
|
#define PROFPRIVATEWIN_MEMCHECK 77437483
|
||||||
#define PROFCONFWIN_MEMCHECK 64334685
|
#define PROFCONFWIN_MEMCHECK 64334685
|
||||||
#define PROFXMLWIN_MEMCHECK 87333463
|
#define PROFXMLWIN_MEMCHECK 87333463
|
||||||
|
#define PROFPLUGINWIN_MEMCHECK 43434777
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
LAYOUT_SIMPLE,
|
LAYOUT_SIMPLE,
|
||||||
@ -86,7 +87,8 @@ typedef enum {
|
|||||||
WIN_MUC,
|
WIN_MUC,
|
||||||
WIN_MUC_CONFIG,
|
WIN_MUC_CONFIG,
|
||||||
WIN_PRIVATE,
|
WIN_PRIVATE,
|
||||||
WIN_XML
|
WIN_XML,
|
||||||
|
WIN_PLUGIN
|
||||||
} win_type_t;
|
} win_type_t;
|
||||||
|
|
||||||
typedef struct prof_win_t {
|
typedef struct prof_win_t {
|
||||||
@ -143,4 +145,10 @@ typedef struct prof_xml_win_t {
|
|||||||
unsigned long memcheck;
|
unsigned long memcheck;
|
||||||
} ProfXMLWin;
|
} ProfXMLWin;
|
||||||
|
|
||||||
|
typedef struct prof_plugin_win_t {
|
||||||
|
ProfWin super;
|
||||||
|
char *tag;
|
||||||
|
unsigned long memcheck;
|
||||||
|
} ProfPluginWin;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -41,9 +41,9 @@
|
|||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -237,6 +237,20 @@ win_create_xmlconsole(void)
|
|||||||
return &new_win->window;
|
return &new_win->window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProfWin*
|
||||||
|
win_create_plugin(const char *const tag)
|
||||||
|
{
|
||||||
|
ProfPluginWin *new_win = malloc(sizeof(ProfPluginWin));
|
||||||
|
new_win->super.type = WIN_PLUGIN;
|
||||||
|
new_win->super.layout = _win_create_simple_layout();
|
||||||
|
|
||||||
|
new_win->tag = strdup(tag);
|
||||||
|
|
||||||
|
new_win->memcheck = PROFPLUGINWIN_MEMCHECK;
|
||||||
|
|
||||||
|
return &new_win->super;
|
||||||
|
}
|
||||||
|
|
||||||
char*
|
char*
|
||||||
win_get_title(ProfWin *window)
|
win_get_title(ProfWin *window)
|
||||||
{
|
{
|
||||||
@ -287,6 +301,11 @@ win_get_title(ProfWin *window)
|
|||||||
if (window->type == WIN_XML) {
|
if (window->type == WIN_XML) {
|
||||||
return strdup(XML_WIN_TITLE);
|
return strdup(XML_WIN_TITLE);
|
||||||
}
|
}
|
||||||
|
if (window->type == WIN_PLUGIN) {
|
||||||
|
ProfPluginWin *pluginwin = (ProfPluginWin*) window;
|
||||||
|
assert(pluginwin->memcheck == PROFPLUGINWIN_MEMCHECK);
|
||||||
|
return strdup(pluginwin->tag);
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -327,6 +346,15 @@ win_get_string(ProfWin *window)
|
|||||||
ProfXMLWin *xmlwin = (ProfXMLWin*)window;
|
ProfXMLWin *xmlwin = (ProfXMLWin*)window;
|
||||||
return xmlwin_get_string(xmlwin);
|
return xmlwin_get_string(xmlwin);
|
||||||
}
|
}
|
||||||
|
case WIN_PLUGIN:
|
||||||
|
{
|
||||||
|
ProfPluginWin *pluginwin = (ProfPluginWin*)window;
|
||||||
|
GString *gstring = g_string_new("");
|
||||||
|
g_string_append_printf(gstring, "%s plugin", pluginwin->tag);
|
||||||
|
char *res = gstring->str;
|
||||||
|
g_string_free(gstring, FALSE);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#ifndef UI_WINDOW_H
|
#ifndef UI_WINDOW_H
|
||||||
#define UI_WINDOW_H
|
#define UI_WINDOW_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
|
||||||
@ -46,9 +46,9 @@
|
|||||||
#include "xmpp/xmpp.h"
|
#include "xmpp/xmpp.h"
|
||||||
#include "chat_state.h"
|
#include "chat_state.h"
|
||||||
|
|
||||||
#ifdef HAVE_NCURSESW_NCURSES_H
|
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
|
||||||
#include <ncursesw/ncurses.h>
|
#include <ncursesw/ncurses.h>
|
||||||
#elif HAVE_NCURSES_H
|
#elif PROF_HAVE_NCURSES_H
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@ -201,6 +201,27 @@ wins_get_private(const char *const fulljid)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProfPluginWin*
|
||||||
|
wins_get_plugin(const char *const tag)
|
||||||
|
{
|
||||||
|
GList *values = g_hash_table_get_values(windows);
|
||||||
|
GList *curr = values;
|
||||||
|
|
||||||
|
while (curr) {
|
||||||
|
ProfWin *window = curr->data;
|
||||||
|
if (window->type == WIN_PLUGIN) {
|
||||||
|
ProfPluginWin *pluginwin = (ProfPluginWin*)window;
|
||||||
|
if (g_strcmp0(pluginwin->tag, tag) == 0) {
|
||||||
|
return pluginwin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
curr = g_list_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_list_free(values);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
GList*
|
GList*
|
||||||
wins_get_private_chats(const char *const roomjid)
|
wins_get_private_chats(const char *const roomjid)
|
||||||
{
|
{
|
||||||
@ -614,6 +635,17 @@ wins_new_private(const char *const fulljid)
|
|||||||
return newwin;
|
return newwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProfWin *
|
||||||
|
wins_new_plugin(const char * const tag)
|
||||||
|
{
|
||||||
|
GList *keys = g_hash_table_get_keys(windows);
|
||||||
|
int result = get_next_available_win_num(keys);
|
||||||
|
ProfWin *new = win_create_plugin(tag);
|
||||||
|
g_hash_table_insert(windows, GINT_TO_POINTER(result), new);
|
||||||
|
g_list_free(keys);
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
wins_do_notify_remind(void)
|
wins_do_notify_remind(void)
|
||||||
{
|
{
|
||||||
|
@ -44,6 +44,7 @@ ProfWin* wins_new_chat(const char *const barejid);
|
|||||||
ProfWin* wins_new_muc(const char *const roomjid);
|
ProfWin* wins_new_muc(const char *const roomjid);
|
||||||
ProfWin* wins_new_muc_config(const char *const roomjid, DataForm *form);
|
ProfWin* wins_new_muc_config(const char *const roomjid, DataForm *form);
|
||||||
ProfWin* wins_new_private(const char *const fulljid);
|
ProfWin* wins_new_private(const char *const fulljid);
|
||||||
|
ProfWin* wins_new_plugin(const char *const tag);
|
||||||
|
|
||||||
gboolean wins_chat_exists(const char *const barejid);
|
gboolean wins_chat_exists(const char *const barejid);
|
||||||
GList* wins_get_private_chats(const char *const roomjid);
|
GList* wins_get_private_chats(const char *const roomjid);
|
||||||
@ -57,6 +58,7 @@ GList* wins_get_chat_unsubscribed(void);
|
|||||||
ProfMucWin* wins_get_muc(const char *const roomjid);
|
ProfMucWin* wins_get_muc(const char *const roomjid);
|
||||||
ProfMucConfWin* wins_get_muc_conf(const char *const roomjid);
|
ProfMucConfWin* wins_get_muc_conf(const char *const roomjid);
|
||||||
ProfPrivateWin* wins_get_private(const char *const fulljid);
|
ProfPrivateWin* wins_get_private(const char *const fulljid);
|
||||||
|
ProfPluginWin* wins_get_plugin(const char *const tag);
|
||||||
ProfXMLWin* wins_get_xmlconsole(void);
|
ProfXMLWin* wins_get_xmlconsole(void);
|
||||||
|
|
||||||
ProfWin* wins_get_current(void);
|
ProfWin* wins_get_current(void);
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -40,10 +40,10 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,9 +32,9 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
#include "gitversion.h"
|
#include "gitversion.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -44,10 +44,10 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <glib/gstdio.h>
|
#include <glib/gstdio.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -565,9 +565,9 @@ caps_create_query_response_stanza(xmpp_ctx_t *const ctx)
|
|||||||
xmpp_stanza_set_attribute(identity, "type", "console");
|
xmpp_stanza_set_attribute(identity, "type", "console");
|
||||||
|
|
||||||
GString *name_str = g_string_new("Profanity ");
|
GString *name_str = g_string_new("Profanity ");
|
||||||
g_string_append(name_str, PACKAGE_VERSION);
|
g_string_append(name_str, PROF_PACKAGE_VERSION);
|
||||||
if (strcmp(PACKAGE_STATUS, "development") == 0) {
|
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
g_string_append(name_str, "dev.");
|
g_string_append(name_str, "dev.");
|
||||||
g_string_append(name_str, PROF_GIT_BRANCH);
|
g_string_append(name_str, PROF_GIT_BRANCH);
|
||||||
g_string_append(name_str, ".");
|
g_string_append(name_str, ".");
|
||||||
|
@ -35,12 +35,12 @@
|
|||||||
#ifndef XMPP_CAPABILITIES_H
|
#ifndef XMPP_CAPABILITIES_H
|
||||||
#define XMPP_CAPABILITIES_H
|
#define XMPP_CAPABILITIES_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,16 +32,16 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -51,6 +51,7 @@
|
|||||||
#include "jid.h"
|
#include "jid.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "muc.h"
|
#include "muc.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
#include "profanity.h"
|
#include "profanity.h"
|
||||||
#include "event/server_events.h"
|
#include "event/server_events.h"
|
||||||
#include "xmpp/bookmark.h"
|
#include "xmpp/bookmark.h"
|
||||||
@ -93,12 +94,12 @@ static struct {
|
|||||||
static GTimer *reconnect_timer;
|
static GTimer *reconnect_timer;
|
||||||
|
|
||||||
static log_level_t _get_log_level(xmpp_log_level_t xmpp_level);
|
static log_level_t _get_log_level(xmpp_log_level_t xmpp_level);
|
||||||
static xmpp_log_level_t _get_xmpp_log_level();
|
static xmpp_log_level_t _get_xmpp_log_level(void);
|
||||||
|
|
||||||
static void _xmpp_file_logger(void *const userdata, const xmpp_log_level_t level, const char *const area,
|
static void _xmpp_file_logger(void *const userdata, const xmpp_log_level_t level, const char *const area,
|
||||||
const char *const msg);
|
const char *const msg);
|
||||||
|
|
||||||
static xmpp_log_t* _xmpp_get_file_logger();
|
static xmpp_log_t* _xmpp_get_file_logger(void);
|
||||||
|
|
||||||
static jabber_conn_status_t _jabber_connect(const char *const fulljid, const char *const passwd,
|
static jabber_conn_status_t _jabber_connect(const char *const fulljid, const char *const passwd,
|
||||||
const char *const altdomain, int port, const char *const tls_policy);
|
const char *const altdomain, int port, const char *const tls_policy);
|
||||||
@ -235,6 +236,9 @@ jabber_disconnect(void)
|
|||||||
{
|
{
|
||||||
// if connected, send end stream and wait for response
|
// if connected, send end stream and wait for response
|
||||||
if (jabber_conn.conn_status == JABBER_CONNECTED) {
|
if (jabber_conn.conn_status == JABBER_CONNECTED) {
|
||||||
|
char *account_name = jabber_get_account_name();
|
||||||
|
const char *fulljid = jabber_get_fulljid();
|
||||||
|
plugins_on_disconnect(account_name, fulljid);
|
||||||
log_info("Closing connection");
|
log_info("Closing connection");
|
||||||
accounts_set_last_activity(jabber_get_account_name());
|
accounts_set_last_activity(jabber_get_account_name());
|
||||||
jabber_conn.conn_status = JABBER_DISCONNECTING;
|
jabber_conn.conn_status = JABBER_DISCONNECTING;
|
||||||
@ -418,7 +422,7 @@ _connection_free_session_data(void)
|
|||||||
presence_clear_sub_requests();
|
presence_clear_sub_requests();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
static int
|
static int
|
||||||
_connection_certfail_cb(xmpp_tlscert_t *xmpptlscert, const char *const errormsg)
|
_connection_certfail_cb(xmpp_tlscert_t *xmpptlscert, const char *const errormsg)
|
||||||
{
|
{
|
||||||
@ -526,7 +530,7 @@ _jabber_connect(const char *const fulljid, const char *const passwd, const char
|
|||||||
xmpp_conn_set_flags(jabber_conn.conn, XMPP_CONN_FLAG_DISABLE_TLS);
|
xmpp_conn_set_flags(jabber_conn.conn, XMPP_CONN_FLAG_DISABLE_TLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
char *cert_path = prefs_get_string(PREF_TLS_CERTPATH);
|
char *cert_path = prefs_get_string(PREF_TLS_CERTPATH);
|
||||||
if (cert_path) {
|
if (cert_path) {
|
||||||
xmpp_conn_tlscert_path(jabber_conn.conn, cert_path);
|
xmpp_conn_tlscert_path(jabber_conn.conn, cert_path);
|
||||||
@ -534,7 +538,7 @@ _jabber_connect(const char *const fulljid, const char *const passwd, const char
|
|||||||
prefs_free_string(cert_path);
|
prefs_free_string(cert_path);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
int connect_status = xmpp_connect_client(
|
int connect_status = xmpp_connect_client(
|
||||||
jabber_conn.conn,
|
jabber_conn.conn,
|
||||||
altdomain,
|
altdomain,
|
||||||
@ -580,6 +584,9 @@ _jabber_reconnect(void)
|
|||||||
static void
|
static void
|
||||||
_jabber_lost_connection(void)
|
_jabber_lost_connection(void)
|
||||||
{
|
{
|
||||||
|
char *account_name = jabber_get_account_name();
|
||||||
|
const char *fulljid = jabber_get_fulljid();
|
||||||
|
plugins_on_disconnect(account_name, fulljid);
|
||||||
sv_ev_lost_connection();
|
sv_ev_lost_connection();
|
||||||
if (prefs_get_reconnect() != 0) {
|
if (prefs_get_reconnect() != 0) {
|
||||||
assert(reconnect_timer == NULL);
|
assert(reconnect_timer == NULL);
|
||||||
|
@ -35,12 +35,12 @@
|
|||||||
#ifndef XMPP_CONNECTION_H
|
#ifndef XMPP_CONNECTION_H
|
||||||
#define XMPP_CONNECTION_H
|
#define XMPP_CONNECTION_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,15 +32,15 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,9 +32,9 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
#include "gitversion.h"
|
#include "gitversion.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -43,10 +43,10 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1081,9 +1081,9 @@ _version_get_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza,
|
|||||||
xmpp_stanza_t *version = xmpp_stanza_new(ctx);
|
xmpp_stanza_t *version = xmpp_stanza_new(ctx);
|
||||||
xmpp_stanza_set_name(version, "version");
|
xmpp_stanza_set_name(version, "version");
|
||||||
xmpp_stanza_t *version_txt = xmpp_stanza_new(ctx);
|
xmpp_stanza_t *version_txt = xmpp_stanza_new(ctx);
|
||||||
GString *version_str = g_string_new(PACKAGE_VERSION);
|
GString *version_str = g_string_new(PROF_PACKAGE_VERSION);
|
||||||
if (strcmp(PACKAGE_STATUS, "development") == 0) {
|
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
|
||||||
#ifdef HAVE_GIT_VERSION
|
#ifdef PROF_HAVE_GIT_VERSION
|
||||||
g_string_append(version_str, "dev.");
|
g_string_append(version_str, "dev.");
|
||||||
g_string_append(version_str, PROF_GIT_BRANCH);
|
g_string_append(version_str, PROF_GIT_BRANCH);
|
||||||
g_string_append(version_str, ".");
|
g_string_append(version_str, ".");
|
||||||
|
@ -32,15 +32,15 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ message_send_chat_pgp(const char *const barejid, const char *const msg)
|
|||||||
char *id = create_unique_id("msg");
|
char *id = create_unique_id("msg");
|
||||||
|
|
||||||
xmpp_stanza_t *message = NULL;
|
xmpp_stanza_t *message = NULL;
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
char *account_name = jabber_get_account_name();
|
char *account_name = jabber_get_account_name();
|
||||||
ProfAccount *account = accounts_get_account(account_name);
|
ProfAccount *account = accounts_get_account(account_name);
|
||||||
if (account->pgp_keyid) {
|
if (account->pgp_keyid) {
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -41,10 +41,10 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <glib/gprintf.h>
|
#include <glib/gprintf.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -40,14 +40,15 @@
|
|||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "plugins/plugins.h"
|
||||||
#include "profanity.h"
|
#include "profanity.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include "event/server_events.h"
|
#include "event/server_events.h"
|
||||||
|
@ -32,17 +32,17 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -35,12 +35,12 @@
|
|||||||
#ifndef XMPP_STANZA_H
|
#ifndef XMPP_STANZA_H
|
||||||
#define XMPP_STANZA_H
|
#define XMPP_STANZA_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -35,12 +35,12 @@
|
|||||||
#ifndef XMPP_XMPP_H
|
#ifndef XMPP_XMPP_H
|
||||||
#define XMPP_XMPP_H
|
#define XMPP_XMPP_H
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
#include <mesode.h>
|
#include <mesode.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIBSTROPHE
|
#ifdef PROF_HAVE_LIBSTROPHE
|
||||||
#include <strophe.h>
|
#include <strophe.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ char* jabber_get_account_name(void);
|
|||||||
GList* jabber_get_available_resources(void);
|
GList* jabber_get_available_resources(void);
|
||||||
char* jabber_create_uuid(void);
|
char* jabber_create_uuid(void);
|
||||||
void jabber_free_uuid(char *uuid);
|
void jabber_free_uuid(char *uuid);
|
||||||
#ifdef HAVE_LIBMESODE
|
#ifdef PROF_HAVE_LIBMESODE
|
||||||
TLSCertificate* jabber_get_tls_peer_cert(void);
|
TLSCertificate* jabber_get_tls_peer_cert(void);
|
||||||
#endif
|
#endif
|
||||||
gboolean jabber_conn_is_secured(void);
|
gboolean jabber_conn_is_secured(void);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#include <cmocka.h>
|
#include <cmocka.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include "proftest.h"
|
#include "proftest.h"
|
||||||
#include "test_connect.h"
|
#include "test_connect.h"
|
||||||
|
@ -798,7 +798,7 @@ void cmd_account_set_priority_updates_presence_when_account_connected_with_prese
|
|||||||
|
|
||||||
will_return(jabber_get_account_name, "a_account");
|
will_return(jabber_get_account_name, "a_account");
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
ProfAccount *account = account_new("a_account", "a_jid", NULL, NULL, TRUE, NULL, 5222, "a_resource",
|
ProfAccount *account = account_new("a_account", "a_jid", NULL, NULL, TRUE, NULL, 5222, "a_resource",
|
||||||
NULL, NULL, 10, 10, 10, 10, 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
NULL, NULL, 10, 10, 10, 10, 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include <libotr/proto.h>
|
#include <libotr/proto.h>
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#define CMD_OTR "/otr"
|
#define CMD_OTR "/otr"
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
void cmd_otr_shows_usage_when_no_args(void **state)
|
void cmd_otr_shows_usage_when_no_args(void **state)
|
||||||
{
|
{
|
||||||
gchar *args[] = { NULL };
|
gchar *args[] = { NULL };
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
void cmd_otr_shows_usage_when_no_args(void **state);
|
void cmd_otr_shows_usage_when_no_args(void **state);
|
||||||
void cmd_otr_shows_usage_when_invalid_subcommand(void **state);
|
void cmd_otr_shows_usage_when_invalid_subcommand(void **state);
|
||||||
void cmd_otr_log_shows_usage_when_no_args(void **state);
|
void cmd_otr_log_shows_usage_when_no_args(void **state);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include "command/commands.h"
|
#include "command/commands.h"
|
||||||
|
|
||||||
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#define CMD_PGP "/pgp"
|
#define CMD_PGP "/pgp"
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
void cmd_pgp_shows_usage_when_no_args(void **state)
|
void cmd_pgp_shows_usage_when_no_args(void **state)
|
||||||
{
|
{
|
||||||
gchar *args[] = { NULL };
|
gchar *args[] = { NULL };
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
void cmd_pgp_shows_usage_when_no_args(void **state);
|
void cmd_pgp_shows_usage_when_no_args(void **state);
|
||||||
void cmd_pgp_start_shows_message_when_disconnected(void **state);
|
void cmd_pgp_start_shows_message_when_disconnected(void **state);
|
||||||
void cmd_pgp_start_shows_message_when_disconnecting(void **state);
|
void cmd_pgp_start_shows_message_when_disconnecting(void **state);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
#include "otr/otr.h"
|
#include "otr/otr.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ void ui_resize(void) {}
|
|||||||
|
|
||||||
void ui_focus_win(ProfWin *win) {}
|
void ui_focus_win(ProfWin *win) {}
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
void chatwin_otr_secured(ProfChatWin *chatwin, gboolean trusted) {}
|
void chatwin_otr_secured(ProfChatWin *chatwin, gboolean trusted) {}
|
||||||
void chatwin_otr_unsecured(ProfChatWin *chatwin) {}
|
void chatwin_otr_unsecured(ProfChatWin *chatwin) {}
|
||||||
void chatwin_otr_trust(ProfChatWin *chatwin) {}
|
void chatwin_otr_trust(ProfChatWin *chatwin) {}
|
||||||
@ -303,8 +303,10 @@ gboolean ui_win_has_unsaved_form(int num)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void ui_status_bar_inactive(const int win) {}
|
||||||
ui_write(char *line, int offset) {}
|
void ui_status_bar_active(const int win) {}
|
||||||
|
void ui_status_bar_new(const int win) {}
|
||||||
|
void ui_write(char *line, int offset) {}
|
||||||
|
|
||||||
// console window actions
|
// console window actions
|
||||||
|
|
||||||
@ -319,7 +321,7 @@ void cons_show(const char * const msg, ...)
|
|||||||
|
|
||||||
void cons_show_padded(int pad, const char * const msg, ...) {}
|
void cons_show_padded(int pad, const char * const msg, ...) {}
|
||||||
|
|
||||||
void cons_show_help(Command *command) {}
|
void cons_show_help(const char *const cmd, CommandHelp *help) {}
|
||||||
|
|
||||||
void cons_about(void) {}
|
void cons_about(void) {}
|
||||||
void cons_help(void) {}
|
void cons_help(void) {}
|
||||||
@ -494,6 +496,10 @@ ProfWin* win_create_private(const char * const fulljid)
|
|||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
ProfWin* win_create_plugin(const char * const tag)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void win_update_virtual(ProfWin *window) {}
|
void win_update_virtual(ProfWin *window) {}
|
||||||
void win_free(ProfWin *window) {}
|
void win_free(ProfWin *window) {}
|
||||||
@ -540,3 +546,6 @@ void notify_remind(void) {}
|
|||||||
void notify_invite(const char * const from, const char * const room,
|
void notify_invite(const char * const from, const char * const room,
|
||||||
const char * const reason) {}
|
const char * const reason) {}
|
||||||
void notify_subscription(const char * const from) {}
|
void notify_subscription(const char * const from) {}
|
||||||
|
void notify(const char * const message, int timeout,
|
||||||
|
const char * const category) {}
|
||||||
|
|
||||||
|
@ -7,9 +7,8 @@
|
|||||||
#include <cmocka.h>
|
#include <cmocka.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "prof_config.h"
|
||||||
#include "chat_session.h"
|
#include "chat_session.h"
|
||||||
|
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
#include "test_autocomplete.h"
|
#include "test_autocomplete.h"
|
||||||
#include "test_chat_session.h"
|
#include "test_chat_session.h"
|
||||||
@ -356,7 +355,7 @@ int main(int argc, char* argv[]) {
|
|||||||
unit_test(cmd_account_set_eval_password_when_password_set),
|
unit_test(cmd_account_set_eval_password_when_password_set),
|
||||||
unit_test(cmd_account_set_muc_sets_muc),
|
unit_test(cmd_account_set_muc_sets_muc),
|
||||||
unit_test(cmd_account_set_nick_sets_nick),
|
unit_test(cmd_account_set_nick_sets_nick),
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
unit_test(cmd_account_show_message_for_missing_otr_policy),
|
unit_test(cmd_account_show_message_for_missing_otr_policy),
|
||||||
unit_test(cmd_account_show_message_for_invalid_otr_policy),
|
unit_test(cmd_account_show_message_for_invalid_otr_policy),
|
||||||
unit_test(cmd_account_set_otr_sets_otr),
|
unit_test(cmd_account_set_otr_sets_otr),
|
||||||
@ -505,7 +504,7 @@ int main(int argc, char* argv[]) {
|
|||||||
unit_test(cmd_bookmark_remove_removes_bookmark),
|
unit_test(cmd_bookmark_remove_removes_bookmark),
|
||||||
unit_test(cmd_bookmark_remove_shows_message_when_no_bookmark),
|
unit_test(cmd_bookmark_remove_shows_message_when_no_bookmark),
|
||||||
|
|
||||||
#ifdef HAVE_LIBOTR
|
#ifdef PROF_HAVE_LIBOTR
|
||||||
unit_test(cmd_otr_shows_usage_when_no_args),
|
unit_test(cmd_otr_shows_usage_when_no_args),
|
||||||
unit_test(cmd_otr_shows_usage_when_invalid_subcommand),
|
unit_test(cmd_otr_shows_usage_when_invalid_subcommand),
|
||||||
unit_test(cmd_otr_log_shows_usage_when_no_args),
|
unit_test(cmd_otr_log_shows_usage_when_no_args),
|
||||||
@ -557,7 +556,7 @@ int main(int argc, char* argv[]) {
|
|||||||
unit_test(cmd_otr_shows_message_when_otr_unsupported),
|
unit_test(cmd_otr_shows_message_when_otr_unsupported),
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBGPGME
|
#ifdef PROF_HAVE_LIBGPGME
|
||||||
unit_test(cmd_pgp_shows_usage_when_no_args),
|
unit_test(cmd_pgp_shows_usage_when_no_args),
|
||||||
unit_test(cmd_pgp_start_shows_message_when_disconnected),
|
unit_test(cmd_pgp_start_shows_message_when_disconnected),
|
||||||
unit_test(cmd_pgp_start_shows_message_when_disconnecting),
|
unit_test(cmd_pgp_start_shows_message_when_disconnecting),
|
||||||
|
Loading…
Reference in New Issue
Block a user