Added C plugin code from plugins branch

This commit is contained in:
James Booth
2016-02-14 22:28:55 +00:00
parent f887a35c0c
commit 41fe8c22b1
70 changed files with 2668 additions and 287 deletions

View File

@@ -32,7 +32,7 @@
*
*/
#include "config.h"
#include "prof_config.h"
#include <stdlib.h>
#include <string.h>
@@ -40,9 +40,9 @@
#include <stdlib.h>
#include <glib.h>
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif

View File

@@ -35,7 +35,7 @@
#ifndef UI_BUFFER_H
#define UI_BUFFER_H
#include "config.h"
#include "prof_config.h"
#include "config/theme.h"
#include <glib.h>

View File

@@ -32,7 +32,7 @@
*
*/
#include "config.h"
#include "prof_config.h"
#include <string.h>
#include <stdlib.h>
@@ -46,7 +46,8 @@
#include "ui/ui.h"
#include "ui/window.h"
#include "ui/titlebar.h"
#ifdef HAVE_LIBOTR
#include "plugins/plugins.h"
#ifdef PROF_HAVE_LIBOTR
#include "otr/otr.h"
#endif
@@ -84,7 +85,7 @@ chatwin_receipt_received(ProfChatWin *chatwin, const char *const id)
win_mark_received(win, id);
}
#ifdef HAVE_LIBOTR
#ifdef PROF_HAVE_LIBOTR
void
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);
char *plugin_message = plugins_pre_chat_message_display(chatwin->barejid, message);
ProfWin *window = (ProfWin*)chatwin;
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
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);
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)) {
@@ -279,10 +282,14 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
}
if (notify) {
notify_message(display_name, num, message);
notify_message(display_name, num, plugin_message);
}
free(display_name);
plugins_post_chat_message_display(chatwin->barejid, plugin_message);
free(plugin_message);
}
void

View File

