1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-06-16 21:35:24 +00:00

Merge branch 'master' into plugins

Conflicts:
	.travis.yml
This commit is contained in:
James Booth 2016-09-03 23:11:42 +01:00
commit c225d24b42
16 changed files with 220 additions and 55 deletions

View File

@ -32,5 +32,4 @@ install:
- sudo make install
- cd ..
- rm -rf stabber
- ./bootstrap.sh
script: ./configure --disable-ruby-plugins --enable-python-plugins --enable-c-plugins --disable-lua-plugins && make && make check

BIN
core Normal file

Binary file not shown.

View File

@ -157,11 +157,11 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char *const msg, const char *const oo
// OTR supported, PGP unsupported
#ifdef HAVE_LIBOTR
#ifndef HAVE_LIBGPGME
gboolean handled = otr_on_message_send(chatwin, plugin_msg);
gboolean handled = otr_on_message_send(chatwin, plugin_msg, request_receipt);
if (!handled) {
char *id = message_send_chat(chatwin->barejid, plugin_msg, oob_url);
char *id = message_send_chat(chatwin->barejid, plugin_msg, oob_url, request_receipt);
chat_log_msg_out(chatwin->barejid, plugin_msg);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN, request_receipt);
free(id);
}
@ -175,14 +175,14 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char *const msg, const char *const oo
#ifndef HAVE_LIBOTR
#ifdef HAVE_LIBGPGME
if (chatwin->pgp_send) {
char *id = message_send_chat_pgp(chatwin->barejid, plugin_msg);
char *id = message_send_chat_pgp(chatwin->barejid, plugin_msg, request_receipt);
chat_log_pgp_msg_out(chatwin->barejid, plugin_msg);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PGP);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PGP, request_receipt);
free(id);
} else {
char *id = message_send_chat(chatwin->barejid, plugin_msg, oob_url);
char *id = message_send_chat(chatwin->barejid, plugin_msg, oob_url, request_receipt);
chat_log_msg_out(chatwin->barejid, plugin_msg);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN, request_receipt);
free(id);
}
@ -195,9 +195,9 @@ cl_ev_send_msg(ProfChatWin *chatwin, const char *const msg, const char *const oo
// OTR unsupported, PGP unsupported
#ifndef HAVE_LIBOTR
#ifndef HAVE_LIBGPGME
char *id = message_send_chat(chatwin->barejid, plugin_msg, oob_url);
char *id = message_send_chat(chatwin->barejid, plugin_msg, oob_url, request_receipt);
chat_log_msg_out(chatwin->barejid, plugin_msg);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN);
chatwin_outgoing_msg(chatwin, plugin_msg, id, PROF_MSG_PLAIN, request_receipt);
free(id);
plugins_post_chat_message_send(chatwin->barejid, plugin_msg);

View File

@ -1082,3 +1082,25 @@ sv_ev_lastactivity_response(const char *const from, const int seconds, const cha
g_free(date_fmt);
jid_destroy(jidp);
}
void
sv_ev_bookmark_autojoin(Bookmark *bookmark)
{
char *nick = NULL;
if (bookmark->nick) {
nick = strdup(bookmark->nick);
} else {
char *account_name = session_get_account_name();
ProfAccount *account = accounts_get_account(account_name);
nick = strdup(account->muc_nick);
account_free(account);
}
log_debug("Autojoin %s with nick=%s", bookmark->barejid, nick);
if (!muc_active(bookmark->barejid)) {
presence_join_room(bookmark->barejid, nick, bookmark->password);
muc_join(bookmark->barejid, nick, bookmark->password, TRUE);
}
free(nick);
}

View File

