2012-10-21 19:02:20 +00:00
/*
2013-04-21 16:33:12 +00:00
* core . c
2012-02-20 20:07:38 +00:00
*
2015-02-10 23:16:09 +00:00
* Copyright ( C ) 2012 - 2015 James Booth < boothj5 @ gmail . com >
2012-10-21 19:02:20 +00:00
*
2012-02-20 20:07:38 +00:00
* 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/>.
*
2014-08-24 19:57:39 +00:00
* 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 .
*
2012-02-20 20:07:38 +00:00
*/
2012-08-26 00:50:50 +00:00
2012-07-01 23:58:35 +00:00
# include "config.h"
2012-02-20 20:07:38 +00:00
2013-09-17 00:28:35 +00:00
# ifdef HAVE_GIT_VERSION
2014-03-06 00:06:22 +00:00
# include "gitversion.h"
2013-09-17 00:28:35 +00:00
# endif
2012-09-10 22:11:24 +00:00
# include <stdlib.h>
2012-02-08 22:26:43 +00:00
# include <string.h>
2014-12-18 23:57:19 +00:00
# include <assert.h>
2015-01-31 18:02:42 +00:00
# include <sys/ioctl.h>
# include <unistd.h>
2012-11-30 21:26:28 +00:00
# ifdef HAVE_LIBXSS
# include <X11/extensions/scrnsaver.h>
# endif
2012-05-09 23:30:03 +00:00
# include <glib.h>
2013-01-02 20:27:37 +00:00
# ifdef HAVE_NCURSESW_NCURSES_H
# include <ncursesw/ncurses.h>
2013-01-04 00:35:54 +00:00
# elif HAVE_NCURSES_H
# include <ncurses.h>
2012-09-08 15:51:09 +00:00
# endif
2012-05-04 00:00:01 +00:00
2012-11-08 22:39:38 +00:00
# include "chat_session.h"
2013-02-02 21:43:59 +00:00
# include "command/command.h"
2013-01-12 01:44:21 +00:00
# include "common.h"
2013-02-02 21:59:29 +00:00
# include "config/preferences.h"
# include "config/theme.h"
2012-05-04 00:00:01 +00:00
# include "contact.h"
2013-12-14 15:34:17 +00:00
# include "roster_list.h"
2013-01-12 23:10:56 +00:00
# include "jid.h"
2012-08-21 23:30:24 +00:00
# include "log.h"
2013-01-12 01:01:39 +00:00
# include "muc.h"
2014-05-19 19:41:19 +00:00
# ifdef HAVE_LIBOTR
2014-02-12 22:19:21 +00:00
# include "otr/otr.h"
2014-05-19 19:41:19 +00:00
# endif
2013-02-02 20:55:58 +00:00
# include "ui/ui.h"
2014-04-07 19:00:11 +00:00
# include "ui/titlebar.h"
2014-04-07 20:12:30 +00:00
# include "ui/statusbar.h"
2014-04-07 20:50:28 +00:00
# include "ui/inputwin.h"
2013-02-02 20:55:58 +00:00
# include "ui/window.h"
2013-08-20 22:08:21 +00:00
# include "ui/windows.h"
2013-05-06 22:04:46 +00:00
# include "xmpp/xmpp.h"
2012-02-05 23:08:15 +00:00
2012-12-11 23:34:15 +00:00
static char * win_title ;
2015-01-15 22:21:24 +00:00
2015-01-15 13:22:54 +00:00
static int inp_size ;
2012-12-11 23:34:15 +00:00
2015-02-04 23:35:28 +00:00
static gboolean perform_resize = FALSE ;
2012-11-30 21:26:28 +00:00
# ifdef HAVE_LIBXSS
static Display * display ;
# endif
2012-12-01 18:39:34 +00:00
static GTimer * ui_idle_time ;
2015-01-30 23:28:02 +00:00
//static void _win_handle_switch(const wint_t ch);
2014-12-10 21:49:21 +00:00
static void _win_show_history ( int win_index , const char * const contact ) ;
2014-04-05 23:47:14 +00:00
static void _ui_draw_term_title ( void ) ;
2012-07-01 23:58:35 +00:00
2014-12-22 22:13:42 +00:00
void
ui_init ( void )
2012-02-05 23:29:09 +00:00
{
2012-08-25 23:54:18 +00:00
log_info ( " Initialising UI " ) ;
2012-02-05 23:29:09 +00:00
initscr ( ) ;
2015-02-02 21:27:58 +00:00
nonl ( ) ;
cbreak ( ) ;
noecho ( ) ;
2012-02-05 23:29:09 +00:00
keypad ( stdscr , TRUE ) ;
2013-02-03 02:35:04 +00:00
if ( prefs_get_boolean ( PREF_MOUSE ) ) {
2013-01-17 19:40:55 +00:00
mousemask ( ALL_MOUSE_EVENTS , NULL ) ;
mouseinterval ( 5 ) ;
}
2012-11-26 00:01:34 +00:00
ui_load_colours ( ) ;
2012-11-21 22:33:07 +00:00
refresh ( ) ;
create_title_bar ( ) ;
create_status_bar ( ) ;
2013-08-27 23:50:15 +00:00
status_bar_active ( 1 ) ;
2012-11-21 22:33:07 +00:00
create_input_window ( ) ;
2013-08-20 22:08:21 +00:00
wins_init ( ) ;
2015-01-15 00:42:40 +00:00
notifier_initialise ( ) ;
2013-04-20 20:42:39 +00:00
cons_about ( ) ;
2012-11-30 21:26:28 +00:00
# ifdef HAVE_LIBXSS
display = XOpenDisplay ( 0 ) ;
# endif
2012-12-01 18:39:34 +00:00
ui_idle_time = g_timer_new ( ) ;
2015-01-15 13:22:54 +00:00
inp_size = 0 ;
2014-04-06 20:06:50 +00:00
ProfWin * window = wins_get_current ( ) ;
win_update_virtual ( window ) ;
2012-11-21 22:33:07 +00:00
}
2015-02-04 23:35:28 +00:00
void
ui_sigwinch_handler ( int sig )
{
perform_resize = TRUE ;
}
2014-12-22 22:13:42 +00:00
void
ui_update ( void )
2012-02-13 01:25:47 +00:00
{
2014-09-01 18:14:52 +00:00
ProfWin * current = wins_get_current ( ) ;
2014-12-16 01:39:47 +00:00
if ( current - > layout - > paged = = 0 ) {
2014-09-01 18:14:52 +00:00
win_move_to_end ( current ) ;
}
2014-09-16 23:22:55 +00:00
win_update_virtual ( current ) ;
2015-01-12 00:43:42 +00:00
if ( prefs_get_boolean ( PREF_TITLEBAR_SHOW ) ) {
2014-04-05 23:47:14 +00:00
_ui_draw_term_title ( ) ;
2014-04-03 20:46:43 +00:00
}
2014-04-01 20:52:04 +00:00
title_bar_update_virtual ( ) ;
status_bar_update_virtual ( ) ;
2012-12-11 23:34:15 +00:00
inp_put_back ( ) ;
2014-02-02 23:56:50 +00:00
doupdate ( ) ;
2015-02-04 23:35:28 +00:00
if ( perform_resize ) {
signal ( SIGWINCH , SIG_IGN ) ;
ui_resize ( ) ;
perform_resize = FALSE ;
signal ( SIGWINCH , ui_sigwinch_handler ) ;
}
2012-12-11 23:34:15 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_about ( void )
2014-04-07 20:12:30 +00:00
{
cons_show ( " " ) ;
cons_about ( ) ;
}
2014-12-22 22:13:42 +00:00
unsigned long
ui_get_idle_time ( void )
2012-11-30 21:26:28 +00:00
{
2013-01-05 00:38:50 +00:00
// if compiled with libxss, get the x sessions idle time
2012-12-01 18:39:34 +00:00
# ifdef HAVE_LIBXSS
2012-11-30 21:26:28 +00:00
XScreenSaverInfo * info = XScreenSaverAllocInfo ( ) ;
2012-12-19 21:34:24 +00:00
if ( info ! = NULL & & display ! = NULL ) {
XScreenSaverQueryInfo ( display , DefaultRootWindow ( display ) , info ) ;
unsigned long result = info - > idle ;
XFree ( info ) ;
return result ;
}
2014-06-24 21:23:53 +00:00
if ( info ! = NULL ) {
XFree ( info ) ;
}
2013-01-05 01:14:18 +00:00
// if no libxss or xss idle time failed, use profanity idle time
2013-01-04 07:54:17 +00:00
# endif
2012-12-01 18:47:50 +00:00
gdouble seconds_elapsed = g_timer_elapsed ( ui_idle_time , NULL ) ;
2012-12-01 18:39:34 +00:00
unsigned long ms_elapsed = seconds_elapsed * 1000.0 ;
return ms_elapsed ;
}
2014-12-22 22:13:42 +00:00
void
ui_reset_idle_time ( void )
2012-12-01 18:39:34 +00:00
{
g_timer_start ( ui_idle_time ) ;
}
2012-11-30 21:26:28 +00:00
2014-12-22 22:13:42 +00:00
void
ui_close ( void )
2012-02-07 00:08:59 +00:00
{
2013-04-21 19:17:06 +00:00
notifier_uninit ( ) ;
2013-08-26 16:47:29 +00:00
wins_destroy ( ) ;
2015-01-30 23:28:02 +00:00
inp_close ( ) ;
2012-02-07 00:08:59 +00:00
endwin ( ) ;
}
2015-02-05 00:58:23 +00:00
char *
2015-01-15 22:21:24 +00:00
ui_readline ( void )
2014-04-07 20:50:28 +00:00
{
2015-01-30 23:28:02 +00:00
return inp_readline ( ) ;
2015-01-31 22:00:22 +00:00
}
void
ui_page_up ( void )
{
ProfWin * current = wins_get_current ( ) ;
win_page_up ( current ) ;
}
void
ui_page_down ( void )
{
ProfWin * current = wins_get_current ( ) ;
win_page_down ( current ) ;
}
void
ui_subwin_page_up ( void )
{
ProfWin * current = wins_get_current ( ) ;
win_sub_page_up ( current ) ;
}
void
ui_subwin_page_down ( void )
{
ProfWin * current = wins_get_current ( ) ;
win_sub_page_down ( current ) ;
2014-04-07 20:50:28 +00:00
}
2014-12-22 22:13:42 +00:00
void
2015-01-16 22:50:40 +00:00
ui_input_clear ( void )
2014-04-07 20:50:28 +00:00
{
2015-01-20 00:09:47 +00:00
inp_win_clear ( ) ;
2014-04-07 20:50:28 +00:00
}
2014-12-22 22:13:42 +00:00
void
2015-01-08 22:43:11 +00:00
ui_input_nonblocking ( gboolean reset )
2014-04-07 20:50:28 +00:00
{
2015-01-31 01:11:41 +00:00
inp_nonblocking ( reset ) ;
2014-04-07 20:50:28 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_resize ( void )
2012-04-17 22:28:21 +00:00
{
2015-01-31 18:02:42 +00:00
struct winsize w ;
ioctl ( STDOUT_FILENO , TIOCGWINSZ , & w ) ;
2014-07-18 23:39:49 +00:00
erase ( ) ;
2015-01-31 18:02:42 +00:00
resizeterm ( w . ws_row , w . ws_col ) ;
2014-07-18 23:39:49 +00:00
refresh ( ) ;
2015-01-31 18:02:42 +00:00
log_info ( " Resizing UI " ) ;
2012-04-20 00:48:42 +00:00
title_bar_resize ( ) ;
2013-08-20 22:08:21 +00:00
wins_resize_all ( ) ;
2014-07-18 22:17:42 +00:00
status_bar_resize ( ) ;
2014-11-19 16:32:26 +00:00
inp_win_resize ( ) ;
2014-04-06 20:06:50 +00:00
ProfWin * window = wins_get_current ( ) ;
win_update_virtual ( window ) ;
2012-04-17 22:28:21 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_redraw ( void )
2014-11-16 21:56:19 +00:00
{
title_bar_resize ( ) ;
wins_resize_all ( ) ;
status_bar_resize ( ) ;
2014-11-19 16:32:26 +00:00
inp_win_resize ( ) ;
2014-11-16 21:56:19 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_load_colours ( void )
2012-11-26 00:01:34 +00:00
{
if ( has_colors ( ) ) {
use_default_colors ( ) ;
start_color ( ) ;
theme_init_colours ( ) ;
}
}
2014-12-22 22:13:42 +00:00
gboolean
ui_win_exists ( int index )
2013-05-12 21:57:36 +00:00
{
2013-08-20 22:08:21 +00:00
ProfWin * window = wins_get_by_num ( index ) ;
return ( window ! = NULL ) ;
2013-05-12 21:57:36 +00:00
}
2014-12-22 22:13:42 +00:00
gboolean
ui_xmlconsole_exists ( void )
2014-04-15 12:16:32 +00:00
{
2014-12-22 00:28:03 +00:00
ProfXMLWin * xmlwin = wins_get_xmlconsole ( ) ;
if ( xmlwin ) {
return TRUE ;
} else {
return FALSE ;
}
2014-04-15 12:16:32 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_handle_stanza ( const char * const msg )
2014-04-15 00:08:41 +00:00
{
2014-04-15 12:16:32 +00:00
if ( ui_xmlconsole_exists ( ) ) {
2014-12-22 00:28:03 +00:00
ProfXMLWin * xmlconsole = wins_get_xmlconsole ( ) ;
ProfWin * window = ( ProfWin * ) xmlconsole ;
2014-04-15 22:45:17 +00:00
2014-04-15 12:16:32 +00:00
if ( g_str_has_prefix ( msg , " SENT: " ) ) {
2014-12-22 00:28:03 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " SENT: " ) ;
win_save_print ( window , ' - ' , NULL , 0 , THEME_ONLINE , " " , & msg [ 6 ] ) ;
win_save_print ( window , ' - ' , NULL , 0 , THEME_ONLINE , " " , " " ) ;
2014-04-15 22:45:17 +00:00
} else if ( g_str_has_prefix ( msg , " RECV: " ) ) {
2014-12-22 00:28:03 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " RECV: " ) ;
win_save_print ( window , ' - ' , NULL , 0 , THEME_AWAY , " " , & msg [ 6 ] ) ;
win_save_print ( window , ' - ' , NULL , 0 , THEME_AWAY , " " , " " ) ;
2014-04-15 22:45:17 +00:00
}
2014-04-15 00:08:41 +00:00
}
}
2015-01-11 20:20:17 +00:00
gboolean
ui_chat_win_exists ( const char * const barejid )
{
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
return ( chatwin ! = NULL ) ;
}
2014-12-22 22:13:42 +00:00
void
2015-01-11 23:04:22 +00:00
ui_contact_typing ( const char * const barejid , const char * const resource )
2012-11-26 00:01:34 +00:00
{
2014-12-18 23:57:19 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) chatwin ;
2015-01-11 23:04:22 +00:00
ChatSession * session = chat_session_get ( barejid ) ;
2012-11-26 00:01:34 +00:00
2013-02-03 02:35:04 +00:00
if ( prefs_get_boolean ( PREF_INTYPE ) ) {
2012-11-26 00:01:34 +00:00
// no chat window for user
2014-12-18 23:57:19 +00:00
if ( chatwin = = NULL ) {
2013-05-20 21:51:35 +00:00
cons_show_typing ( barejid ) ;
2012-11-26 00:01:34 +00:00
// have chat window but not currently in it
2014-12-21 19:40:15 +00:00
} else if ( ! wins_is_current ( window ) ) {
2013-05-20 21:51:35 +00:00
cons_show_typing ( barejid ) ;
2012-11-26 00:01:34 +00:00
2015-01-11 23:04:22 +00:00
// in chat window with user, no session or session with resource
} else if ( ! session | | ( session & & g_strcmp0 ( session - > resource , resource ) = = 0 ) ) {
2012-11-26 00:01:34 +00:00
title_bar_set_typing ( TRUE ) ;
2014-12-21 19:40:15 +00:00
int num = wins_get_num ( window ) ;
2013-08-20 22:08:21 +00:00
status_bar_active ( num ) ;
2012-11-26 00:01:34 +00:00
}
}
2013-05-20 21:51:35 +00:00
if ( prefs_get_boolean ( PREF_NOTIFY_TYPING ) ) {
2014-08-21 21:34:50 +00:00
gboolean is_current = FALSE ;
2014-12-21 19:40:15 +00:00
if ( window ) {
is_current = wins_is_current ( window ) ;
2014-08-21 21:34:50 +00:00
}
2014-05-24 20:13:33 +00:00
if ( ! is_current | | ( is_current & & prefs_get_boolean ( PREF_NOTIFY_TYPING_CURRENT ) ) ) {
PContact contact = roster_get_contact ( barejid ) ;
char const * display_usr = NULL ;
if ( p_contact_name ( contact ) ! = NULL ) {
display_usr = p_contact_name ( contact ) ;
} else {
display_usr = barejid ;
}
notify_typing ( display_usr ) ;
2013-05-20 21:51:35 +00:00
}
}
2012-11-26 00:01:34 +00:00
}
2014-12-22 22:13:42 +00:00
GSList *
2014-12-29 01:17:59 +00:00
ui_get_chat_recipients ( void )
2012-11-08 22:39:38 +00:00
{
2013-08-20 22:08:21 +00:00
GSList * recipients = wins_get_chat_recipients ( ) ;
2013-10-06 23:51:00 +00:00
return recipients ;
2012-11-08 22:39:38 +00:00
}
2014-12-20 18:39:39 +00:00
ProfChatWin *
2014-12-22 22:13:42 +00:00
ui_get_current_chat ( void )
2014-12-20 18:39:39 +00:00
{
return wins_get_current_chat ( ) ;
}
2015-03-11 23:18:28 +00:00
void
ui_message_receipt ( const char * const barejid , const char * const id )
{
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
ProfWin * win = ( ProfWin * ) chatwin ;
GString * message = g_string_new ( " Message received: " ) ;
g_string_append ( message , id ) ;
win_save_println ( win , message - > str ) ;
g_string_free ( message , TRUE ) ;
}
}
2014-12-22 22:13:42 +00:00
void
2015-01-10 18:35:59 +00:00
ui_incoming_msg ( const char * const barejid , const char * const resource , const char * const message , GTimeVal * tv_stamp )
2012-02-26 18:26:38 +00:00
{
2013-04-27 21:02:20 +00:00
gboolean win_created = FALSE ;
2015-01-10 18:35:59 +00:00
GString * user = g_string_new ( " " ) ;
2013-08-03 11:27:07 +00:00
2014-12-10 22:23:33 +00:00
PContact contact = roster_get_contact ( barejid ) ;
if ( contact ! = NULL ) {
if ( p_contact_name ( contact ) ! = NULL ) {
2015-01-10 18:35:59 +00:00
g_string_append ( user , p_contact_name ( contact ) ) ;
2013-05-19 16:19:16 +00:00
} else {
2015-01-10 18:35:59 +00:00
g_string_append ( user , barejid ) ;
2013-05-19 16:19:16 +00:00
}
2014-12-10 22:23:33 +00:00
} else {
2015-01-10 19:10:10 +00:00
g_string_append ( user , barejid ) ;
2015-01-10 18:35:59 +00:00
}
2015-01-10 19:10:10 +00:00
if ( resource & & prefs_get_boolean ( PREF_RESOURCE_MESSAGE ) ) {
2015-01-10 18:35:59 +00:00
g_string_append ( user , " / " ) ;
g_string_append ( user , resource ) ;
2012-11-14 00:04:08 +00:00
}
2014-12-18 23:57:19 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin = = NULL ) {
ProfWin * window = wins_new_chat ( barejid ) ;
chatwin = ( ProfChatWin * ) window ;
2014-01-11 21:44:24 +00:00
# ifdef HAVE_LIBOTR
2014-12-10 22:23:33 +00:00
if ( otr_is_secure ( barejid ) ) {
2014-12-16 01:39:47 +00:00
chatwin - > is_otr = TRUE ;
2014-01-11 21:44:24 +00:00
}
# endif
2013-04-27 21:02:20 +00:00
win_created = TRUE ;
}
2012-03-01 00:34:54 +00:00
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) chatwin ;
int num = wins_get_num ( window ) ;
2013-08-27 22:38:25 +00:00
// currently viewing chat window with sender
2014-12-21 19:40:15 +00:00
if ( wins_is_current ( window ) ) {
2015-01-10 18:35:59 +00:00
win_print_incoming_message ( window , tv_stamp , user - > str , message ) ;
2013-08-27 22:38:25 +00:00
title_bar_set_typing ( FALSE ) ;
status_bar_active ( num ) ;
2012-11-08 22:14:41 +00:00
2013-08-27 22:38:25 +00:00
// not currently viewing chat window with sender
2012-11-24 23:58:10 +00:00
} else {
2013-08-27 22:38:25 +00:00
status_bar_new ( num ) ;
2015-01-10 18:35:59 +00:00
cons_show_incoming_message ( user - > str , num ) ;
2014-12-10 22:23:33 +00:00
if ( prefs_get_boolean ( PREF_FLASH ) ) {
2013-08-27 22:38:25 +00:00
flash ( ) ;
2014-12-10 22:23:33 +00:00
}
2013-08-27 22:38:25 +00:00
2014-12-21 23:14:01 +00:00
chatwin - > unread + + ;
2013-08-27 22:38:25 +00:00
if ( prefs_get_boolean ( PREF_CHLOG ) & & prefs_get_boolean ( PREF_HISTORY ) ) {
2014-12-10 22:23:33 +00:00
_win_show_history ( num , barejid ) ;
2013-08-27 22:38:25 +00:00
}
2012-11-24 23:58:10 +00:00
2013-10-06 18:16:20 +00:00
// show users status first, when receiving message via delayed delivery
if ( ( tv_stamp ! = NULL ) & & ( win_created ) ) {
2014-12-10 22:23:33 +00:00
PContact pcontact = roster_get_contact ( barejid ) ;
2013-10-06 18:16:20 +00:00
if ( pcontact ! = NULL ) {
2014-12-21 19:40:15 +00:00
win_show_contact ( window , pcontact ) ;
2013-10-06 18:16:20 +00:00
}
}
2015-01-10 18:35:59 +00:00
win_print_incoming_message ( window , tv_stamp , user - > str , message ) ;
2012-04-19 22:32:44 +00:00
}
2012-04-24 00:11:39 +00:00
2013-08-28 20:34:00 +00:00
int ui_index = num ;
2013-05-22 23:10:55 +00:00
if ( ui_index = = 10 ) {
ui_index = 0 ;
}
2014-12-10 22:23:33 +00:00
if ( prefs_get_boolean ( PREF_BEEP ) ) {
beep ( ) ;
}
if ( prefs_get_boolean ( PREF_NOTIFY_MESSAGE ) ) {
2014-12-21 19:40:15 +00:00
gboolean is_current = wins_is_current ( window ) ;
2014-12-10 22:23:33 +00:00
if ( ! is_current | | ( is_current & & prefs_get_boolean ( PREF_NOTIFY_MESSAGE_CURRENT ) ) ) {
if ( prefs_get_boolean ( PREF_NOTIFY_MESSAGE_TEXT ) ) {
2015-01-10 18:35:59 +00:00
notify_message ( user - > str , ui_index , message ) ;
2014-12-10 22:23:33 +00:00
} else {
2015-01-10 18:35:59 +00:00
notify_message ( user - > str , ui_index , NULL ) ;
2014-12-10 22:23:33 +00:00
}
}
}
2015-01-10 18:35:59 +00:00
g_string_free ( user , TRUE ) ;
2014-12-10 22:23:33 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_incoming_private_msg ( const char * const fulljid , const char * const message , GTimeVal * tv_stamp )
2014-12-10 22:23:33 +00:00
{
char * display_from = NULL ;
display_from = get_nick_from_full_jid ( fulljid ) ;
2014-12-18 23:57:19 +00:00
ProfPrivateWin * privatewin = wins_get_private ( fulljid ) ;
if ( privatewin = = NULL ) {
ProfWin * window = wins_new_private ( fulljid ) ;
privatewin = ( ProfPrivateWin * ) window ;
2014-12-10 22:23:33 +00:00
}
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) privatewin ;
int num = wins_get_num ( window ) ;
2014-12-10 22:23:33 +00:00
// currently viewing chat window with sender
2014-12-21 19:40:15 +00:00
if ( wins_is_current ( window ) ) {
win_print_incoming_message ( window , tv_stamp , display_from , message ) ;
2014-12-10 22:23:33 +00:00
title_bar_set_typing ( FALSE ) ;
status_bar_active ( num ) ;
// not currently viewing chat window with sender
} else {
status_bar_new ( num ) ;
cons_show_incoming_message ( display_from , num ) ;
if ( prefs_get_boolean ( PREF_FLASH ) ) {
flash ( ) ;
}
2014-12-21 23:14:01 +00:00
privatewin - > unread + + ;
2014-12-10 22:23:33 +00:00
if ( prefs_get_boolean ( PREF_CHLOG ) & & prefs_get_boolean ( PREF_HISTORY ) ) {
_win_show_history ( num , fulljid ) ;
}
2014-12-21 19:40:15 +00:00
win_print_incoming_message ( window , tv_stamp , display_from , message ) ;
2014-12-10 22:23:33 +00:00
}
int ui_index = num ;
if ( ui_index = = 10 ) {
ui_index = 0 ;
}
if ( prefs_get_boolean ( PREF_BEEP ) ) {
2012-04-24 00:24:54 +00:00
beep ( ) ;
2014-12-10 22:23:33 +00:00
}
2014-05-24 19:46:03 +00:00
if ( prefs_get_boolean ( PREF_NOTIFY_MESSAGE ) ) {
2014-12-21 19:40:15 +00:00
gboolean is_current = wins_is_current ( window ) ;
2014-05-24 19:46:03 +00:00
if ( ! is_current | | ( is_current & & prefs_get_boolean ( PREF_NOTIFY_MESSAGE_CURRENT ) ) ) {
2014-05-24 21:14:26 +00:00
if ( prefs_get_boolean ( PREF_NOTIFY_MESSAGE_TEXT ) ) {
notify_message ( display_from , ui_index , message ) ;
} else {
notify_message ( display_from , ui_index , NULL ) ;
}
2014-05-24 19:46:03 +00:00
}
}
2013-01-11 01:35:25 +00:00
2013-08-03 11:27:07 +00:00
free ( display_from ) ;
2012-02-07 00:08:59 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_roster_add ( const char * const barejid , const char * const name )
2013-06-01 23:20:22 +00:00
{
if ( name ! = NULL ) {
cons_show ( " Roster item added: %s (%s) " , barejid , name ) ;
} else {
cons_show ( " Roster item added: %s " , barejid ) ;
}
2014-12-16 23:00:05 +00:00
rosterwin_roster ( ) ;
2013-06-01 23:20:22 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_roster_remove ( const char * const barejid )
2013-06-01 23:24:22 +00:00
{
cons_show ( " Roster item removed: %s " , barejid ) ;
2014-12-16 23:00:05 +00:00
rosterwin_roster ( ) ;
2013-06-01 23:24:22 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_contact_already_in_group ( const char * const contact , const char * const group )
2013-06-23 15:29:42 +00:00
{
2013-06-23 15:35:13 +00:00
cons_show ( " %s already in group %s " , contact , group ) ;
2014-12-16 23:00:05 +00:00
rosterwin_roster ( ) ;
2013-06-23 15:35:13 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_contact_not_in_group ( const char * const contact , const char * const group )
2013-06-23 15:35:13 +00:00
{
cons_show ( " %s is not currently in group %s " , contact , group ) ;
2014-12-16 23:00:05 +00:00
rosterwin_roster ( ) ;
2013-06-23 15:29:42 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_group_added ( const char * const contact , const char * const group )
2013-06-23 16:38:30 +00:00
{
cons_show ( " %s added to group %s " , contact , group ) ;
2014-12-16 23:00:05 +00:00
rosterwin_roster ( ) ;
2013-06-23 16:38:30 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_group_removed ( const char * const contact , const char * const group )
2013-06-23 16:38:30 +00:00
{
cons_show ( " %s removed from group %s " , contact , group ) ;
2014-12-16 23:00:05 +00:00
rosterwin_roster ( ) ;
2013-06-23 16:38:30 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_auto_away ( void )
2014-04-07 19:41:06 +00:00
{
2014-06-17 23:32:36 +00:00
char * pref_autoaway_message = prefs_get_string ( PREF_AUTOAWAY_MESSAGE ) ;
if ( pref_autoaway_message ! = NULL ) {
2014-04-07 19:41:06 +00:00
int pri =
accounts_get_priority_for_presence_type ( jabber_get_account_name ( ) ,
RESOURCE_AWAY ) ;
cons_show ( " Idle for %d minutes, status set to away (priority %d), \" %s \" . " ,
2014-06-17 23:32:36 +00:00
prefs_get_autoaway_time ( ) , pri , pref_autoaway_message ) ;
2014-04-07 19:41:06 +00:00
title_bar_set_presence ( CONTACT_AWAY ) ;
} else {
int pri =
accounts_get_priority_for_presence_type ( jabber_get_account_name ( ) ,
RESOURCE_AWAY ) ;
cons_show ( " Idle for %d minutes, status set to away (priority %d). " ,
prefs_get_autoaway_time ( ) , pri ) ;
title_bar_set_presence ( CONTACT_AWAY ) ;
}
2014-06-17 23:32:36 +00:00
prefs_free_string ( pref_autoaway_message ) ;
2014-04-07 19:41:06 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_end_auto_away ( void )
2014-04-07 19:41:06 +00:00
{
int pri =
accounts_get_priority_for_presence_type ( jabber_get_account_name ( ) , RESOURCE_ONLINE ) ;
cons_show ( " No longer idle, status set to online (priority %d). " , pri ) ;
title_bar_set_presence ( CONTACT_ONLINE ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_titlebar_presence ( contact_presence_t presence )
2014-04-07 19:41:06 +00:00
{
title_bar_set_presence ( presence ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_handle_login_account_success ( ProfAccount * account )
2014-04-07 19:41:06 +00:00
{
resource_presence_t resource_presence = accounts_get_login_presence ( account - > name ) ;
contact_presence_t contact_presence = contact_presence_from_resource_presence ( resource_presence ) ;
cons_show_login_success ( account ) ;
title_bar_set_presence ( contact_presence ) ;
status_bar_print_message ( account - > jid ) ;
status_bar_update_virtual ( ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_update_presence ( const resource_presence_t resource_presence ,
2014-04-07 19:41:06 +00:00
const char * const message , const char * const show )
{
contact_presence_t contact_presence = contact_presence_from_resource_presence ( resource_presence ) ;
title_bar_set_presence ( contact_presence ) ;
gint priority = accounts_get_priority_for_presence_type ( jabber_get_account_name ( ) , resource_presence ) ;
if ( message ! = NULL ) {
cons_show ( " Status set to %s (priority %d), \" %s \" . " , show , priority , message ) ;
} else {
cons_show ( " Status set to %s (priority %d). " , show , priority ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_recipient_not_found ( const char * const recipient , const char * const err_msg )
2014-01-26 18:30:34 +00:00
{
2014-01-26 22:19:22 +00:00
// intended recipient was invalid chat room
2014-12-20 00:52:35 +00:00
ProfMucWin * mucwin = wins_get_muc ( recipient ) ;
if ( mucwin ) {
cons_show_error ( " Room %s not found: %s " , recipient , err_msg ) ;
2014-12-21 19:40:15 +00:00
win_save_vprint ( ( ProfWin * ) mucwin , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Room %s not found: %s " , recipient , err_msg ) ;
2014-12-20 00:52:35 +00:00
return ;
}
2014-01-26 18:30:34 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_handle_recipient_error ( const char * const recipient , const char * const err_msg )
2014-01-27 22:09:16 +00:00
{
// always show in console
2014-12-20 00:52:35 +00:00
cons_show_error ( " Error from %s: %s " , recipient , err_msg ) ;
2014-01-27 22:09:16 +00:00
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( recipient ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error from %s: %s " , recipient , err_msg ) ;
return ;
2014-01-27 22:09:16 +00:00
}
2014-12-20 00:52:35 +00:00
ProfMucWin * mucwin = wins_get_muc ( recipient ) ;
if ( mucwin ) {
win_save_vprint ( ( ProfWin * ) mucwin , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error from %s: %s " , recipient , err_msg ) ;
return ;
}
ProfPrivateWin * privatewin = wins_get_private ( recipient ) ;
if ( privatewin ) {
win_save_vprint ( ( ProfWin * ) privatewin , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error from %s: %s " , recipient , err_msg ) ;
return ;
}
2014-01-27 22:09:16 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_handle_error ( const char * const err_msg )
2014-01-27 22:09:16 +00:00
{
GString * msg = g_string_new ( " " ) ;
g_string_printf ( msg , " Error %s " , err_msg ) ;
cons_show_error ( msg - > str ) ;
g_string_free ( msg , TRUE ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_invalid_command_usage ( const char * const usage , void ( * setting_func ) ( void ) )
2014-04-09 21:05:31 +00:00
{
if ( setting_func ! = NULL ) {
cons_show ( " " ) ;
( * setting_func ) ( ) ;
cons_show ( " Usage: %s " , usage ) ;
} else {
cons_show ( " " ) ;
cons_show ( " Usage: %s " , usage ) ;
if ( ui_current_win_type ( ) = = WIN_CHAT ) {
char usage_cpy [ strlen ( usage ) + 8 ] ;
sprintf ( usage_cpy , " Usage: %s " , usage ) ;
ui_current_print_line ( usage_cpy ) ;
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_disconnected ( void )
2012-11-26 00:57:41 +00:00
{
2013-08-20 22:08:21 +00:00
wins_lost_connection ( ) ;
2014-01-16 18:13:22 +00:00
title_bar_set_presence ( CONTACT_OFFLINE ) ;
2013-02-03 23:06:06 +00:00
status_bar_clear_message ( ) ;
2014-04-01 20:52:04 +00:00
status_bar_update_virtual ( ) ;
2014-11-13 00:22:22 +00:00
ui_hide_roster ( ) ;
2012-10-18 15:18:44 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_close_connected_win ( int index )
2013-05-16 23:33:00 +00:00
{
2014-12-22 00:28:03 +00:00
ProfWin * window = wins_get_by_num ( index ) ;
if ( window ) {
if ( window - > type = = WIN_MUC ) {
ProfMucWin * mucwin = ( ProfMucWin * ) window ;
assert ( mucwin - > memcheck = = PROFMUCWIN_MEMCHECK ) ;
presence_leave_chat_room ( mucwin - > roomjid ) ;
} else if ( window - > type = = WIN_CHAT ) {
ProfChatWin * chatwin = ( ProfChatWin * ) window ;
assert ( chatwin - > memcheck = = PROFCHATWIN_MEMCHECK ) ;
2014-01-11 23:28:11 +00:00
# ifdef HAVE_LIBOTR
2014-12-22 00:28:03 +00:00
if ( chatwin - > is_otr ) {
otr_end_session ( chatwin - > barejid ) ;
}
2014-01-11 23:28:11 +00:00
# endif
2015-01-11 20:20:17 +00:00
chat_state_gone ( chatwin - > barejid , chatwin - > state ) ;
2015-01-08 00:57:25 +00:00
chat_session_remove ( chatwin - > barejid ) ;
2013-05-16 23:33:00 +00:00
}
}
}
2014-12-22 22:13:42 +00:00
int
ui_close_all_wins ( void )
2013-08-26 17:06:33 +00:00
{
2013-08-29 23:33:46 +00:00
int count = 0 ;
2013-08-26 17:06:33 +00:00
jabber_conn_status_t conn_status = jabber_get_connection_status ( ) ;
2013-08-29 23:33:46 +00:00
GList * win_nums = wins_get_nums ( ) ;
GList * curr = win_nums ;
while ( curr ! = NULL ) {
int num = GPOINTER_TO_INT ( curr - > data ) ;
2014-09-15 21:31:15 +00:00
if ( ( num ! = 1 ) & & ( ! ui_win_has_unsaved_form ( num ) ) ) {
2013-08-26 17:06:33 +00:00
if ( conn_status = = JABBER_CONNECTED ) {
2013-08-29 23:33:46 +00:00
ui_close_connected_win ( num ) ;
2013-08-26 17:06:33 +00:00
}
2013-08-29 23:33:46 +00:00
ui_close_win ( num ) ;
2013-08-26 17:06:33 +00:00
count + + ;
}
2013-08-29 23:33:46 +00:00
curr = g_list_next ( curr ) ;
2013-08-26 17:06:33 +00:00
}
2013-08-29 23:33:46 +00:00
g_list_free ( curr ) ;
g_list_free ( win_nums ) ;
2013-08-26 17:06:33 +00:00
return count ;
}
2014-12-22 22:13:42 +00:00
int
ui_close_read_wins ( void )
2013-08-26 17:06:33 +00:00
{
2013-08-29 23:33:46 +00:00
int count = 0 ;
2013-08-26 17:06:33 +00:00
jabber_conn_status_t conn_status = jabber_get_connection_status ( ) ;
2013-08-29 23:33:46 +00:00
GList * win_nums = wins_get_nums ( ) ;
GList * curr = win_nums ;
while ( curr ! = NULL ) {
int num = GPOINTER_TO_INT ( curr - > data ) ;
2014-09-15 21:31:15 +00:00
if ( ( num ! = 1 ) & & ( ui_win_unread ( num ) = = 0 ) & & ( ! ui_win_has_unsaved_form ( num ) ) ) {
2013-08-26 17:06:33 +00:00
if ( conn_status = = JABBER_CONNECTED ) {
2013-08-29 23:33:46 +00:00
ui_close_connected_win ( num ) ;
2013-08-26 17:06:33 +00:00
}
2013-08-29 23:33:46 +00:00
ui_close_win ( num ) ;
2013-08-26 17:06:33 +00:00
count + + ;
}
2013-08-29 23:33:46 +00:00
curr = g_list_next ( curr ) ;
2013-08-26 17:06:33 +00:00
}
2013-08-29 23:33:46 +00:00
g_list_free ( curr ) ;
g_list_free ( win_nums ) ;
2013-08-26 17:06:33 +00:00
return count ;
}
2014-12-22 22:13:42 +00:00
void
ui_redraw_all_room_rosters ( void )
2014-10-18 19:22:34 +00:00
{
GList * win_nums = wins_get_nums ( ) ;
GList * curr = win_nums ;
while ( curr ! = NULL ) {
int num = GPOINTER_TO_INT ( curr - > data ) ;
ProfWin * window = wins_get_by_num ( num ) ;
2014-12-16 01:39:47 +00:00
if ( window - > type = = WIN_MUC & & win_has_active_subwin ( window ) ) {
2014-12-18 23:57:19 +00:00
ProfMucWin * mucwin = ( ProfMucWin * ) window ;
assert ( mucwin - > memcheck = = PROFMUCWIN_MEMCHECK ) ;
occupantswin_occupants ( mucwin - > roomjid ) ;
2014-10-18 19:22:34 +00:00
}
curr = g_list_next ( curr ) ;
}
g_list_free ( curr ) ;
g_list_free ( win_nums ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_hide_all_room_rosters ( void )
2014-11-19 23:58:55 +00:00
{
GList * win_nums = wins_get_nums ( ) ;
GList * curr = win_nums ;
while ( curr ! = NULL ) {
int num = GPOINTER_TO_INT ( curr - > data ) ;
ProfWin * window = wins_get_by_num ( num ) ;
2014-12-16 01:39:47 +00:00
if ( window - > type = = WIN_MUC & & win_has_active_subwin ( window ) ) {
2014-12-18 23:57:19 +00:00
ProfMucWin * mucwin = ( ProfMucWin * ) window ;
assert ( mucwin - > memcheck = = PROFMUCWIN_MEMCHECK ) ;
ui_room_hide_occupants ( mucwin - > roomjid ) ;
2014-11-19 23:58:55 +00:00
}
curr = g_list_next ( curr ) ;
}
g_list_free ( curr ) ;
g_list_free ( win_nums ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_show_all_room_rosters ( void )
2014-11-19 23:58:55 +00:00
{
GList * win_nums = wins_get_nums ( ) ;
GList * curr = win_nums ;
while ( curr ! = NULL ) {
int num = GPOINTER_TO_INT ( curr - > data ) ;
ProfWin * window = wins_get_by_num ( num ) ;
2014-12-16 01:39:47 +00:00
if ( window - > type = = WIN_MUC & & ! win_has_active_subwin ( window ) ) {
2014-12-18 23:57:19 +00:00
ProfMucWin * mucwin = ( ProfMucWin * ) window ;
assert ( mucwin - > memcheck = = PROFMUCWIN_MEMCHECK ) ;
ui_room_show_occupants ( mucwin - > roomjid ) ;
2014-11-19 23:58:55 +00:00
}
curr = g_list_next ( curr ) ;
}
g_list_free ( curr ) ;
g_list_free ( win_nums ) ;
}
2014-12-22 22:13:42 +00:00
gboolean
ui_win_has_unsaved_form ( int num )
2014-09-15 21:31:15 +00:00
{
ProfWin * window = wins_get_by_num ( num ) ;
2014-12-22 00:01:43 +00:00
if ( window - > type = = WIN_MUC_CONFIG ) {
ProfMucConfWin * confwin = ( ProfMucConfWin * ) window ;
assert ( confwin - > memcheck = = PROFCONFWIN_MEMCHECK ) ;
return confwin - > form - > modified ;
} else {
2014-09-15 21:31:15 +00:00
return FALSE ;
}
}
2014-12-22 22:13:42 +00:00
gboolean
ui_switch_win ( const int i )
2012-11-26 00:57:41 +00:00
{
2014-04-01 22:54:26 +00:00
if ( ui_win_exists ( i ) ) {
2014-10-18 22:16:19 +00:00
ProfWin * old_current = wins_get_current ( ) ;
if ( old_current - > type = = WIN_MUC_CONFIG ) {
2014-12-16 01:39:47 +00:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) old_current ;
cmd_autocomplete_remove_form_fields ( confwin - > form ) ;
2014-10-18 22:16:19 +00:00
}
2014-04-01 22:54:26 +00:00
ProfWin * new_current = wins_get_by_num ( i ) ;
2014-10-18 22:16:19 +00:00
if ( new_current - > type = = WIN_MUC_CONFIG ) {
2014-12-16 01:39:47 +00:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) new_current ;
cmd_autocomplete_add_form_fields ( confwin - > form ) ;
2014-10-18 22:16:19 +00:00
}
2013-08-20 22:08:21 +00:00
wins_set_current_by_num ( i ) ;
2012-11-26 00:57:41 +00:00
2013-08-27 23:50:15 +00:00
if ( i = = 1 ) {
2014-01-16 18:04:25 +00:00
title_bar_console ( ) ;
2013-10-02 22:33:48 +00:00
status_bar_current ( 1 ) ;
2013-08-27 23:50:15 +00:00
status_bar_active ( 1 ) ;
2012-11-26 00:57:41 +00:00
} else {
2014-12-21 22:01:56 +00:00
title_bar_switch ( ) ;
2013-10-02 22:33:48 +00:00
status_bar_current ( i ) ;
2012-11-26 00:57:41 +00:00
status_bar_active ( i ) ;
}
2014-04-01 22:54:26 +00:00
return TRUE ;
} else {
return FALSE ;
2012-11-26 00:57:41 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_previous_win ( void )
2014-10-18 21:43:47 +00:00
{
2014-10-18 22:16:19 +00:00
ProfWin * old_current = wins_get_current ( ) ;
if ( old_current - > type = = WIN_MUC_CONFIG ) {
2014-12-16 01:39:47 +00:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) old_current ;
cmd_autocomplete_remove_form_fields ( confwin - > form ) ;
2014-10-18 22:16:19 +00:00
}
2014-10-18 21:43:47 +00:00
ProfWin * new_current = wins_get_previous ( ) ;
2014-10-18 22:16:19 +00:00
if ( new_current - > type = = WIN_MUC_CONFIG ) {
2014-12-16 01:39:47 +00:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) new_current ;
cmd_autocomplete_add_form_fields ( confwin - > form ) ;
2014-10-18 22:16:19 +00:00
}
2014-10-18 21:43:47 +00:00
int i = wins_get_num ( new_current ) ;
wins_set_current_by_num ( i ) ;
if ( i = = 1 ) {
title_bar_console ( ) ;
status_bar_current ( 1 ) ;
status_bar_active ( 1 ) ;
} else {
2014-12-21 22:01:56 +00:00
title_bar_switch ( ) ;
2014-10-18 21:43:47 +00:00
status_bar_current ( i ) ;
status_bar_active ( i ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_next_win ( void )
2013-09-25 23:25:04 +00:00
{
2014-10-18 22:16:19 +00:00
ProfWin * old_current = wins_get_current ( ) ;
if ( old_current - > type = = WIN_MUC_CONFIG ) {
2014-12-16 01:39:47 +00:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) old_current ;
cmd_autocomplete_remove_form_fields ( confwin - > form ) ;
2014-10-18 22:16:19 +00:00
}
2013-09-25 23:25:04 +00:00
ProfWin * new_current = wins_get_next ( ) ;
2014-10-18 22:16:19 +00:00
if ( new_current - > type = = WIN_MUC_CONFIG ) {
2014-12-16 01:39:47 +00:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) new_current ;
cmd_autocomplete_add_form_fields ( confwin - > form ) ;
2014-10-18 22:16:19 +00:00
}
2013-09-25 23:25:04 +00:00
int i = wins_get_num ( new_current ) ;
wins_set_current_by_num ( i ) ;
if ( i = = 1 ) {
2014-01-16 18:04:25 +00:00
title_bar_console ( ) ;
2013-10-02 22:33:48 +00:00
status_bar_current ( 1 ) ;
2013-09-25 23:25:04 +00:00
status_bar_active ( 1 ) ;
} else {
2014-12-21 22:01:56 +00:00
title_bar_switch ( ) ;
2013-10-02 22:33:48 +00:00
status_bar_current ( i ) ;
2013-09-25 23:25:04 +00:00
status_bar_active ( i ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_gone_secure ( const char * const barejid , gboolean trusted )
2014-01-11 21:44:24 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = NULL ;
2014-01-11 21:44:24 +00:00
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
window = ( ProfWin * ) chatwin ;
} else {
window = wins_new_chat ( barejid ) ;
chatwin = ( ProfChatWin * ) window ;
2014-12-10 01:33:46 +00:00
}
2014-12-16 01:39:47 +00:00
chatwin - > is_otr = TRUE ;
chatwin - > is_trusted = trusted ;
2014-04-18 23:03:11 +00:00
if ( trusted ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , THEME_OTR_STARTED_TRUSTED , " " , " OTR session started (trusted). " ) ;
2014-04-18 23:03:11 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , THEME_OTR_STARTED_UNTRUSTED , " " , " OTR session started (untrusted). " ) ;
2014-04-18 23:03:11 +00:00
}
if ( wins_is_current ( window ) ) {
2014-12-21 22:01:56 +00:00
title_bar_switch ( ) ;
2014-04-18 23:03:11 +00:00
} else {
int num = wins_get_num ( window ) ;
status_bar_new ( num ) ;
2014-04-18 23:56:57 +00:00
int ui_index = num ;
if ( ui_index = = 10 ) {
ui_index = 0 ;
}
2014-12-15 00:28:28 +00:00
cons_show ( " %s started an OTR session (%d). " , barejid , ui_index ) ;
2014-04-18 23:56:57 +00:00
cons_alert ( ) ;
2014-01-11 21:44:24 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_gone_insecure ( const char * const barejid )
2014-04-26 22:29:05 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
chatwin - > is_otr = FALSE ;
chatwin - > is_trusted = FALSE ;
ProfWin * window = ( ProfWin * ) chatwin ;
win_save_print ( window , ' ! ' , NULL , 0 , THEME_OTR_ENDED , " " , " OTR session ended. " ) ;
if ( wins_is_current ( window ) ) {
2014-12-21 22:01:56 +00:00
title_bar_switch ( ) ;
2014-12-20 00:52:35 +00:00
}
2014-04-26 22:29:05 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_recipient_initiated ( const char * const barejid )
2014-04-30 22:59:40 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " %s wants to authenticate your identity, use '/otr secret <secret>'. " , barejid ) ;
2014-04-30 22:59:40 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_recipient_initiated_q ( const char * const barejid , const char * question )
2014-04-26 22:29:05 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " %s wants to authenticate your identity with the following question: " , barejid ) ;
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " %s " , question ) ;
win_save_print ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " use '/otr answer <answer>'. " ) ;
2014-04-26 22:29:05 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_unsuccessful_sender ( const char * const barejid )
2014-04-26 22:29:05 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " Authentication failed, the secret you entered does not match the secret entered by %s. " , barejid ) ;
2014-04-26 22:29:05 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_unsuccessful_receiver ( const char * const barejid )
2014-04-26 22:29:05 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " Authentication failed, the secret entered by %s does not match yours. " , barejid ) ;
2014-04-27 00:17:38 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_aborted ( const char * const barejid )
2014-04-27 00:17:38 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_print ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " SMP session aborted. " ) ;
2014-04-26 22:29:05 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_successful ( const char * const barejid )
2014-05-07 19:41:05 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_print ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " Authentication successful. " ) ;
2014-05-07 19:41:05 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_answer_success ( const char * const barejid )
2014-05-07 19:41:05 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " %s successfully authenticated you. " , barejid ) ;
2014-05-07 19:41:05 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_smp_answer_failure ( const char * const barejid )
2014-01-11 23:28:11 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " %s failed to authenticate you. " , barejid ) ;
}
}
2014-01-11 23:28:11 +00:00
2014-12-22 22:13:42 +00:00
void
ui_otr_authenticating ( const char * const barejid )
2014-12-20 00:52:35 +00:00
{
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " Authenticating %s... " , barejid ) ;
2014-01-11 23:28:11 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_otr_authetication_waiting ( const char * const barejid )
2014-01-12 01:20:22 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , 0 , " " , " Awaiting authentication from %s... " , barejid ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_trust ( const char * const barejid )
2014-12-20 00:52:35 +00:00
{
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
2014-12-16 01:39:47 +00:00
chatwin - > is_otr = TRUE ;
chatwin - > is_trusted = TRUE ;
2014-01-12 01:20:22 +00:00
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) chatwin ;
win_save_print ( window , ' ! ' , NULL , 0 , THEME_OTR_TRUSTED , " " , " OTR session trusted. " ) ;
2014-01-12 01:20:22 +00:00
if ( wins_is_current ( window ) ) {
2014-12-21 22:01:56 +00:00
title_bar_switch ( ) ;
2014-01-12 01:20:22 +00:00
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_untrust ( const char * const barejid )
2014-01-12 01:20:22 +00:00
{
2014-12-20 00:52:35 +00:00
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
2014-12-16 01:39:47 +00:00
chatwin - > is_otr = TRUE ;
chatwin - > is_trusted = FALSE ;
2014-01-12 01:20:22 +00:00
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) chatwin ;
win_save_print ( window , ' ! ' , NULL , 0 , THEME_OTR_UNTRUSTED , " " , " OTR session untrusted. " ) ;
2014-01-12 01:20:22 +00:00
if ( wins_is_current ( window ) ) {
2014-12-21 22:01:56 +00:00
title_bar_switch ( ) ;
2014-01-12 01:20:22 +00:00
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_clear_current ( void )
2013-03-02 21:55:55 +00:00
{
2013-08-20 22:08:21 +00:00
wins_clear_current ( ) ;
2013-03-02 21:55:55 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_close_win ( int index )
2013-05-12 21:57:36 +00:00
{
2014-10-18 22:56:10 +00:00
ProfWin * window = wins_get_by_num ( index ) ;
2014-12-16 01:39:47 +00:00
if ( window & & window - > type = = WIN_MUC_CONFIG ) {
ProfMucConfWin * confwin = ( ProfMucConfWin * ) window ;
if ( confwin - > form ) {
cmd_autocomplete_remove_form_fields ( confwin - > form ) ;
2014-10-18 22:56:10 +00:00
}
}
2013-08-20 22:08:21 +00:00
wins_close_by_num ( index ) ;
2014-01-16 18:04:25 +00:00
title_bar_console ( ) ;
2013-10-02 22:33:48 +00:00
status_bar_current ( 1 ) ;
2013-08-27 23:50:15 +00:00
status_bar_active ( 1 ) ;
2013-05-12 21:57:36 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_tidy_wins ( void )
2013-05-16 23:33:00 +00:00
{
2013-08-20 22:08:21 +00:00
gboolean tidied = wins_tidy ( ) ;
2013-05-16 23:33:00 +00:00
if ( tidied ) {
cons_show ( " Windows tidied. " ) ;
} else {
cons_show ( " No tidy needed. " ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_prune_wins ( void )
2013-05-16 23:33:00 +00:00
{
jabber_conn_status_t conn_status = jabber_get_connection_status ( ) ;
gboolean pruned = FALSE ;
2014-12-20 00:52:35 +00:00
GSList * wins = wins_get_prune_wins ( ) ;
if ( wins ! = NULL ) {
2013-08-20 22:08:21 +00:00
pruned = TRUE ;
}
2014-12-20 00:52:35 +00:00
GSList * curr = wins ;
while ( curr ! = NULL ) {
ProfWin * window = curr - > data ;
if ( window - > type = = WIN_CHAT ) {
if ( conn_status = = JABBER_CONNECTED ) {
2014-12-29 01:17:59 +00:00
ProfChatWin * chatwin = ( ProfChatWin * ) window ;
2015-01-08 00:57:25 +00:00
chat_session_remove ( chatwin - > barejid ) ;
2013-05-16 23:33:00 +00:00
}
}
2013-08-20 22:08:21 +00:00
int num = wins_get_num ( window ) ;
ui_close_win ( num ) ;
curr = g_slist_next ( curr ) ;
}
2014-12-20 00:52:35 +00:00
if ( wins ! = NULL ) {
g_slist_free ( wins ) ;
2013-05-16 23:33:00 +00:00
}
2013-08-20 22:08:21 +00:00
wins_tidy ( ) ;
2013-05-16 23:33:00 +00:00
if ( pruned ) {
cons_show ( " Windows pruned. " ) ;
} else {
cons_show ( " No prune needed. " ) ;
}
}
2014-12-22 22:13:42 +00:00
gboolean
ui_swap_wins ( int source_win , int target_win )
2014-04-24 20:50:59 +00:00
{
return wins_swap ( source_win , target_win ) ;
}
2014-12-22 22:13:42 +00:00
win_type_t
ui_current_win_type ( void )
2013-01-11 01:05:59 +00:00
{
2013-08-20 22:08:21 +00:00
ProfWin * current = wins_get_current ( ) ;
2013-04-21 17:40:22 +00:00
return current - > type ;
2012-11-26 00:57:41 +00:00
}
2014-12-22 22:13:42 +00:00
gboolean
ui_current_win_is_otr ( void )
2014-01-11 17:03:01 +00:00
{
ProfWin * current = wins_get_current ( ) ;
2014-12-18 23:57:19 +00:00
if ( current - > type = = WIN_CHAT ) {
ProfChatWin * chatwin = ( ProfChatWin * ) current ;
assert ( chatwin - > memcheck = = PROFCHATWIN_MEMCHECK ) ;
return chatwin - > is_otr ;
} else {
return FALSE ;
}
2014-01-11 17:03:01 +00:00
}
2014-12-22 22:13:42 +00:00
int
ui_current_win_index ( void )
2013-05-12 21:57:36 +00:00
{
2013-08-20 22:08:21 +00:00
return wins_get_current_num ( ) ;
2013-05-12 21:57:36 +00:00
}
2014-12-22 22:13:42 +00:00
win_type_t
ui_win_type ( int index )
2013-05-12 21:57:36 +00:00
{
2013-08-20 22:08:21 +00:00
ProfWin * window = wins_get_by_num ( index ) ;
return window - > type ;
2013-05-12 21:57:36 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_current_print_line ( const char * const msg , . . . )
2012-11-26 00:57:41 +00:00
{
2014-07-20 23:18:37 +00:00
ProfWin * window = wins_get_current ( ) ;
2012-11-27 21:53:56 +00:00
va_list arg ;
va_start ( arg , msg ) ;
2014-01-11 19:10:00 +00:00
GString * fmt_msg = g_string_new ( NULL ) ;
g_string_vprintf ( fmt_msg , msg , arg ) ;
2014-07-20 23:18:37 +00:00
win_save_println ( window , fmt_msg - > str ) ;
2012-11-27 21:53:56 +00:00
va_end ( arg ) ;
2014-01-11 19:10:00 +00:00
g_string_free ( fmt_msg , TRUE ) ;
2012-11-26 00:57:41 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_current_print_formatted_line ( const char show_char , int attrs , const char * const msg , . . . )
2014-01-16 23:16:37 +00:00
{
ProfWin * current = wins_get_current ( ) ;
va_list arg ;
va_start ( arg , msg ) ;
GString * fmt_msg = g_string_new ( NULL ) ;
g_string_vprintf ( fmt_msg , msg , arg ) ;
2014-06-21 08:16:50 +00:00
win_save_print ( current , show_char , NULL , 0 , attrs , " " , fmt_msg - > str ) ;
2014-01-16 23:16:37 +00:00
va_end ( arg ) ;
g_string_free ( fmt_msg , TRUE ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_current_error_line ( const char * const msg )
2012-11-26 00:57:41 +00:00
{
2013-08-20 22:08:21 +00:00
ProfWin * current = wins_get_current ( ) ;
2014-11-16 20:40:19 +00:00
win_save_print ( current , ' - ' , NULL , 0 , THEME_ERROR , " " , msg ) ;
2012-11-26 00:57:41 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_print_system_msg_from_recipient ( const char * const barejid , const char * message )
2012-11-11 12:00:21 +00:00
{
2014-12-11 00:02:51 +00:00
if ( barejid = = NULL | | message = = NULL )
2012-11-11 12:00:21 +00:00
return ;
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_chat ( barejid ) ;
2013-08-20 22:08:21 +00:00
if ( window = = NULL ) {
2014-04-25 23:36:36 +00:00
int num = 0 ;
2014-12-11 00:02:51 +00:00
window = wins_new_chat ( barejid ) ;
2013-08-20 22:08:21 +00:00
if ( window ! = NULL ) {
num = wins_get_num ( window ) ;
status_bar_active ( num ) ;
} else {
num = 0 ;
window = wins_get_console ( ) ;
2013-08-27 23:50:15 +00:00
status_bar_active ( 1 ) ;
2013-08-20 22:08:21 +00:00
}
2012-11-11 12:00:21 +00:00
}
2014-12-11 00:02:51 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " *%s %s " , barejid , message ) ;
2012-11-11 12:00:21 +00:00
}
2014-12-22 22:13:42 +00:00
void
2015-01-11 23:04:22 +00:00
ui_recipient_gone ( const char * const barejid , const char * const resource )
2012-08-15 23:50:32 +00:00
{
2013-05-20 21:51:35 +00:00
if ( barejid = = NULL )
2012-11-26 00:57:41 +00:00
return ;
2015-01-11 23:04:22 +00:00
if ( resource = = NULL )
return ;
2012-10-21 19:02:20 +00:00
2015-01-11 23:04:22 +00:00
gboolean show_message = TRUE ;
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin ) {
ChatSession * session = chat_session_get ( barejid ) ;
if ( session & & g_strcmp0 ( session - > resource , resource ) ! = 0 ) {
show_message = FALSE ;
2014-08-19 20:22:43 +00:00
}
2015-01-11 23:04:22 +00:00
if ( show_message ) {
const char * display_usr = NULL ;
PContact contact = roster_get_contact ( barejid ) ;
if ( contact ! = NULL ) {
if ( p_contact_name ( contact ) ! = NULL ) {
display_usr = p_contact_name ( contact ) ;
} else {
display_usr = barejid ;
}
} else {
display_usr = barejid ;
}
2013-05-20 21:51:35 +00:00
2015-01-11 23:04:22 +00:00
win_save_vprint ( ( ProfWin * ) chatwin , ' ! ' , NULL , 0 , THEME_GONE , " " , " <- %s has left the conversation. " , display_usr ) ;
}
2012-11-26 00:57:41 +00:00
}
2012-06-28 22:29:46 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_new_private_win ( const char * const fulljid )
2012-11-30 00:19:03 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_private ( fulljid ) ;
2013-08-20 22:08:21 +00:00
int num = 0 ;
2012-11-30 00:19:03 +00:00
// create new window
2013-08-20 22:08:21 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
window = wins_new_private ( fulljid ) ;
num = wins_get_num ( window ) ;
} else {
num = wins_get_num ( window ) ;
}
2013-01-21 22:46:33 +00:00
2014-12-20 00:52:35 +00:00
ui_switch_win ( num ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_new_chat_win ( const char * const barejid )
2014-12-20 00:52:35 +00:00
{
ProfWin * window = ( ProfWin * ) wins_get_chat ( barejid ) ;
int num = 0 ;
// create new window
if ( window = = NULL ) {
window = wins_new_chat ( barejid ) ;
2013-01-21 22:46:33 +00:00
2013-08-20 22:08:21 +00:00
num = wins_get_num ( window ) ;
2012-11-30 00:19:03 +00:00
2013-02-03 02:35:04 +00:00
if ( prefs_get_boolean ( PREF_CHLOG ) & & prefs_get_boolean ( PREF_HISTORY ) ) {
2014-12-20 00:52:35 +00:00
_win_show_history ( num , barejid ) ;
2012-11-30 00:19:03 +00:00
}
2014-12-20 00:52:35 +00:00
// if the contact is offline, show a message
PContact contact = roster_get_contact ( barejid ) ;
2012-11-30 00:19:03 +00:00
if ( contact ! = NULL ) {
if ( strcmp ( p_contact_presence ( contact ) , " offline " ) = = 0 ) {
2013-11-10 18:48:55 +00:00
const char * const show = p_contact_presence ( contact ) ;
const char * const status = p_contact_status ( contact ) ;
2014-12-20 00:52:35 +00:00
win_show_status_string ( window , barejid , show , status , NULL , " -- " , " offline " ) ;
2012-11-30 00:19:03 +00:00
}
}
} else {
2013-08-20 22:08:21 +00:00
num = wins_get_num ( window ) ;
2012-11-30 00:19:03 +00:00
}
2013-08-20 22:08:21 +00:00
ui_switch_win ( num ) ;
2012-11-30 00:19:03 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_create_xmlconsole_win ( void )
2014-04-15 12:16:32 +00:00
{
2014-12-15 00:28:28 +00:00
ProfWin * window = wins_new_xmlconsole ( ) ;
2014-04-15 12:16:32 +00:00
int num = wins_get_num ( window ) ;
ui_switch_win ( num ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_open_xmlconsole_win ( void )
2014-04-24 23:04:01 +00:00
{
2014-12-22 00:28:03 +00:00
ProfXMLWin * xmlwin = wins_get_xmlconsole ( ) ;
if ( xmlwin ! = NULL ) {
int num = wins_get_num ( ( ProfWin * ) xmlwin ) ;
2014-04-24 23:04:01 +00:00
ui_switch_win ( num ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_outgoing_chat_msg ( const char * const from , const char * const barejid ,
2012-03-09 01:06:55 +00:00
const char * const message )
2012-02-07 00:37:42 +00:00
{
2014-12-20 00:52:35 +00:00
PContact contact = roster_get_contact ( barejid ) ;
ProfWin * window = ( ProfWin * ) wins_get_chat ( barejid ) ;
2013-08-20 22:08:21 +00:00
int num = 0 ;
2012-10-17 09:55:48 +00:00
// create new window
2013-08-20 22:08:21 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
window = wins_new_chat ( barejid ) ;
2014-01-11 21:44:24 +00:00
# ifdef HAVE_LIBOTR
2015-01-28 00:04:37 +00:00
ProfChatWin * chatwin = ( ProfChatWin * ) window ;
2014-12-20 00:52:35 +00:00
if ( otr_is_secure ( barejid ) ) {
chatwin - > is_otr = TRUE ;
2012-11-14 00:39:34 +00:00
}
2014-12-20 00:52:35 +00:00
# endif
2013-08-20 22:08:21 +00:00
num = wins_get_num ( window ) ;
2012-10-17 09:55:48 +00:00
2013-02-03 02:35:04 +00:00
if ( prefs_get_boolean ( PREF_CHLOG ) & & prefs_get_boolean ( PREF_HISTORY ) ) {
2014-12-20 00:52:35 +00:00
_win_show_history ( num , barejid ) ;
2012-10-17 09:55:48 +00:00
}
2012-10-04 22:55:15 +00:00
2012-10-18 07:20:53 +00:00
if ( contact ! = NULL ) {
2012-10-28 20:52:30 +00:00
if ( strcmp ( p_contact_presence ( contact ) , " offline " ) = = 0 ) {
2013-12-27 19:56:47 +00:00
const char * show = p_contact_presence ( contact ) ;
const char * status = p_contact_status ( contact ) ;
2014-12-20 00:52:35 +00:00
win_show_status_string ( window , barejid , show , status , NULL , " -- " , " offline " ) ;
2012-10-04 22:55:15 +00:00
}
2012-10-04 22:33:38 +00:00
}
2012-10-17 09:55:48 +00:00
// use existing window
} else {
2013-08-20 22:08:21 +00:00
num = wins_get_num ( window ) ;
2012-10-04 22:18:48 +00:00
}
2015-01-11 20:20:17 +00:00
ProfChatWin * chatwin = ( ProfChatWin * ) window ;
chat_state_active ( chatwin - > state ) ;
2012-10-17 09:55:48 +00:00
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , 0 , THEME_TEXT_ME , from , message ) ;
2014-09-01 20:30:31 +00:00
ui_switch_win ( num ) ;
2012-02-07 00:37:42 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_outgoing_private_msg ( const char * const from , const char * const fulljid ,
2014-12-20 00:52:35 +00:00
const char * const message )
2012-11-05 21:36:32 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_private ( fulljid ) ;
2013-08-20 22:08:21 +00:00
int num = 0 ;
2012-11-05 21:36:32 +00:00
// create new window
2013-08-20 22:08:21 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
window = wins_new_private ( fulljid ) ;
num = wins_get_num ( window ) ;
// use existing window
} else {
num = wins_get_num ( window ) ;
2012-11-05 21:36:32 +00:00
}
2014-12-20 00:52:35 +00:00
win_save_print ( window , ' - ' , NULL , 0 , THEME_TEXT_ME , from , message ) ;
ui_switch_win ( num ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_room_join ( const char * const roomjid , gboolean focus )
2014-12-20 00:52:35 +00:00
{
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
int num = 0 ;
// create new window
if ( window = = NULL ) {
window = wins_new_muc ( roomjid ) ;
}
char * nick = muc_nick ( roomjid ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " -> You have joined the room as %s " , nick ) ;
2014-10-18 19:22:34 +00:00
if ( prefs_get_boolean ( PREF_MUC_PRIVILEGES ) ) {
2014-12-20 00:52:35 +00:00
char * role = muc_role_str ( roomjid ) ;
char * affiliation = muc_affiliation_str ( roomjid ) ;
2014-10-18 19:22:34 +00:00
if ( role ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , role: %s " , role ) ;
2014-10-18 19:22:34 +00:00
}
if ( affiliation ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , affiliation: %s " , affiliation ) ;
2014-10-18 19:22:34 +00:00
}
2014-10-12 01:10:46 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2014-10-12 01:10:46 +00:00
2013-08-20 22:08:21 +00:00
num = wins_get_num ( window ) ;
2014-04-13 01:52:25 +00:00
if ( focus ) {
ui_switch_win ( num ) ;
} else {
status_bar_active ( num ) ;
2014-04-14 19:32:51 +00:00
ProfWin * console = wins_get_console ( ) ;
2014-12-20 00:52:35 +00:00
char * nick = muc_nick ( roomjid ) ;
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_TYPING , " " , " -> Autojoined %s as %s (%d). " , roomjid , nick , num ) ;
2014-04-13 01:52:25 +00:00
}
2012-11-05 21:36:32 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_switch_to_room ( const char * const roomjid )
2014-10-17 23:40:44 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-17 23:40:44 +00:00
int num = wins_get_num ( window ) ;
num = wins_get_num ( window ) ;
ui_switch_win ( num ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_room_role_change ( const char * const roomjid , const char * const role , const char * const actor ,
2014-10-18 00:37:52 +00:00
const char * const reason )
2014-10-12 01:10:46 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " Your role has been changed to: %s " , role ) ;
2014-10-18 00:37:52 +00:00
if ( actor ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , by: %s " , actor ) ;
2014-10-18 00:37:52 +00:00
}
if ( reason ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , reason: %s " , reason ) ;
2014-10-18 00:37:52 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2014-10-12 01:10:46 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_affiliation_change ( const char * const roomjid , const char * const affiliation , const char * const actor ,
2014-10-18 00:37:52 +00:00
const char * const reason )
2014-10-12 01:10:46 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " Your affiliation has been changed to: %s " , affiliation ) ;
2014-10-18 00:37:52 +00:00
if ( actor ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , by: %s " , actor ) ;
2014-10-18 00:37:52 +00:00
}
if ( reason ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , reason: %s " , reason ) ;
2014-10-18 00:37:52 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2014-10-12 01:10:46 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_role_and_affiliation_change ( const char * const roomjid , const char * const role , const char * const affiliation ,
2014-10-18 00:37:52 +00:00
const char * const actor , const char * const reason )
2014-10-18 00:07:25 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " Your role and affiliation have been changed, role: %s, affiliation: %s " , role , affiliation ) ;
2014-10-18 00:37:52 +00:00
if ( actor ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , by: %s " , actor ) ;
2014-10-18 00:37:52 +00:00
}
if ( reason ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , reason: %s " , reason ) ;
2014-10-18 00:37:52 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2014-10-18 00:07:25 +00:00
}
2014-10-18 18:10:50 +00:00
2014-12-22 22:13:42 +00:00
void
ui_room_occupant_role_change ( const char * const roomjid , const char * const nick , const char * const role ,
2014-10-18 18:10:50 +00:00
const char * const actor , const char * const reason )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " %s's role has been changed to: %s " , nick , role ) ;
2014-10-18 18:10:50 +00:00
if ( actor ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , by: %s " , actor ) ;
2014-10-18 18:10:50 +00:00
}
if ( reason ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , reason: %s " , reason ) ;
2014-10-18 18:10:50 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2014-10-18 18:10:50 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_occupant_affiliation_change ( const char * const roomjid , const char * const nick , const char * const affiliation ,
2014-10-18 18:10:50 +00:00
const char * const actor , const char * const reason )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " %s's affiliation has been changed to: %s " , nick , affiliation ) ;
2014-10-18 18:10:50 +00:00
if ( actor ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , by: %s " , actor ) ;
2014-10-18 18:10:50 +00:00
}
if ( reason ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , reason: %s " , reason ) ;
2014-10-18 18:10:50 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2014-10-18 18:10:50 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_occupant_role_and_affiliation_change ( const char * const roomjid , const char * const nick , const char * const role ,
2014-10-18 18:10:50 +00:00
const char * const affiliation , const char * const actor , const char * const reason )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " %s's role and affiliation have been changed, role: %s, affiliation: %s " , nick , role , affiliation ) ;
2014-10-18 18:10:50 +00:00
if ( actor ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , by: %s " , actor ) ;
2014-10-18 18:10:50 +00:00
}
if ( reason ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ROOMINFO , " " , " , reason: %s " , reason ) ;
2014-10-18 18:10:50 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2014-10-18 18:10:50 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_info_error ( const char * const roomjid , const char * const error )
2014-10-02 22:37:10 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-02 22:37:10 +00:00
if ( window ) {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " Room info request failed: %s " , error ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_show_room_disco_info ( const char * const roomjid , GSList * identities , GSList * features )
2014-10-02 22:37:10 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-02 22:37:10 +00:00
if ( window ) {
if ( ( ( identities ! = NULL ) & & ( g_slist_length ( identities ) > 0 ) ) | |
( ( features ! = NULL ) & & ( g_slist_length ( features ) > 0 ) ) ) {
if ( identities ! = NULL ) {
2014-10-02 22:52:17 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Identities: " ) ;
2014-10-02 22:37:10 +00:00
}
while ( identities ! = NULL ) {
DiscoIdentity * identity = identities - > data ; // anme trpe, cat
2014-10-02 22:52:17 +00:00
GString * identity_str = g_string_new ( " " ) ;
2014-10-02 22:37:10 +00:00
if ( identity - > name ! = NULL ) {
identity_str = g_string_append ( identity_str , identity - > name ) ;
identity_str = g_string_append ( identity_str , " " ) ;
}
if ( identity - > type ! = NULL ) {
identity_str = g_string_append ( identity_str , identity - > type ) ;
identity_str = g_string_append ( identity_str , " " ) ;
}
if ( identity - > category ! = NULL ) {
identity_str = g_string_append ( identity_str , identity - > category ) ;
}
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , identity_str - > str ) ;
2014-11-01 01:48:36 +00:00
g_string_free ( identity_str , TRUE ) ;
2014-10-02 22:37:10 +00:00
identities = g_slist_next ( identities ) ;
}
if ( features ! = NULL ) {
2014-10-02 22:52:17 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Features: " ) ;
2014-10-02 22:37:10 +00:00
}
while ( features ! = NULL ) {
2014-10-02 22:52:17 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s " , features - > data ) ;
2014-10-02 22:37:10 +00:00
features = g_slist_next ( features ) ;
}
2014-10-02 22:52:17 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-10-02 22:37:10 +00:00
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_roster ( const char * const roomjid , GList * roster , const char * const presence )
2012-11-05 21:36:32 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received room roster but no window open for %s. " , roomjid ) ;
2012-11-08 00:22:15 +00:00
} else {
2014-08-20 20:30:10 +00:00
if ( ( roster = = NULL ) | | ( g_list_length ( roster ) = = 0 ) ) {
if ( presence = = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " , " Room is empty. " ) ;
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " , " No occupants %s. " , presence ) ;
2014-08-20 20:30:10 +00:00
}
2013-01-15 23:17:07 +00:00
} else {
2014-08-20 20:30:10 +00:00
int length = g_list_length ( roster ) ;
if ( presence = = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " %d occupants: " , length ) ;
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " %d %s: " , length , presence ) ;
2014-08-20 20:30:10 +00:00
}
2012-11-07 22:46:20 +00:00
2014-08-20 20:30:10 +00:00
while ( roster ! = NULL ) {
2014-09-29 23:16:01 +00:00
Occupant * occupant = roster - > data ;
const char * presence_str = string_from_resource_presence ( occupant - > presence ) ;
2012-12-06 00:23:11 +00:00
2014-11-16 23:37:07 +00:00
theme_item_t presence_colour = theme_main_presence_attrs ( presence_str ) ;
2014-09-29 23:16:01 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , presence_colour , " " , " %s " , occupant - > nick ) ;
2012-12-06 00:23:11 +00:00
2014-08-20 20:30:10 +00:00
if ( roster - > next ! = NULL ) {
win_save_print ( window , ' ! ' , NULL , NO_DATE | NO_EOL , 0 , " " , " , " ) ;
}
roster = g_list_next ( roster ) ;
2012-11-08 00:22:15 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ONLINE , " " , " " ) ;
2012-12-06 00:23:11 +00:00
2012-11-07 22:46:20 +00:00
}
2013-08-20 22:08:21 +00:00
}
2012-11-05 21:36:32 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_join_error ( const char * const roomjid , const char * const err )
2014-04-20 23:37:04 +00:00
{
2014-12-20 00:52:35 +00:00
cons_show_error ( " Error joining room %s, reason: %s " , roomjid , err ) ;
2014-04-20 23:37:04 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_member_offline ( const char * const roomjid , const char * const nick )
2012-11-08 00:05:32 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received offline presence for room participant %s, but no window open for %s. " , nick , roomjid ) ;
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_OFFLINE , " " , " <- %s has left the room. " , nick ) ;
2013-08-20 22:08:21 +00:00
}
2012-11-08 00:05:32 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_member_kicked ( const char * const roomjid , const char * const nick , const char * const actor ,
2014-10-05 19:52:34 +00:00
const char * const reason )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 19:52:34 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received kick for room participant %s, but no window open for %s. " , nick , roomjid ) ;
2014-10-05 19:52:34 +00:00
} else {
GString * message = g_string_new ( nick ) ;
g_string_append ( message , " has been kicked from the room " ) ;
if ( actor ) {
g_string_append ( message , " by " ) ;
g_string_append ( message , actor ) ;
}
if ( reason ) {
g_string_append ( message , " , reason: " ) ;
g_string_append ( message , reason ) ;
}
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_OFFLINE , " " , " <- %s " , message - > str ) ;
2014-10-05 19:52:34 +00:00
g_string_free ( message , TRUE ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_member_banned ( const char * const roomjid , const char * const nick , const char * const actor ,
2014-10-06 21:59:25 +00:00
const char * const reason )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-06 21:59:25 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received ban for room participant %s, but no window open for %s. " , nick , roomjid ) ;
2014-10-06 21:59:25 +00:00
} else {
GString * message = g_string_new ( nick ) ;
g_string_append ( message , " has been banned from the room " ) ;
if ( actor ) {
g_string_append ( message , " by " ) ;
g_string_append ( message , actor ) ;
}
if ( reason ) {
g_string_append ( message , " , reason: " ) ;
g_string_append ( message , reason ) ;
}
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_OFFLINE , " " , " <- %s " , message - > str ) ;
2014-10-06 21:59:25 +00:00
g_string_free ( message , TRUE ) ;
}
}
2014-10-05 19:52:34 +00:00
2014-12-22 22:13:42 +00:00
void
ui_room_member_online ( const char * const roomjid , const char * const nick , const char * const role ,
2014-10-17 23:52:42 +00:00
const char * const affiliation , const char * const show , const char * const status )
2012-11-08 00:05:32 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received online presence for room participant %s, but no window open for %s. " , nick , roomjid ) ;
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ONLINE , " " , " -> %s has joined the room " , nick ) ;
2014-10-18 19:22:34 +00:00
if ( prefs_get_boolean ( PREF_MUC_PRIVILEGES ) ) {
if ( role ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ONLINE , " " , " , role: %s " , role ) ;
2014-10-18 19:22:34 +00:00
}
if ( affiliation ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE | NO_EOL , THEME_ONLINE , " " , " , affiliation: %s " , affiliation ) ;
2014-10-18 19:22:34 +00:00
}
2014-10-17 23:52:42 +00:00
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' ! ' , NULL , NO_DATE , THEME_ROOMINFO , " " , " " ) ;
2013-08-20 22:08:21 +00:00
}
2012-11-08 00:05:32 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_member_presence ( const char * const roomjid , const char * const nick ,
2012-11-19 00:26:31 +00:00
const char * const show , const char * const status )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received presence for room participant %s, but no window open for %s. " , nick , roomjid ) ;
2014-08-20 20:30:10 +00:00
} else {
2013-10-06 22:52:50 +00:00
win_show_status_string ( window , nick , show , status , NULL , " ++ " , " online " ) ;
2013-08-20 22:08:21 +00:00
}
2012-11-19 00:26:31 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_member_nick_change ( const char * const roomjid ,
2012-11-18 21:46:58 +00:00
const char * const old_nick , const char * const nick )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received nick change for room participant %s, but no window open for %s. " , old_nick , roomjid ) ;
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_THEM , " " , " ** %s is now known as %s " , old_nick , nick ) ;
2013-08-20 22:08:21 +00:00
}
2012-11-18 22:49:01 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_nick_change ( const char * const roomjid , const char * const nick )
2012-11-18 22:49:01 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received self nick change %s, but no window open for %s. " , nick , roomjid ) ;
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ME , " " , " ** You are now known as %s " , nick ) ;
2013-08-20 22:08:21 +00:00
}
2012-11-18 21:46:58 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_history ( const char * const roomjid , const char * const nick ,
2012-11-05 22:21:03 +00:00
GTimeVal tv_stamp , const char * const message )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Room history message received from %s, but no window open for %s " , nick , roomjid ) ;
2014-07-22 21:16:17 +00:00
} else {
2014-08-20 20:30:10 +00:00
GString * line = g_string_new ( " " ) ;
if ( strncmp ( message , " /me " , 4 ) = = 0 ) {
g_string_append ( line , " * " ) ;
g_string_append ( line , nick ) ;
2014-12-01 13:38:17 +00:00
g_string_append ( line , " " ) ;
2014-08-20 20:30:10 +00:00
g_string_append ( line , message + 4 ) ;
} else {
g_string_append ( line , nick ) ;
g_string_append ( line , " : " ) ;
g_string_append ( line , message ) ;
}
2014-07-22 21:16:17 +00:00
2014-11-09 00:36:25 +00:00
win_save_print ( window , ' - ' , & tv_stamp , NO_COLOUR_DATE , 0 , " " , line - > str ) ;
2014-08-20 20:30:10 +00:00
g_string_free ( line , TRUE ) ;
2013-08-20 22:08:21 +00:00
}
2012-11-05 22:21:03 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_message ( const char * const roomjid , const char * const nick ,
2012-11-05 22:28:06 +00:00
const char * const message )
{
2014-12-21 23:14:01 +00:00
ProfMucWin * mucwin = wins_get_muc ( roomjid ) ;
if ( mucwin = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Room message received from %s, but no window open for %s " , nick , roomjid ) ;
2012-11-05 22:49:40 +00:00
} else {
2014-12-21 23:14:01 +00:00
ProfWin * window = ( ProfWin * ) mucwin ;
2014-08-20 20:30:10 +00:00
int num = wins_get_num ( window ) ;
2014-12-20 00:52:35 +00:00
char * my_nick = muc_nick ( roomjid ) ;
2012-11-05 22:49:40 +00:00
2014-11-07 21:05:51 +00:00
if ( g_strcmp0 ( nick , my_nick ) ! = 0 ) {
2014-08-20 20:30:10 +00:00
if ( g_strrstr ( message , my_nick ) ! = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_ME , THEME_ROOMMENTION , nick , message ) ;
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_ME , THEME_TEXT_THEM , nick , message ) ;
2012-11-05 23:24:29 +00:00
}
2014-08-20 20:30:10 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , 0 , THEME_TEXT_ME , nick , message ) ;
2012-11-05 23:24:29 +00:00
}
2012-11-05 22:49:40 +00:00
2014-08-20 20:30:10 +00:00
// currently in groupchat window
if ( wins_is_current ( window ) ) {
status_bar_active ( num ) ;
2012-11-05 22:49:40 +00:00
2015-02-17 09:52:37 +00:00
// not currently on groupchat window
2014-08-20 20:30:10 +00:00
} else {
status_bar_new ( num ) ;
cons_show_incoming_message ( nick , num ) ;
2013-05-22 23:10:55 +00:00
2014-08-20 20:30:10 +00:00
if ( strcmp ( nick , my_nick ) ! = 0 ) {
if ( prefs_get_boolean ( PREF_FLASH ) ) {
flash ( ) ;
}
}
2014-12-21 23:14:01 +00:00
mucwin - > unread + + ;
2012-11-05 23:24:29 +00:00
}
2014-05-24 19:46:03 +00:00
2014-08-20 20:30:10 +00:00
int ui_index = num ;
if ( ui_index = = 10 ) {
ui_index = 0 ;
2014-05-24 15:46:05 +00:00
}
2014-08-20 20:30:10 +00:00
2014-12-20 00:52:35 +00:00
if ( strcmp ( nick , muc_nick ( roomjid ) ) ! = 0 ) {
2014-08-20 20:30:10 +00:00
if ( prefs_get_boolean ( PREF_BEEP ) ) {
beep ( ) ;
}
gboolean notify = FALSE ;
char * room_setting = prefs_get_string ( PREF_NOTIFY_ROOM ) ;
if ( g_strcmp0 ( room_setting , " on " ) = = 0 ) {
2014-05-24 15:59:45 +00:00
notify = TRUE ;
}
2014-08-20 20:30:10 +00:00
if ( g_strcmp0 ( room_setting , " mention " ) = = 0 ) {
char * message_lower = g_utf8_strdown ( message , - 1 ) ;
char * nick_lower = g_utf8_strdown ( nick , - 1 ) ;
if ( g_strrstr ( message_lower , nick_lower ) ! = NULL ) {
notify = TRUE ;
}
g_free ( message_lower ) ;
g_free ( nick_lower ) ;
}
prefs_free_string ( room_setting ) ;
if ( notify ) {
gboolean is_current = wins_is_current ( window ) ;
if ( ! is_current | | ( is_current & & prefs_get_boolean ( PREF_NOTIFY_ROOM_CURRENT ) ) ) {
2014-12-20 00:52:35 +00:00
Jid * jidp = jid_create ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( prefs_get_boolean ( PREF_NOTIFY_ROOM_TEXT ) ) {
notify_room_message ( nick , jidp - > localpart , ui_index , message ) ;
} else {
notify_room_message ( nick , jidp - > localpart , ui_index , NULL ) ;
}
jid_destroy ( jidp ) ;
2014-05-24 21:14:26 +00:00
}
2014-05-24 19:46:03 +00:00
}
2012-11-05 23:24:29 +00:00
}
2014-03-31 20:50:33 +00:00
}
2012-11-05 22:28:06 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_room_requires_config ( const char * const roomjid )
2014-09-02 23:23:04 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-09-02 23:23:04 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received room config request, but no window open for %s. " , roomjid ) ;
2014-09-02 23:23:04 +00:00
} else {
int num = wins_get_num ( window ) ;
2014-09-03 21:00:08 +00:00
int ui_index = num ;
if ( ui_index = = 10 ) {
ui_index = 0 ;
}
2014-09-02 23:23:04 +00:00
2014-09-17 23:15:32 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " ,
2014-10-23 22:58:25 +00:00
" Room locked, requires configuration. " ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " ,
2014-09-17 23:15:32 +00:00
" Use '/room accept' to accept the defaults " ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " ,
2014-09-17 23:15:32 +00:00
" Use '/room destroy' to cancel and destroy the room " ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " ,
2014-09-17 23:15:32 +00:00
" Use '/room config' to edit the room configuration " ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-02 23:23:04 +00:00
// currently in groupchat window
if ( wins_is_current ( window ) ) {
status_bar_active ( num ) ;
2015-02-17 09:52:37 +00:00
// not currently on groupchat window
2014-09-02 23:23:04 +00:00
} else {
status_bar_new ( num ) ;
}
2014-09-03 21:00:08 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_destroy ( const char * const roomjid )
2014-09-03 21:00:08 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-09-03 21:00:08 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received room destroy result, but no window open for %s. " , roomjid ) ;
2014-09-03 21:00:08 +00:00
} else {
int num = wins_get_num ( window ) ;
ui_close_win ( num ) ;
2014-12-20 00:52:35 +00:00
cons_show ( " Room destroyed: %s " , roomjid ) ;
2014-09-02 23:23:04 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_leave_room ( const char * const roomjid )
2014-10-05 19:52:34 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 19:52:34 +00:00
if ( window ) {
int num = wins_get_num ( window ) ;
ui_close_win ( num ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_destroyed ( const char * const roomjid , const char * const reason , const char * const new_jid ,
2014-10-05 19:52:34 +00:00
const char * const password )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 19:52:34 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received room destroy, but no window open for %s. " , roomjid ) ;
2014-10-05 19:52:34 +00:00
} else {
int num = wins_get_num ( window ) ;
ui_close_win ( num ) ;
ProfWin * console = wins_get_console ( ) ;
if ( reason ) {
2014-12-20 00:52:35 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_TYPING , " " , " <- Room destroyed: %s, reason: %s " , roomjid , reason ) ;
2014-10-05 19:52:34 +00:00
} else {
2014-12-20 00:52:35 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_TYPING , " " , " <- Room destroyed: %s " , roomjid ) ;
2014-10-05 19:52:34 +00:00
}
if ( new_jid ) {
if ( password ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_TYPING , " " , " Replacement room: %s, password: %s " , new_jid , password ) ;
2014-10-05 19:52:34 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_TYPING , " " , " Replacement room: %s " , new_jid ) ;
2014-10-05 19:52:34 +00:00
}
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_kicked ( const char * const roomjid , const char * const actor , const char * const reason )
2014-10-05 19:52:34 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 19:52:34 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received kick, but no window open for %s. " , roomjid ) ;
2014-10-05 19:52:34 +00:00
} else {
int num = wins_get_num ( window ) ;
ui_close_win ( num ) ;
GString * message = g_string_new ( " Kicked from " ) ;
2014-12-20 00:52:35 +00:00
g_string_append ( message , roomjid ) ;
2014-10-05 19:52:34 +00:00
if ( actor ) {
g_string_append ( message , " by " ) ;
g_string_append ( message , actor ) ;
}
if ( reason ) {
g_string_append ( message , " , reason: " ) ;
g_string_append ( message , reason ) ;
}
ProfWin * console = wins_get_console ( ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_TYPING , " " , " <- %s " , message - > str ) ;
2014-10-05 19:52:34 +00:00
g_string_free ( message , TRUE ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_banned ( const char * const roomjid , const char * const actor , const char * const reason )
2014-10-06 21:59:25 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-06 21:59:25 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received ban, but no window open for %s. " , roomjid ) ;
2014-10-06 21:59:25 +00:00
} else {
int num = wins_get_num ( window ) ;
ui_close_win ( num ) ;
GString * message = g_string_new ( " Banned from " ) ;
2014-12-20 00:52:35 +00:00
g_string_append ( message , roomjid ) ;
2014-10-06 21:59:25 +00:00
if ( actor ) {
g_string_append ( message , " by " ) ;
g_string_append ( message , actor ) ;
}
if ( reason ) {
g_string_append ( message , " , reason: " ) ;
g_string_append ( message , reason ) ;
}
ProfWin * console = wins_get_console ( ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_TYPING , " " , " <- %s " , message - > str ) ;
2014-10-06 21:59:25 +00:00
g_string_free ( message , TRUE ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_subject ( const char * const roomjid , const char * const nick , const char * const subject )
2012-11-10 03:30:27 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received room subject, but no window open for %s. " , roomjid ) ;
2014-08-20 20:30:10 +00:00
} else {
int num = wins_get_num ( window ) ;
2012-11-10 03:30:27 +00:00
2014-10-05 02:05:46 +00:00
if ( subject ) {
if ( nick ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " *%s has set the room subject: " , nick ) ;
2014-10-05 02:05:46 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE , 0 , " " , " %s " , subject ) ;
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " Room subject: " ) ;
2014-10-05 02:05:46 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE , 0 , " " , " %s " , subject ) ;
}
} else {
if ( nick ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " , " *%s has cleared the room subject: " , nick ) ;
2014-10-05 02:05:46 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " , " Room subject cleared " ) ;
2014-10-05 02:05:46 +00:00
}
}
2012-11-10 03:30:27 +00:00
2014-08-20 20:30:10 +00:00
// currently in groupchat window
if ( wins_is_current ( window ) ) {
status_bar_active ( num ) ;
2012-11-10 03:30:27 +00:00
2015-02-17 09:52:37 +00:00
// not currently on groupchat window
2014-08-20 20:30:10 +00:00
} else {
status_bar_active ( num ) ;
}
2012-11-10 03:30:27 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_kick_error ( const char * const roomjid , const char * const nick , const char * const error )
2014-10-05 02:52:55 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 02:52:55 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Kick error received for %s, but no window open for %s. " , nick , roomjid ) ;
2014-10-05 02:52:55 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error kicking %s: %s " , nick , error ) ;
2014-10-05 02:52:55 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_broadcast ( const char * const roomjid , const char * const message )
2012-11-19 22:15:53 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-08-20 20:30:10 +00:00
if ( window = = NULL ) {
2014-12-20 00:52:35 +00:00
log_error ( " Received room broadcast, but no window open for %s. " , roomjid ) ;
2014-08-20 20:30:10 +00:00
} else {
int num = wins_get_num ( window ) ;
2012-11-19 22:15:53 +00:00
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_EOL , THEME_ROOMINFO , " " , " Room message: " ) ;
2014-08-20 20:30:10 +00:00
win_save_vprint ( window , ' ! ' , NULL , NO_DATE , 0 , " " , " %s " , message ) ;
2012-11-19 22:15:53 +00:00
2014-08-20 20:30:10 +00:00
// currently in groupchat window
if ( wins_is_current ( window ) ) {
status_bar_active ( num ) ;
2012-11-19 22:15:53 +00:00
2015-02-17 09:52:37 +00:00
// not currently on groupchat window
2014-08-20 20:30:10 +00:00
} else {
status_bar_new ( num ) ;
}
2012-11-19 22:15:53 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_affiliation_list_error ( const char * const roomjid , const char * const affiliation ,
2014-10-05 00:39:48 +00:00
const char * const error )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 00:39:48 +00:00
if ( window ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error retrieving %s list: %s " , affiliation , error ) ;
2014-10-05 00:39:48 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_affiliation_list ( const char * const roomjid , const char * const affiliation , GSList * jids )
2014-10-05 00:39:48 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 00:39:48 +00:00
if ( window ) {
if ( jids ) {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " Affiliation: %s " , affiliation ) ;
GSList * curr_jid = jids ;
while ( curr_jid ) {
char * jid = curr_jid - > data ;
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s " , jid ) ;
curr_jid = g_slist_next ( curr_jid ) ;
}
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " " ) ;
} else {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " No users found with affiliation: %s " , affiliation ) ;
2014-10-12 00:10:46 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " " ) ;
2014-10-05 00:39:48 +00:00
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_role_list_error ( const char * const roomjid , const char * const role , const char * const error )
2014-10-06 20:42:09 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-06 20:42:09 +00:00
if ( window ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error retrieving %s list: %s " , role , error ) ;
2014-10-06 20:42:09 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_role_list ( const char * const roomjid , const char * const role , GSList * nicks )
2014-10-06 20:42:09 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-06 20:42:09 +00:00
if ( window ) {
if ( nicks ) {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " Role: %s " , role ) ;
GSList * curr_nick = nicks ;
while ( curr_nick ) {
char * nick = curr_nick - > data ;
2014-12-20 00:52:35 +00:00
Occupant * occupant = muc_roster_item ( roomjid , nick ) ;
2014-10-06 20:42:09 +00:00
if ( occupant ) {
if ( occupant - > jid ) {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s (%s) " , nick , occupant - > jid ) ;
} else {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s " , nick ) ;
}
} else {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s " , nick ) ;
}
curr_nick = g_slist_next ( curr_nick ) ;
}
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " " ) ;
} else {
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " No occupants found with role: %s " , role ) ;
2014-10-12 00:10:46 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " " ) ;
2014-10-06 20:42:09 +00:00
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_affiliation_set_error ( const char * const roomjid , const char * const jid , const char * const affiliation ,
2014-10-05 00:39:48 +00:00
const char * const error )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-05 00:39:48 +00:00
if ( window ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error setting %s affiliation for %s: %s " , affiliation , jid , error ) ;
2014-10-05 00:39:48 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_role_set_error ( const char * const roomjid , const char * const nick , const char * const role ,
2014-10-06 20:42:09 +00:00
const char * const error )
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-10-06 20:42:09 +00:00
if ( window ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Error setting %s role for %s: %s " , role , nick , error ) ;
2014-10-06 20:42:09 +00:00
}
}
2014-12-22 22:13:42 +00:00
gint
ui_unread ( void )
2012-11-26 00:57:41 +00:00
{
2013-08-20 22:08:21 +00:00
return wins_get_total_unread ( ) ;
2012-11-26 00:57:41 +00:00
}
2014-12-22 22:13:42 +00:00
int
ui_win_unread ( int index )
2013-05-16 21:34:05 +00:00
{
2013-08-20 22:08:21 +00:00
ProfWin * window = wins_get_by_num ( index ) ;
if ( window ! = NULL ) {
2014-12-21 23:14:01 +00:00
return win_unread ( window ) ;
2013-05-16 21:34:05 +00:00
} else {
return 0 ;
}
}
2014-12-22 22:13:42 +00:00
char *
ui_ask_password ( void )
2013-12-15 19:38:23 +00:00
{
status_bar_get_password ( ) ;
2014-04-01 20:52:04 +00:00
status_bar_update_virtual ( ) ;
2015-02-05 00:58:23 +00:00
return inp_get_password ( ) ;
2013-12-15 19:38:23 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_chat_win_contact_online ( PContact contact , Resource * resource , GDateTime * last_activity )
2014-01-19 18:31:02 +00:00
{
const char * show = string_from_resource_presence ( resource - > presence ) ;
char * display_str = p_contact_create_display_string ( contact , resource - > name ) ;
const char * barejid = p_contact_barejid ( contact ) ;
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_chat ( barejid ) ;
2014-01-19 18:31:02 +00:00
if ( window ! = NULL ) {
win_show_status_string ( window , display_str , show , resource - > status ,
last_activity , " ++ " , " online " ) ;
}
free ( display_str ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_chat_win_contact_offline ( PContact contact , char * resource , char * status )
2014-01-19 18:31:02 +00:00
{
char * display_str = p_contact_create_display_string ( contact , resource ) ;
const char * barejid = p_contact_barejid ( contact ) ;
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_chat ( barejid ) ;
2014-01-19 18:31:02 +00:00
if ( window ! = NULL ) {
win_show_status_string ( window , display_str , " offline " , status , NULL , " -- " ,
" offline " ) ;
}
free ( display_str ) ;
}
2015-01-11 20:20:17 +00:00
void
ui_contact_offline ( char * barejid , char * resource , char * status )
{
char * show_console = prefs_get_string ( PREF_STATUSES_CONSOLE ) ;
char * show_chat_win = prefs_get_string ( PREF_STATUSES_CHAT ) ;
Jid * jid = jid_create_from_bare_and_resource ( barejid , resource ) ;
PContact contact = roster_get_contact ( barejid ) ;
if ( p_contact_subscription ( contact ) ! = NULL ) {
if ( strcmp ( p_contact_subscription ( contact ) , " none " ) ! = 0 ) {
// show in console if "all"
if ( g_strcmp0 ( show_console , " all " ) = = 0 ) {
cons_show_contact_offline ( contact , resource , status ) ;
// show in console of "online"
} else if ( g_strcmp0 ( show_console , " online " ) = = 0 ) {
cons_show_contact_offline ( contact , resource , status ) ;
}
// show in chat win if "all"
if ( g_strcmp0 ( show_chat_win , " all " ) = = 0 ) {
ui_chat_win_contact_offline ( contact , resource , status ) ;
// show in char win if "online" and presence online
} else if ( g_strcmp0 ( show_chat_win , " online " ) = = 0 ) {
ui_chat_win_contact_offline ( contact , resource , status ) ;
}
}
}
ProfChatWin * chatwin = wins_get_chat ( barejid ) ;
if ( chatwin & & chatwin - > resource_override & & ( g_strcmp0 ( resource , chatwin - > resource_override ) = = 0 ) ) {
FREE_SET_NULL ( chatwin - > resource_override ) ;
}
prefs_free_string ( show_console ) ;
prefs_free_string ( show_chat_win ) ;
jid_destroy ( jid ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_clear_win_title ( void )
2014-04-03 20:13:59 +00:00
{
2014-04-03 20:46:43 +00:00
printf ( " %c]0;%c " , ' \033 ' , ' \007 ' ) ;
2014-04-03 20:13:59 +00:00
}
2014-12-30 02:05:50 +00:00
void
ui_goodbye_title ( void )
{
2015-01-03 02:05:55 +00:00
int result = system ( " /bin/echo -ne \" \033 ]0;Thanks for using Profanity \007 \" " ) ;
if ( result = = - 1 ) log_error ( " Error printing title on shutdown " ) ;
2014-12-30 02:05:50 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_statusbar_new ( const int win )
2014-04-07 20:12:30 +00:00
{
status_bar_new ( win ) ;
}
2013-04-21 16:30:04 +00:00
static void
2014-04-05 23:47:14 +00:00
_ui_draw_term_title ( void )
2013-04-21 16:30:04 +00:00
{
char new_win_title [ 100 ] ;
jabber_conn_status_t status = jabber_get_connection_status ( ) ;
if ( status = = JABBER_CONNECTED ) {
2013-05-21 21:00:42 +00:00
const char * const jid = jabber_get_fulljid ( ) ;
2013-04-21 19:17:06 +00:00
gint unread = ui_unread ( ) ;
2013-04-21 16:30:04 +00:00
if ( unread ! = 0 ) {
2013-10-07 00:35:20 +00:00
snprintf ( new_win_title , sizeof ( new_win_title ) ,
2015-01-03 01:35:27 +00:00
" /bin/echo -n \" %c]0;%s (%d) - %s%c \" " , ' \033 ' , " Profanity " ,
2013-10-07 00:35:20 +00:00
unread , jid , ' \007 ' ) ;
2013-04-21 16:30:04 +00:00
} else {
2013-10-07 00:35:20 +00:00
snprintf ( new_win_title , sizeof ( new_win_title ) ,
2015-01-03 01:35:27 +00:00
" /bin/echo -n \" %c]0;%s - %s%c \" " , ' \033 ' , " Profanity " , jid ,
2013-10-07 00:35:20 +00:00
' \007 ' ) ;
2013-04-21 16:30:04 +00:00
}
} else {
2015-01-03 01:35:27 +00:00
snprintf ( new_win_title , sizeof ( new_win_title ) , " /bin/echo -n \" %c]0;%s%c \" " , ' \033 ' ,
2014-04-03 20:46:43 +00:00
" Profanity " , ' \007 ' ) ;
2013-04-21 16:30:04 +00:00
}
if ( g_strcmp0 ( win_title , new_win_title ) ! = 0 ) {
// print to x-window title bar
2014-12-31 01:48:52 +00:00
int res = system ( new_win_title ) ;
if ( res = = - 1 ) {
2015-01-01 22:51:52 +00:00
log_error ( " Error writing terminal window title. " ) ;
2014-12-31 01:48:52 +00:00
}
2013-04-21 16:30:04 +00:00
if ( win_title ! = NULL ) {
free ( win_title ) ;
}
win_title = strdup ( new_win_title ) ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_show_room_info ( ProfMucWin * mucwin )
2014-09-30 22:08:48 +00:00
{
2014-12-18 23:57:19 +00:00
char * role = muc_role_str ( mucwin - > roomjid ) ;
char * affiliation = muc_affiliation_str ( mucwin - > roomjid ) ;
2014-09-30 22:08:48 +00:00
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) mucwin ;
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " Room: %s " , mucwin - > roomjid ) ;
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " Affiliation: %s " , affiliation ) ;
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " Role: %s " , role ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-30 22:08:48 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_show_room_role_list ( ProfMucWin * mucwin , muc_role_t role )
2014-09-30 23:27:25 +00:00
{
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) mucwin ;
2014-12-18 23:57:19 +00:00
GSList * occupants = muc_occupants_by_role ( mucwin - > roomjid , role ) ;
2014-09-30 23:27:25 +00:00
if ( ! occupants ) {
switch ( role ) {
case MUC_ROLE_MODERATOR :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " No moderators found. " ) ;
2014-09-30 23:27:25 +00:00
break ;
case MUC_ROLE_PARTICIPANT :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " No participants found. " ) ;
2014-09-30 23:27:25 +00:00
break ;
case MUC_ROLE_VISITOR :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " No visitors found. " ) ;
2014-09-30 23:27:25 +00:00
break ;
default :
break ;
}
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-30 23:27:25 +00:00
} else {
switch ( role ) {
case MUC_ROLE_MODERATOR :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Moderators: " ) ;
2014-09-30 23:27:25 +00:00
break ;
case MUC_ROLE_PARTICIPANT :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Participants: " ) ;
2014-09-30 23:27:25 +00:00
break ;
case MUC_ROLE_VISITOR :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Visitors: " ) ;
2014-09-30 23:27:25 +00:00
break ;
default :
break ;
}
GSList * curr_occupant = occupants ;
while ( curr_occupant ) {
Occupant * occupant = curr_occupant - > data ;
if ( occupant - > role = = role ) {
2014-10-01 12:27:01 +00:00
if ( occupant - > jid ) {
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s (%s) " , occupant - > nick , occupant - > jid ) ;
2014-10-01 12:27:01 +00:00
} else {
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s " , occupant - > nick ) ;
2014-10-01 12:27:01 +00:00
}
2014-09-30 23:27:25 +00:00
}
curr_occupant = g_slist_next ( curr_occupant ) ;
}
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-30 23:27:25 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_show_room_affiliation_list ( ProfMucWin * mucwin , muc_affiliation_t affiliation )
2014-09-30 23:46:58 +00:00
{
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) mucwin ;
2014-12-18 23:57:19 +00:00
GSList * occupants = muc_occupants_by_affiliation ( mucwin - > roomjid , affiliation ) ;
2014-09-30 23:46:58 +00:00
if ( ! occupants ) {
switch ( affiliation ) {
case MUC_AFFILIATION_OWNER :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " No owners found. " ) ;
2014-09-30 23:46:58 +00:00
break ;
case MUC_AFFILIATION_ADMIN :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " No admins found. " ) ;
2014-09-30 23:46:58 +00:00
break ;
case MUC_AFFILIATION_MEMBER :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " No members found. " ) ;
2014-09-30 23:46:58 +00:00
break ;
case MUC_AFFILIATION_OUTCAST :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " No outcasts found. " ) ;
2014-09-30 23:46:58 +00:00
break ;
default :
break ;
}
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-30 23:46:58 +00:00
} else {
switch ( affiliation ) {
case MUC_AFFILIATION_OWNER :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Owners: " ) ;
2014-09-30 23:46:58 +00:00
break ;
case MUC_AFFILIATION_ADMIN :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Admins: " ) ;
2014-09-30 23:46:58 +00:00
break ;
case MUC_AFFILIATION_MEMBER :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Members: " ) ;
2014-09-30 23:46:58 +00:00
break ;
case MUC_AFFILIATION_OUTCAST :
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' ! ' , NULL , 0 , 0 , " " , " Outcasts: " ) ;
2014-09-30 23:46:58 +00:00
break ;
default :
break ;
}
GSList * curr_occupant = occupants ;
while ( curr_occupant ) {
Occupant * occupant = curr_occupant - > data ;
if ( occupant - > affiliation = = affiliation ) {
2014-10-01 12:27:01 +00:00
if ( occupant - > jid ) {
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s (%s) " , occupant - > nick , occupant - > jid ) ;
2014-10-01 12:27:01 +00:00
} else {
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' ! ' , NULL , 0 , 0 , " " , " %s " , occupant - > nick ) ;
2014-10-01 12:27:01 +00:00
}
2014-09-30 23:46:58 +00:00
}
curr_occupant = g_slist_next ( curr_occupant ) ;
}
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-30 23:46:58 +00:00
}
}
2014-09-10 18:59:30 +00:00
static void
2014-09-14 00:56:53 +00:00
_ui_handle_form_field ( ProfWin * window , char * tag , FormField * field )
2014-09-10 18:59:30 +00:00
{
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' - ' , NULL , NO_EOL , THEME_AWAY , " " , " [%s] " , tag ) ;
2014-09-14 00:56:53 +00:00
win_save_vprint ( window , ' - ' , NULL , NO_EOL | NO_DATE , 0 , " " , " %s " , field - > label ) ;
if ( field - > required ) {
win_save_print ( window , ' - ' , NULL , NO_DATE | NO_EOL , 0 , " " , " (required): " ) ;
} else {
win_save_print ( window , ' - ' , NULL , NO_DATE | NO_EOL , 0 , " " , " : " ) ;
}
2014-09-10 18:59:30 +00:00
GSList * values = field - > values ;
GSList * curr_value = values ;
switch ( field - > type_t ) {
case FIELD_HIDDEN :
break ;
case FIELD_TEXT_SINGLE :
if ( curr_value ! = NULL ) {
char * value = curr_value - > data ;
if ( value ! = NULL ) {
if ( g_strcmp0 ( field - > var , " muc#roomconfig_roomsecret " ) = = 0 ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE | NO_EOL , THEME_ONLINE , " " , " [hidden] " ) ;
2014-09-10 18:59:30 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE | NO_EOL , THEME_ONLINE , " " , value ) ;
2014-09-10 18:59:30 +00:00
}
}
}
win_save_newline ( window ) ;
break ;
case FIELD_TEXT_PRIVATE :
if ( curr_value ! = NULL ) {
char * value = curr_value - > data ;
if ( value ! = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE | NO_EOL , THEME_ONLINE , " " , " [hidden] " ) ;
2014-09-10 18:59:30 +00:00
}
}
win_save_newline ( window ) ;
break ;
case FIELD_TEXT_MULTI :
win_save_newline ( window ) ;
2014-09-14 00:53:52 +00:00
int index = 1 ;
2014-09-10 18:59:30 +00:00
while ( curr_value ! = NULL ) {
char * value = curr_value - > data ;
2014-09-14 17:36:44 +00:00
GString * val_tag = g_string_new ( " " ) ;
g_string_printf ( val_tag , " val%d " , index + + ) ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , THEME_ONLINE , " " , " [%s] %s " , val_tag - > str , value ) ;
2014-09-14 17:36:44 +00:00
g_string_free ( val_tag , TRUE ) ;
2014-09-10 18:59:30 +00:00
curr_value = g_slist_next ( curr_value ) ;
}
break ;
case FIELD_BOOLEAN :
if ( curr_value = = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE , THEME_OFFLINE , " " , " FALSE " ) ;
2014-09-10 18:59:30 +00:00
} else {
char * value = curr_value - > data ;
if ( value = = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE , THEME_OFFLINE , " " , " FALSE " ) ;
2014-09-10 18:59:30 +00:00
} else {
if ( g_strcmp0 ( value , " 0 " ) = = 0 ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE , THEME_OFFLINE , " " , " FALSE " ) ;
2014-09-10 18:59:30 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE , THEME_ONLINE , " " , " TRUE " ) ;
2014-09-10 18:59:30 +00:00
}
}
}
break ;
case FIELD_LIST_SINGLE :
if ( curr_value ! = NULL ) {
win_save_newline ( window ) ;
char * value = curr_value - > data ;
GSList * options = field - > options ;
GSList * curr_option = options ;
while ( curr_option ! = NULL ) {
FormOption * option = curr_option - > data ;
if ( g_strcmp0 ( option - > value , value ) = = 0 ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , THEME_ONLINE , " " , " [%s] %s " , option - > value , option - > label ) ;
2014-09-10 18:59:30 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , THEME_OFFLINE , " " , " [%s] %s " , option - > value , option - > label ) ;
2014-09-10 18:59:30 +00:00
}
curr_option = g_slist_next ( curr_option ) ;
}
}
break ;
2014-09-13 23:18:06 +00:00
case FIELD_LIST_MULTI :
2014-09-10 18:59:30 +00:00
if ( curr_value ! = NULL ) {
win_save_newline ( window ) ;
GSList * options = field - > options ;
GSList * curr_option = options ;
while ( curr_option ! = NULL ) {
FormOption * option = curr_option - > data ;
if ( g_slist_find_custom ( curr_value , option - > value , ( GCompareFunc ) g_strcmp0 ) ! = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , THEME_ONLINE , " " , " [%s] %s " , option - > value , option - > label ) ;
2014-09-10 18:59:30 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , THEME_OFFLINE , " " , " [%s] %s " , option - > value , option - > label ) ;
2014-09-10 18:59:30 +00:00
}
curr_option = g_slist_next ( curr_option ) ;
}
}
break ;
case FIELD_JID_SINGLE :
if ( curr_value ! = NULL ) {
char * value = curr_value - > data ;
if ( value ! = NULL ) {
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE | NO_EOL , THEME_ONLINE , " " , value ) ;
2014-09-10 18:59:30 +00:00
}
}
win_save_newline ( window ) ;
break ;
case FIELD_JID_MULTI :
win_save_newline ( window ) ;
while ( curr_value ! = NULL ) {
char * value = curr_value - > data ;
2014-11-16 20:40:19 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , THEME_ONLINE , " " , " %s " , value ) ;
2014-09-10 18:59:30 +00:00
curr_value = g_slist_next ( curr_value ) ;
}
break ;
case FIELD_FIXED :
if ( curr_value ! = NULL ) {
char * value = curr_value - > data ;
if ( value ! = NULL ) {
win_save_print ( window , ' - ' , NULL , NO_DATE | NO_EOL , 0 , " " , value ) ;
}
}
win_save_newline ( window ) ;
break ;
default :
break ;
}
}
2014-12-22 22:13:42 +00:00
void
ui_show_form ( ProfMucConfWin * confwin )
2014-09-06 23:22:11 +00:00
{
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) confwin ;
2014-12-18 23:57:19 +00:00
if ( confwin - > form - > title ! = NULL ) {
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , NO_EOL , 0 , " " , " Form title: " ) ;
win_save_print ( window , ' - ' , NULL , NO_DATE , 0 , " " , confwin - > form - > title ) ;
2014-09-08 23:14:40 +00:00
} else {
2014-12-21 22:01:56 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Configuration for room %s. " , confwin - > roomjid ) ;
2014-09-06 23:22:11 +00:00
}
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-08 23:14:40 +00:00
2014-12-18 23:57:19 +00:00
ui_show_form_help ( confwin ) ;
2014-09-06 23:22:11 +00:00
2014-12-18 23:57:19 +00:00
GSList * fields = confwin - > form - > fields ;
2014-09-06 23:22:11 +00:00
GSList * curr_field = fields ;
while ( curr_field ! = NULL ) {
FormField * field = curr_field - > data ;
2014-10-01 12:01:20 +00:00
if ( ( g_strcmp0 ( field - > type , " fixed " ) = = 0 ) & & field - > values ) {
if ( field - > values ) {
char * value = field - > values - > data ;
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , value ) ;
2014-10-01 12:01:20 +00:00
}
} else if ( g_strcmp0 ( field - > type , " hidden " ) ! = 0 & & field - > var ) {
2014-12-18 23:57:19 +00:00
char * tag = g_hash_table_lookup ( confwin - > form - > var_to_tag , field - > var ) ;
2014-12-21 19:40:15 +00:00
_ui_handle_form_field ( window , tag , field ) ;
2014-09-06 23:22:11 +00:00
}
curr_field = g_slist_next ( curr_field ) ;
}
2014-09-10 22:05:35 +00:00
}
2014-09-06 23:22:11 +00:00
2014-12-22 22:13:42 +00:00
void
ui_show_form_field ( ProfWin * window , DataForm * form , char * tag )
2014-09-15 22:28:12 +00:00
{
FormField * field = form_get_field_by_tag ( form , tag ) ;
_ui_handle_form_field ( window , tag , field ) ;
win_save_println ( window , " " ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_configuration ( const char * const roomjid , DataForm * form )
2014-09-15 21:51:53 +00:00
{
2014-12-21 22:01:56 +00:00
ProfWin * window = wins_new_muc_config ( roomjid , form ) ;
2014-12-18 23:57:19 +00:00
ProfMucConfWin * confwin = ( ProfMucConfWin * ) window ;
2014-12-22 00:28:03 +00:00
assert ( confwin - > memcheck = = PROFCONFWIN_MEMCHECK ) ;
2014-09-15 21:51:53 +00:00
int num = wins_get_num ( window ) ;
ui_switch_win ( num ) ;
2014-12-18 23:57:19 +00:00
ui_show_form ( confwin ) ;
2014-10-07 20:31:34 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-10-23 23:21:00 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Use '/form submit' to save changes. " ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Use '/form cancel' to cancel changes. " ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " See '/form help' for more information. " ) ;
2014-10-07 20:31:34 +00:00
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-15 21:51:53 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_configuration_form_error ( const char * const roomjid , const char * const message )
2014-09-17 19:59:56 +00:00
{
ProfWin * window = NULL ;
GString * message_str = g_string_new ( " " ) ;
2014-12-20 00:52:35 +00:00
if ( roomjid ) {
window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
g_string_printf ( message_str , " Could not get room configuration for %s " , roomjid ) ;
2014-09-17 19:59:56 +00:00
} else {
window = wins_get_console ( ) ;
g_string_printf ( message_str , " Could not get room configuration " ) ;
}
if ( message ) {
g_string_append ( message_str , " : " ) ;
g_string_append ( message_str , message ) ;
}
2014-11-16 20:40:19 +00:00
win_save_print ( window , ' - ' , NULL , 0 , THEME_ERROR , " " , message_str - > str ) ;
2014-09-17 19:59:56 +00:00
g_string_free ( message_str , TRUE ) ;
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_config_submit_result ( const char * const roomjid )
2014-09-10 22:05:35 +00:00
{
2014-09-17 20:48:55 +00:00
ProfWin * muc_window = NULL ;
ProfWin * form_window = NULL ;
int num ;
2014-12-20 00:52:35 +00:00
if ( roomjid ) {
muc_window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-09-17 20:48:55 +00:00
2014-12-20 00:52:35 +00:00
GString * form_recipient = g_string_new ( roomjid ) ;
g_string_append ( form_recipient , " config " ) ;
form_window = ( ProfWin * ) wins_get_muc_conf ( form_recipient - > str ) ;
2014-09-17 20:48:55 +00:00
g_string_free ( form_recipient , TRUE ) ;
if ( form_window ) {
num = wins_get_num ( form_window ) ;
wins_close_by_num ( num ) ;
}
if ( muc_window ) {
int num = wins_get_num ( muc_window ) ;
ui_switch_win ( num ) ;
2014-11-16 20:40:19 +00:00
win_save_print ( muc_window , ' ! ' , NULL , 0 , THEME_ROOMINFO , " " , " Room configuration successful " ) ;
2014-09-17 20:48:55 +00:00
} else {
ui_switch_win ( 1 ) ;
2014-12-20 00:52:35 +00:00
cons_show ( " Room configuration successful: %s " , roomjid ) ;
2014-09-17 20:48:55 +00:00
}
} else {
2014-09-23 23:30:05 +00:00
cons_show ( " Room configuration successful " ) ;
2014-09-17 20:48:55 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_handle_room_config_submit_result_error ( const char * const roomjid , const char * const message )
2014-09-17 20:48:55 +00:00
{
ProfWin * console = wins_get_console ( ) ;
ProfWin * muc_window = NULL ;
ProfWin * form_window = NULL ;
2014-12-20 00:52:35 +00:00
if ( roomjid ) {
muc_window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-09-17 20:48:55 +00:00
2014-12-20 00:52:35 +00:00
GString * form_recipient = g_string_new ( roomjid ) ;
g_string_append ( form_recipient , " config " ) ;
form_window = ( ProfWin * ) wins_get_muc_conf ( form_recipient - > str ) ;
2014-09-17 20:48:55 +00:00
g_string_free ( form_recipient , TRUE ) ;
if ( form_window ) {
if ( message ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( form_window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Configuration error: %s " , message ) ;
2014-09-17 20:48:55 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( form_window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Configuration error " ) ;
2014-09-17 20:48:55 +00:00
}
} else if ( muc_window ) {
if ( message ) {
2014-11-16 20:40:19 +00:00
win_save_vprint ( muc_window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Configuration error: %s " , message ) ;
2014-09-17 20:48:55 +00:00
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( muc_window , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Configuration error " ) ;
2014-09-17 20:48:55 +00:00
}
} else {
if ( message ) {
2014-12-20 00:52:35 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Configuration error for %s: %s " , roomjid , message ) ;
2014-09-17 20:48:55 +00:00
} else {
2014-12-20 00:52:35 +00:00
win_save_vprint ( console , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Configuration error for %s " , roomjid ) ;
2014-09-17 20:48:55 +00:00
}
}
} else {
2014-11-16 20:40:19 +00:00
win_save_print ( console , ' ! ' , NULL , 0 , THEME_ERROR , " " , " Configuration error " ) ;
2014-09-17 20:48:55 +00:00
}
2014-09-06 23:22:11 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_show_form_field_help ( ProfMucConfWin * confwin , char * tag )
2014-09-16 19:52:38 +00:00
{
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) confwin ;
2014-12-18 23:57:19 +00:00
FormField * field = form_get_field_by_tag ( confwin - > form , tag ) ;
2014-09-16 20:51:16 +00:00
if ( field ! = NULL ) {
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , NO_EOL , 0 , " " , field - > label ) ;
2014-09-16 20:51:16 +00:00
if ( field - > required ) {
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE , 0 , " " , " (Required): " ) ;
2014-09-16 20:51:16 +00:00
} else {
2014-12-21 19:40:15 +00:00
win_save_print ( window , ' - ' , NULL , NO_DATE , 0 , " " , " : " ) ;
2014-09-16 20:51:16 +00:00
}
if ( field - > description ! = NULL ) {
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Description : %s " , field - > description ) ;
2014-09-16 20:51:16 +00:00
}
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Type : %s " , field - > type ) ;
2014-09-16 20:51:16 +00:00
int num_values = 0 ;
GSList * curr_option = NULL ;
FormOption * option = NULL ;
switch ( field - > type_t ) {
case FIELD_TEXT_SINGLE :
case FIELD_TEXT_PRIVATE :
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Set : /%s <value> " , tag ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> is any text " ) ;
2014-09-16 20:51:16 +00:00
break ;
case FIELD_TEXT_MULTI :
2014-12-18 23:57:19 +00:00
num_values = form_get_value_count ( confwin - > form , tag ) ;
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Add : /%s add <value> " , tag ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> is any text " ) ;
2014-09-16 20:51:16 +00:00
if ( num_values > 0 ) {
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Remove : /%s remove <value> " , tag ) ;
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> between 'val1' and 'val%d' " , num_values ) ;
2014-09-16 20:51:16 +00:00
}
break ;
case FIELD_BOOLEAN :
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Set : /%s <value> " , tag ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> is either 'on' or 'off' " ) ;
2014-09-16 20:51:16 +00:00
break ;
case FIELD_LIST_SINGLE :
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Set : /%s <value> " , tag ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> is one of " ) ;
2014-09-16 20:51:16 +00:00
curr_option = field - > options ;
while ( curr_option ! = NULL ) {
option = curr_option - > data ;
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " %s " , option - > value ) ;
2014-09-16 20:51:16 +00:00
curr_option = g_slist_next ( curr_option ) ;
}
break ;
case FIELD_LIST_MULTI :
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Add : /%s add <value> " , tag ) ;
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Remove : /%s remove <value> " , tag ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> is one of " ) ;
2014-09-16 20:51:16 +00:00
curr_option = field - > options ;
while ( curr_option ! = NULL ) {
option = curr_option - > data ;
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " %s " , option - > value ) ;
2014-09-16 20:51:16 +00:00
curr_option = g_slist_next ( curr_option ) ;
}
break ;
case FIELD_JID_SINGLE :
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Set : /%s <value> " , tag ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> is a valid Jabber ID " ) ;
2014-09-16 20:51:16 +00:00
break ;
case FIELD_JID_MULTI :
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Add : /%s add <value> " , tag ) ;
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " Remove : /%s remove <value> " , tag ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Where : <value> is a valid Jabber ID " ) ;
2014-09-16 20:51:16 +00:00
break ;
case FIELD_FIXED :
case FIELD_UNKNOWN :
case FIELD_HIDDEN :
default :
break ;
}
} else {
2014-12-21 19:40:15 +00:00
win_save_vprint ( window , ' - ' , NULL , 0 , 0 , " " , " No such field %s " , tag ) ;
2014-09-16 20:51:16 +00:00
}
2014-09-16 19:52:38 +00:00
}
2014-12-22 22:13:42 +00:00
void
ui_show_form_help ( ProfMucConfWin * confwin )
2014-09-16 19:52:38 +00:00
{
2014-12-18 23:57:19 +00:00
if ( confwin - > form - > instructions ! = NULL ) {
2014-12-21 19:40:15 +00:00
ProfWin * window = ( ProfWin * ) confwin ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " Supplied instructions: " ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , confwin - > form - > instructions ) ;
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , " " ) ;
2014-09-16 19:52:38 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_show_lines ( ProfWin * window , const gchar * * lines )
2014-09-16 19:52:38 +00:00
{
if ( lines ! = NULL ) {
int i ;
for ( i = 0 ; lines [ i ] ! = NULL ; i + + ) {
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , lines [ i ] ) ;
}
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_show_occupants ( const char * const roomjid )
2014-10-09 12:16:36 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-12-16 01:39:47 +00:00
if ( window & & ! win_has_active_subwin ( window ) ) {
2014-10-09 20:42:09 +00:00
wins_show_subwin ( window ) ;
2014-12-20 00:52:35 +00:00
occupantswin_occupants ( roomjid ) ;
2014-10-09 12:16:36 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_room_hide_occupants ( const char * const roomjid )
2014-10-09 12:16:36 +00:00
{
2014-12-20 00:52:35 +00:00
ProfWin * window = ( ProfWin * ) wins_get_muc ( roomjid ) ;
2014-12-16 01:39:47 +00:00
if ( window & & win_has_active_subwin ( window ) ) {
2014-10-09 20:27:16 +00:00
wins_hide_subwin ( window ) ;
2014-10-09 12:16:36 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_show_roster ( void )
2014-11-10 23:23:02 +00:00
{
ProfWin * window = wins_get_console ( ) ;
2014-12-16 01:39:47 +00:00
if ( window & & ! win_has_active_subwin ( window ) ) {
2014-11-10 23:23:02 +00:00
wins_show_subwin ( window ) ;
2014-12-16 23:00:05 +00:00
rosterwin_roster ( ) ;
2014-11-10 23:23:02 +00:00
}
}
2014-12-22 22:13:42 +00:00
void
ui_hide_roster ( void )
2014-11-10 23:23:02 +00:00
{
ProfWin * window = wins_get_console ( ) ;
2014-12-16 01:39:47 +00:00
if ( window & & win_has_active_subwin ( window ) ) {
2014-11-10 23:23:02 +00:00
wins_hide_subwin ( window ) ;
}
}
2015-01-30 23:28:02 +00:00
//static void
//_win_handle_switch(const wint_t ch)
//{
// if (ch == KEY_F(1)) {
// ui_switch_win(1);
// } else if (ch == KEY_F(2)) {
// ui_switch_win(2);
// } else if (ch == KEY_F(3)) {
// ui_switch_win(3);
// } else if (ch == KEY_F(4)) {
// ui_switch_win(4);
// } else if (ch == KEY_F(5)) {
// ui_switch_win(5);
// } else if (ch == KEY_F(6)) {
// ui_switch_win(6);
// } else if (ch == KEY_F(7)) {
// ui_switch_win(7);
// } else if (ch == KEY_F(8)) {
// ui_switch_win(8);
// } else if (ch == KEY_F(9)) {
// ui_switch_win(9);
// } else if (ch == KEY_F(10)) {
// ui_switch_win(0);
// }
//}
//
2012-10-14 21:36:29 +00:00
static void
2014-12-10 21:49:21 +00:00
_win_show_history ( int win_index , const char * const contact )
2012-10-14 21:36:29 +00:00
{
2013-08-20 22:08:21 +00:00
ProfWin * window = wins_get_by_num ( win_index ) ;
2014-12-16 01:39:47 +00:00
if ( window - > type = = WIN_CHAT ) {
2014-12-22 00:01:43 +00:00
ProfChatWin * chatwin = ( ProfChatWin * ) window ;
assert ( chatwin - > memcheck = = PROFCHATWIN_MEMCHECK ) ;
if ( ! chatwin - > history_shown ) {
2014-12-16 01:39:47 +00:00
Jid * jid = jid_create ( jabber_get_fulljid ( ) ) ;
GSList * history = chat_log_get_previous ( jid - > barejid , contact ) ;
jid_destroy ( jid ) ;
GSList * curr = history ;
while ( curr ! = NULL ) {
char * line = curr - > data ;
// entry
if ( line [ 2 ] = = ' : ' ) {
char hh [ 3 ] ; memcpy ( hh , & line [ 0 ] , 2 ) ; hh [ 2 ] = ' \0 ' ; int ihh = atoi ( hh ) ;
char mm [ 3 ] ; memcpy ( mm , & line [ 3 ] , 2 ) ; mm [ 2 ] = ' \0 ' ; int imm = atoi ( mm ) ;
char ss [ 3 ] ; memcpy ( ss , & line [ 6 ] , 2 ) ; ss [ 2 ] = ' \0 ' ; int iss = atoi ( ss ) ;
GDateTime * time = g_date_time_new_local ( 2000 , 1 , 1 , ihh , imm , iss ) ;
GTimeVal tv ;
g_date_time_to_timeval ( time , & tv ) ;
win_save_print ( window , ' - ' , & tv , NO_COLOUR_DATE , 0 , " " , curr - > data + 11 ) ;
g_date_time_unref ( time ) ;
// header
} else {
win_save_print ( window , ' - ' , NULL , 0 , 0 , " " , curr - > data ) ;
}
curr = g_slist_next ( curr ) ;
2014-11-09 00:36:25 +00:00
}
2014-12-16 01:39:47 +00:00
chatwin - > history_shown = TRUE ;
2012-10-14 21:36:29 +00:00
2014-12-16 01:39:47 +00:00
g_slist_free_full ( history , free ) ;
}
2012-10-14 21:36:29 +00:00
}
}
2013-12-22 23:54:22 +00:00