@@ -37,9 +37,9 @@
#include <stdlib.h>
#include <assert.h>
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif
@@ -57,7 +57,7 @@
#include "xmpp/xmpp.h"
#include "xmpp/bookmark.h"
#ifdef HAVE_GIT_VERSION
#ifdef PROF_HAVE_GIT_VERSION
#include "gitversion.h"
#endif
@@ -82,7 +82,7 @@ void
cons_debug(const char *const msg, ...)
{
ProfWin *console = wins_get_console();
if (strcmp(PACKAGE_STATUS, "development") == 0) {
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
va_list arg;
va_start(arg, msg);
GString *fmt_msg = g_string_new(NULL);
@@ -416,18 +416,18 @@ cons_about(void)
_cons_splash_logo();
} else {
if (strcmp(PACKAGE_STATUS, "development") == 0) {
#ifdef 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);
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
#ifdef PROF_HAVE_GIT_VERSION
win_vprint(console, '-', 0, NULL, 0, 0, "", "Welcome to Profanity, version %sdev.%s.%s", PROF_PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
#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
} 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 - 2015 James Booth <%s>.", PACKAGE_BUGREPORT);
win_vprint(console, '-', 0, NULL, 0, 0, "", "Copyright (C) 2012 - 2015 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, "");
win_println(console, 0, "This is free software; you are free to change and redistribute it.");
@@ -2304,14 +2304,14 @@ _cons_splash_logo(void)
win_print(console, '-', 0, NULL, 0, THEME_SPLASH, "", "|_| (____/ ");
win_print(console, '-', 0, NULL, 0, THEME_SPLASH, "", "");
if (strcmp(PACKAGE_STATUS, "development") == 0) {
#ifdef HAVE_GIT_VERSION
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %sdev.%s.%s", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
if (strcmp(PROF_PACKAGE_STATUS, "development") == 0) {
#ifdef PROF_HAVE_GIT_VERSION
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %sdev.%s.%s", PROF_PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
#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
} else {
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %s", PACKAGE_VERSION);
win_vprint(console, '-', 0, NULL, 0, 0, "", "Version %s", PROF_PACKAGE_VERSION);
}
}

View File

@@ -32,9 +32,9 @@
*
*/
#include "config.h"
#include "prof_config.h"
#ifdef HAVE_GIT_VERSION
#ifdef PROF_HAVE_GIT_VERSION
#include "gitversion.h"
#endif
@@ -44,13 +44,13 @@
#include <sys/ioctl.h>
#include <unistd.h>
#ifdef HAVE_LIBXSS
#ifdef PROF_HAVE_LIBXSS
#include <X11/extensions/scrnsaver.h>
#endif
#include <glib.h>
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif
@@ -64,7 +64,7 @@
#include "jid.h"
#include "log.h"
#include "muc.h"
#ifdef HAVE_LIBOTR
#ifdef PROF_HAVE_LIBOTR
#include "otr/otr.h"
#endif
#include "ui/ui.h"
@@ -74,13 +74,14 @@
#include "ui/window.h"
#include "window_list.h"
#include "xmpp/xmpp.h"
#include "plugins/plugins.h"
static char *win_title;
static int inp_size;
static gboolean perform_resize = FALSE;
static GTimer *ui_idle_time;
#ifdef HAVE_LIBXSS
#ifdef PROF_HAVE_LIBXSS
static Display *display;
#endif
@@ -104,7 +105,7 @@ ui_init(void)
wins_init();
notifier_initialise();
cons_about();
#ifdef HAVE_LIBXSS
#ifdef PROF_HAVE_LIBXSS
display = XOpenDisplay(0);
#endif
ui_idle_time = g_timer_new();
@@ -149,7 +150,7 @@ unsigned long
ui_get_idle_time(void)
{
// if compiled with libxss, get the x sessions idle time
#ifdef HAVE_LIBXSS
#ifdef PROF_HAVE_LIBXSS
XScreenSaverInfo *info = XScreenSaverAllocInfo();
if (info && display) {
XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
@@ -496,7 +497,7 @@ ui_close_connected_win(int index)
} else if (window->type == WIN_CHAT) {
ProfChatWin *chatwin = (ProfChatWin*) window;
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
#ifdef HAVE_LIBOTR
#ifdef PROF_HAVE_LIBOTR
if (chatwin->is_otr) {
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);
}
}
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);
}

View File

@@ -33,7 +33,7 @@
*/
#define _XOPEN_SOURCE_EXTENDED
#include "config.h"
#include "prof_config.h"
#include <sys/select.h>
#include <stdlib.h>
@@ -46,9 +46,9 @@
#include <readline/readline.h>
#include <readline/history.h>
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif

View File

@@ -31,14 +31,14 @@
* source files in the program, then also delete it here.
*
*/
#include "config.h"
#include "prof_config.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <glib.h>
#ifdef HAVE_LIBNOTIFY
#ifdef PROF_HAVE_LIBNOTIFY
#include <libnotify/notify.h>
#endif
#ifdef PLATFORM_CYGWIN
@@ -51,8 +51,6 @@
#include "window_list.h"
#include "config/preferences.h"
static void _notify(const char *const message, int timeout, const char *const category);
static GTimer *remind_timer;
void
@@ -64,7 +62,7 @@ notifier_initialise(void)
void
notifier_uninit(void)
{
#ifdef HAVE_LIBNOTIFY
#ifdef PROF_HAVE_LIBNOTIFY
if (notify_is_initted()) {
notify_uninit();
}
@@ -78,7 +76,7 @@ notify_typing(const char *const name)
char message[strlen(name) + 1 + 11];
sprintf(message, "%s: typing...", name);
_notify(message, 10000, "Incoming message");
notify(message, 10000, "Incoming message");
}
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);
}
_notify(message->str, 10000, "Incoming message");
notify(message->str, 10000, "Incoming message");
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);
}
_notify(message->str, 10000, "incoming message");
notify(message->str, 10000, "incoming message");
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);
}
_notify(message->str, 10000, "incoming message");
notify(message->str, 10000, "incoming message");
g_string_free(message, TRUE);
}
@@ -140,7 +137,7 @@ notify_subscription(const char *const from)
{
GString *message = g_string_new("Subscription request: \n");
g_string_append(message, from);
_notify(message->str, 10000, "Incoming message");
notify(message->str, 10000, "Incomming message");
g_string_free(message, TRUE);
}
@@ -150,14 +147,14 @@ notify_remind(void)
gdouble elapsed = g_timer_elapsed(remind_timer, NULL);
gint remind_period = prefs_get_notify_remind();
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 open = muc_invites_count();
gint subs = presence_sub_request_count();
GString *text = g_string_new("");
if (notify && unread > 0) {
if (donotify && unread > 0) {
if (unread == 1) {
g_string_append(text, "1 unread message");
} else {
@@ -186,8 +183,8 @@ notify_remind(void)
}
}
if ((notify && unread > 0) || (open > 0) || (subs > 0)) {
_notify(text->str, 5000, "Incoming message");
if ((donotify && unread > 0) || (open > 0) || (subs > 0)) {
notify(text->str, 5000, "Incoming message");
}
g_string_free(text, TRUE);
@@ -196,10 +193,10 @@ notify_remind(void)
}
}
static void
_notify(const char *const message, int timeout, const char *const category)
void
notify(const char *const message, int timeout, const char *const category)
{
#ifdef HAVE_LIBNOTIFY
#ifdef PROF_HAVE_LIBNOTIFY
log_debug("Attempting notification: %s", message);
if (notify_is_initted()) {
log_debug("Reinitialising libnotify");
@@ -251,7 +248,7 @@ _notify(const char *const message, int timeout, const char *const category)
Shell_NotifyIcon(NIM_MODIFY, &nid);
#endif
#ifdef HAVE_OSXNOTIFY
#ifdef PROF_HAVE_OSXNOTIFY
GString *notify_command = g_string_new("terminal-notifier -title \"Profanity\" -message '");
char *escaped_single = str_replace(message, "'", "'\\''");

View File

@@ -32,15 +32,15 @@
*
*/
#include "config.h"
#include "prof_config.h"
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif

View File

@@ -36,7 +36,7 @@
#include <string.h>
#include <assert.h>
#include "config.h"
#include "prof_config.h"
#include "common.h"
#include "config/theme.h"

View File

@@ -35,12 +35,12 @@
#ifndef UI_UI_H
#define UI_UI_H
#include "config.h"
#include "prof_config.h"
#include "command/commands.h"
#include "ui/win_types.h"
#include "muc.h"
#ifdef HAVE_LIBOTR
#ifdef PROF_HAVE_LIBOTR
#include "otr/otr.h"
#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_offline(ProfChatWin *chatwin, char *resource, char *status);
char* chatwin_get_string(ProfChatWin *chatwin);
#ifdef HAVE_LIBOTR
#ifdef PROF_HAVE_LIBOTR
void chatwin_otr_secured(ProfChatWin *chatwin, gboolean trusted);
void chatwin_otr_unsecured(ProfChatWin *chatwin);
void chatwin_otr_trust(ProfChatWin *chatwin);
@@ -343,6 +342,7 @@ ProfWin* win_create_chat(const char *const barejid);
ProfWin* win_create_muc(const char *const roomjid);
ProfWin* win_create_muc_config(const char *const title, DataForm *form);
ProfWin* win_create_private(const char *const fulljid);
ProfWin* win_create_plugin(const char *const tag);
void win_update_virtual(ProfWin *window);
void win_free(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_remind(void);
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);
#endif

View File

@@ -35,13 +35,13 @@
#ifndef UI_WIN_TYPES_H
#define UI_WIN_TYPES_H
#include "config.h"
#include "prof_config.h"
#include <wchar.h>
#include <glib.h>
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif
@@ -55,6 +55,7 @@
#define PROFPRIVATEWIN_MEMCHECK 77437483
#define PROFCONFWIN_MEMCHECK 64334685
#define PROFXMLWIN_MEMCHECK 87333463
#define PROFPLUGINWIN_MEMCHECK 43434777
typedef enum {
LAYOUT_SIMPLE,
@@ -86,7 +87,8 @@ typedef enum {
WIN_MUC,
WIN_MUC_CONFIG,
WIN_PRIVATE,
WIN_XML
WIN_XML,
WIN_PLUGIN
} win_type_t;
typedef struct prof_win_t {
@@ -143,4 +145,10 @@ typedef struct prof_xml_win_t {
unsigned long memcheck;
} ProfXMLWin;
typedef struct prof_plugin_win_t {
ProfWin super;
char *tag;
unsigned long memcheck;
} ProfPluginWin;
#endif

View File

@@ -32,7 +32,7 @@
*
*/
#include "config.h"
#include "prof_config.h"
#include <stdlib.h>
#include <string.h>
@@ -41,9 +41,9 @@
#include <wchar.h>
#include <glib.h>
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif
@@ -237,6 +237,20 @@ win_create_xmlconsole(void)
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*
win_get_title(ProfWin *window)
{
@@ -287,6 +301,11 @@ win_get_title(ProfWin *window)
if (window->type == WIN_XML) {
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;
}
@@ -327,6 +346,15 @@ win_get_string(ProfWin *window)
ProfXMLWin *xmlwin = (ProfXMLWin*)window;
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:
return NULL;
}

View File

@@ -35,7 +35,7 @@
#ifndef UI_WINDOW_H
#define UI_WINDOW_H
#include "config.h"
#include "prof_config.h"
#include <wchar.h>
@@ -46,9 +46,9 @@
#include "xmpp/xmpp.h"
#include "chat_state.h"
#ifdef HAVE_NCURSESW_NCURSES_H
#ifdef PROF_HAVE_NCURSESW_NCURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
#elif PROF_HAVE_NCURSES_H
#include <ncurses.h>
#endif