@ -87,5 +87,6 @@ void sv_ev_roster_update(const char *const barejid, const char *const name,
void sv_ev_roster_received(void);
int sv_ev_certfail(const char *const errormsg, TLSCertificate *cert);
void sv_ev_lastactivity_response(const char *const from, const int seconds, const char *const msg);
void sv_ev_bookmark_autojoin(Bookmark *bookmark);
#endif

View File

@ -698,10 +698,10 @@ cons_show_bookmarks(const GList *list)
theme_item_t presence_colour = THEME_TEXT;
if (muc_active(item->jid)) {
if (muc_active(item->barejid)) {
presence_colour = THEME_ONLINE;
}
win_vprint(console, '-', 0, NULL, NO_EOL, presence_colour, "", " %s", item->jid);
win_vprint(console, '-', 0, NULL, NO_EOL, presence_colour, "", " %s", item->barejid);
if (item->nick) {
win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, presence_colour, "", "/%s", item->nick);
}
@ -711,8 +711,8 @@ cons_show_bookmarks(const GList *list)
if (item->password) {
win_print(console, '-', 0, NULL, NO_DATE | NO_EOL, presence_colour, "", " (private)");
}
if (muc_active(item->jid)) {
ProfWin *roomwin = (ProfWin*)wins_get_muc(item->jid);
if (muc_active(item->barejid)) {
ProfWin *roomwin = (ProfWin*)wins_get_muc(item->barejid);
if (roomwin) {
int num = wins_get_num(roomwin);
win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, presence_colour, "", " (win %d)", num);

View File

@ -38,6 +38,7 @@
#include <gtk/gtk.h>
#include <glib.h>
#include <glib/gstdio.h>
#include <stdlib.h>
#include "log.h"
#include "config/preferences.h"

View File

@ -103,7 +103,7 @@ bookmark_add(const char *jid, const char *nick, const char *password, const char
}
Bookmark *bookmark = malloc(sizeof(Bookmark));
bookmark->jid = strdup(jid);
bookmark->barejid = strdup(jid);
if (nick) {
bookmark->nick = strdup(nick);
} else {
@ -171,16 +171,16 @@ bookmark_join(const char *jid)
char *account_name = session_get_account_name();
ProfAccount *account = accounts_get_account(account_name);
if (!muc_active(bookmark->jid)) {
if (!muc_active(bookmark->barejid)) {
char *nick = bookmark->nick;
if (!nick) {
nick = account->muc_nick;
}
presence_join_room(bookmark->jid, nick, bookmark->password);
muc_join(bookmark->jid, nick, bookmark->password, FALSE);
presence_join_room(bookmark->barejid, nick, bookmark->password);
muc_join(bookmark->barejid, nick, bookmark->password, FALSE);
account_free(account);
} else if (muc_roster_complete(bookmark->jid)) {
ui_room_join(bookmark->jid, TRUE);
} else if (muc_roster_complete(bookmark->barejid)) {
ui_room_join(bookmark->barejid, TRUE);
account_free(account);
}
@ -259,13 +259,13 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
child = xmpp_stanza_get_next(child);
continue;
}
const char *jid = xmpp_stanza_get_attribute(child, STANZA_ATTR_JID);
if (!jid) {
const char *barejid = xmpp_stanza_get_attribute(child, STANZA_ATTR_JID);
if (!barejid) {
child = xmpp_stanza_get_next(child);
continue;
}
log_debug("Handle bookmark for %s", jid);
log_debug("Handle bookmark for %s", barejid);
char *nick = NULL;
xmpp_stanza_t *nick_st = xmpp_stanza_get_child_by_name(child, "nick");
@ -285,31 +285,16 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
autojoin_val = TRUE;
}
autocomplete_add(bookmark_ac, jid);
autocomplete_add(bookmark_ac, barejid);
Bookmark *bookmark = malloc(sizeof(Bookmark));
bookmark->jid = strdup(jid);
bookmark->barejid = strdup(barejid);
bookmark->nick = nick;
bookmark->password = password;
bookmark->autojoin = autojoin_val;
g_hash_table_insert(bookmarks, strdup(jid), bookmark);
g_hash_table_insert(bookmarks, strdup(barejid), bookmark);
if (autojoin_val) {
Jid *room_jid;
char *account_name = session_get_account_name();
ProfAccount *account = accounts_get_account(account_name);
if (nick == NULL) {
nick = account->muc_nick;
}
log_debug("Autojoin %s with nick=%s", jid, nick);
room_jid = jid_create_from_bare_and_resource(jid, nick);
if (!muc_active(room_jid->barejid)) {
presence_join_room(jid, nick, password);
muc_join(jid, nick, password, TRUE);
}
jid_destroy(room_jid);
account_free(account);
sv_ev_bookmark_autojoin(bookmark);
}
child = xmpp_stanza_get_next(child);
@ -325,7 +310,7 @@ _bookmark_destroy(Bookmark *bookmark)
return;
}
free(bookmark->jid);
free(bookmark->barejid);
free(bookmark->nick);
free(bookmark->password);
free(bookmark);
@ -354,9 +339,9 @@ _send_bookmarks(void)
Bookmark *bookmark = curr->data;
xmpp_stanza_t *conference = xmpp_stanza_new(ctx);
xmpp_stanza_set_name(conference, STANZA_NAME_CONFERENCE);
xmpp_stanza_set_attribute(conference, STANZA_ATTR_JID, bookmark->jid);
xmpp_stanza_set_attribute(conference, STANZA_ATTR_JID, bookmark->barejid);
Jid *jidp = jid_create(bookmark->jid);
Jid *jidp = jid_create(bookmark->barejid);
if (jidp->localpart) {
xmpp_stanza_set_attribute(conference, STANZA_ATTR_NAME, jidp->localpart);
}

View File

@ -264,8 +264,8 @@ iq_autoping_check(void)
unsigned long seconds_elapsed = elapsed * 1.0;
gint timeout = prefs_get_autoping_timeout();
if (timeout > 0 && seconds_elapsed >= timeout) {
cons_show("Autoping response timed out afer %u seconds.", timeout);
log_debug("Autoping check: timed out afer %u seconds, disconnecting", timeout);
cons_show("Autoping response timed out after %u seconds.", timeout);
log_debug("Autoping check: timed out after %u seconds, disconnecting", timeout);
session_autoping_fail();
autoping_wait = FALSE;
g_timer_destroy(autoping_time);

View File

@ -686,6 +686,11 @@ _handle_carbons(xmpp_stanza_t *const stanza)
return TRUE;
}
if (g_strcmp0(name, "private") == 0) {
log_info("Carbon received with private element.");
return FALSE;
}
if ((g_strcmp0(name, "received") != 0) && (g_strcmp0(name, "sent") != 0)) {
log_warning("Carbon received with unrecognised stanza name: %s", name);
return TRUE;

View File

@ -78,7 +78,7 @@ typedef enum {
} jabber_invite_t;
typedef struct bookmark_t {
char *jid;
char *barejid;
char *nick;
char *password;
gboolean autojoin;

View File

@ -71,6 +71,7 @@ int main(int argc, char* argv[]) {
PROF_FUNC_TEST(send_disable_carbons),
PROF_FUNC_TEST(receive_carbon),
PROF_FUNC_TEST(receive_self_carbon),
PROF_FUNC_TEST(receive_private_carbon),
PROF_FUNC_TEST(send_receipt_request),
PROF_FUNC_TEST(send_receipt_on_request),

View File

@ -118,3 +118,33 @@ receive_self_carbon(void **state)
assert_true(prof_output_regex("me: .+self sent carbon"));
}
void
receive_private_carbon(void **state)
{
prof_input("/carbons on");
prof_connect();
assert_true(stbbr_received(
"<iq id='*' type='set'><enable xmlns='urn:xmpp:carbons:2'/></iq>"
));
stbbr_send(
"<presence to='stabber@localhost' from='buddy1@localhost/mobile'>"
"<priority>10</priority>"
"<status>On my mobile</status>"
"</presence>"
);
assert_true(prof_output_exact("Buddy1 (mobile) is online, \"On my mobile\""));
prof_input("/msg Buddy1");
assert_true(prof_output_exact("unencrypted"));
stbbr_send(
"<message type='chat' to='stabber@localhost/profanity' from='buddy1@localhost/mobile'>"
"<body>Private carbon</body>"
"<private xmlns='urn:xmpp:carbons:2'/>"
"</message>"
);
assert_true(prof_output_regex("Buddy1/mobile: .+Private carbon"));
}

View File

@ -3,4 +3,5 @@ void connect_with_carbons_enabled(void **state);
void send_disable_carbons(void **state);
void receive_carbon(void **state);
void receive_self_carbon(void **state);
void receive_private_carbon(void **state);

View File

@ -62,7 +62,7 @@ void cmd_bookmark_shows_usage_when_no_args(void **state)
static void _free_bookmark(Bookmark *bookmark)
{
free(bookmark->jid);
free(bookmark->barejid);
free(bookmark->nick);
free(bookmark);
}
@ -70,7 +70,7 @@ static void _free_bookmark(Bookmark *bookmark)
static gboolean
_cmp_bookmark(Bookmark *bm1, Bookmark *bm2)
{
if (strcmp(bm1->jid, bm2->jid) != 0) {
if (strcmp(bm1->barejid, bm2->barejid) != 0) {
return FALSE;
}
if (strcmp(bm1->nick, bm2->nick) != 0) {
@ -91,23 +91,23 @@ void cmd_bookmark_list_shows_bookmarks(void **state)
window.type = WIN_CONSOLE;
Bookmark *bm1 = malloc(sizeof(Bookmark));
bm1->jid = strdup("room1@conf.org");
bm1->barejid = strdup("room1@conf.org");
bm1->nick = strdup("bob");
bm1->autojoin = FALSE;
Bookmark *bm2 = malloc(sizeof(Bookmark));
bm2->jid = strdup("room2@conf.org");
bm2->barejid = strdup("room2@conf.org");
bm2->nick = strdup("steve");
bm2->autojoin = TRUE;
Bookmark *bm3 = malloc(sizeof(Bookmark));
bm3->jid = strdup("room3@conf.org");
bm3->barejid = strdup("room3@conf.org");
bm3->nick = strdup("dave");
bm3->autojoin = TRUE;
Bookmark *bm4 = malloc(sizeof(Bookmark));
bm4->jid = strdup("room4@conf.org");
bm4->barejid = strdup("room4@conf.org");
bm4->nick = strdup("james");
bm4->autojoin = FALSE;
Bookmark *bm5 = malloc(sizeof(Bookmark));
bm5->jid = strdup("room5@conf.org");
bm5->barejid = strdup("room5@conf.org");
bm5->nick = strdup("mike");
bm5->autojoin = FALSE;

120
travis-build.sh Executable file
View File

@ -0,0 +1,120 @@
#!/bin/bash
error_handler()
{
ERR_CODE=$?
echo
echo "Error $ERR_CODE with command '$BASH_COMMAND' on line ${BASH_LINENO[0]}. Exiting."
echo
exit $ERR_CODE
}
trap error_handler ERR
./bootstrap.sh
echo
echo "--> Building with ./configure --enable-notifications --enable-icons --enable-otr --enable-pgp --enable-plugins --enable-c-plugins --enable-python-plugins --with-xscreensaver"
echo
./configure --enable-notifications --enable-icons --enable-otr --enable-pgp --enable-plugins --enable-c-plugins --enable-python-plugins --with-xscreensaver
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-notifications --disable-icons --disable-otr --disable-pgp --disable-plugins --disable-c-plugins --disable-python-plugins --without-xscreensaver"
echo
./configure --disable-notifications --disable-icons --disable-otr --disable-pgp --disable-plugins --disable-c-plugins --disable-python-plugins --without-xscreensaver
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-notifications"
echo
./configure --disable-notifications
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-icons"
echo
./configure --disable-icons
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-otr"
echo
./configure --disable-otr
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-pgp"
echo
./configure --disable-pgp
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-pgp --disable-otr"
echo
./configure --disable-pgp --disable-otr
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-plugins"
echo
./configure --disable-plugins
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-python-plugins"
echo
./configure --disable-python-plugins
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-c-plugins"
echo
./configure --disable-c-plugins
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --disable-c-plugins --disable-python-plugins"
echo
./configure --disable-c-plugins --disable-python-plugins
make
./profanity -v
make clean
echo
echo "--> Building with ./configure --without-xscreensaver"
echo
./configure --without-xscreensaver
make
./profanity -v
make clean
echo
echo "--> Building with ./configure"
echo
./configure
make
make check
./profanity -v
make clean