Mercurial > ~mikael > mcabber > hg
annotate mcabber/mcabber/main.c @ 1984:b0470ef8669b
XEP 184: don't send receipts to buddies that have no presence subscription
In order to not leak our presence, do not send message delivery receipts to
senders who are not authorized to view our presence. (XEP-0184, section 8)
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 27 Mar 2011 12:45:41 +0200 |
parents | 2256d0626730 |
children | 7f7c6b87f1b1 |
rev | line source |
---|---|
307 | 1 /* |
2 * main.c | |
393 | 3 * |
1729
e6e89b1d7831
Minor style and header updates
Mikael Berthe <mikael@lilotux.net>
parents:
1702
diff
changeset
|
4 * Copyright (C) 2005-2010 Mikael Berthe <mikael@lilotux.net> |
307 | 5 * |
6 * This program is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or (at | |
9 * your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, but | |
12 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 * General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | |
19 * USA | |
20 */ | |
21 | |
24 | 22 #include <stdio.h> |
23 #include <stdlib.h> | |
24 #include <unistd.h> | |
25 #include <string.h> | |
26 #include <signal.h> | |
27 #include <termios.h> | |
163 | 28 #include <sys/types.h> |
29 #include <sys/wait.h> | |
169 | 30 #include <glib.h> |
404 | 31 #include <config.h> |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
32 #include <poll.h> |
24 | 33 |
1600 | 34 #include "caps.h" |
24 | 35 #include "screen.h" |
279
f5dd437c057b
Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
272
diff
changeset
|
36 #include "settings.h" |
102 | 37 #include "roster.h" |
96 | 38 #include "commands.h" |
113 | 39 #include "histolog.h" |
163 | 40 #include "hooks.h" |
81 | 41 #include "utils.h" |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
42 #include "pgp.h" |
1299
3b338a5c01fc
OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents:
1259
diff
changeset
|
43 #include "otr.h" |
1598 | 44 #include "xmpp.h" |
1678 | 45 #include "help.h" |
1685
1342df44c814
Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1678
diff
changeset
|
46 #include "events.h" |
1426
a64778f5f26b
Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents:
1425
diff
changeset
|
47 |
1941
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
48 #ifndef MODULES_ENABLE |
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
49 # include "fifo.h" |
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
50 #endif |
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
51 |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
52 #ifdef MODULES_ENABLE |
1922
4ba68ad737bc
Increase the number of available categories for completions
Mikael Berthe <mikael@lilotux.net>
parents:
1916
diff
changeset
|
53 # include "compl.h" |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
54 # include "modules.h" |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
55 #endif |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
56 |
781
d3af6877a7df
Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents:
779
diff
changeset
|
57 #ifdef ENABLE_HGCSET |
d3af6877a7df
Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents:
779
diff
changeset
|
58 # include "hgcset.h" |
d3af6877a7df
Add --enable-hgcset to configure script
Mikael Berthe <mikael@lilotux.net>
parents:
779
diff
changeset
|
59 #endif |
24 | 60 |
801
d8e0a1ce3e8a
Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents:
789
diff
changeset
|
61 #ifndef WAIT_ANY |
1053 | 62 # define WAIT_ANY -1 |
801
d8e0a1ce3e8a
Define WAIT_ANY if needed.
Soren Andersen <somian@pobox.com>
parents:
789
diff
changeset
|
63 #endif |
24 | 64 |
1359
7daf906fbcdc
The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents:
1313
diff
changeset
|
65 static unsigned int terminate_ui; |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
66 GMainContext *main_context; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
67 |
789
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
68 static struct termios *backup_termios; |
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
69 |
777
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
70 char *mcabber_version(void) |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
71 { |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
72 char *ver; |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
73 #ifdef HGCSET |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
74 ver = g_strdup_printf("%s (%s)", PACKAGE_VERSION, HGCSET); |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
75 #else |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
76 ver = g_strdup(PACKAGE_VERSION); |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
77 #endif |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
78 return ver; |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
79 } |
e6d42f239541
"/version" shows Mercurial changeset (if there's one)
Mikael Berthe <mikael@lilotux.net>
parents:
774
diff
changeset
|
80 |
962
e79af58cd0be
mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents:
961
diff
changeset
|
81 static void mcabber_terminate(const char *msg) |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
82 { |
1941
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
83 #ifndef MODULES_ENABLE |
1659
2536a4b5e370
Re-add fifo_deinit() in mcabber_terminate() (isbear)
Mikael Berthe <mikael@lilotux.net>
parents:
1658
diff
changeset
|
84 fifo_deinit(); |
1941
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
85 #endif |
1598 | 86 xmpp_disconnect(); |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
87 scr_terminate_curses(); |
789
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
88 |
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
89 // Restore term settings, if needed. |
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
90 if (backup_termios) |
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
91 tcsetattr(fileno(stdin), TCSAFLUSH, backup_termios); |
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
92 |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
93 if (msg) |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
94 fprintf(stderr, "%s\n", msg); |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
95 printf("Bye!\n"); |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
96 exit(EXIT_SUCCESS); |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
97 } |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
98 |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
99 void sig_handler(int signum) |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
100 { |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
101 if (signum == SIGCHLD) { |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
102 int status; |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
103 pid_t pid; |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
104 do { |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
105 pid = waitpid (WAIT_ANY, &status, WNOHANG); |
676
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
106 // Check the exit status value if 'eventcmd_checkstatus' is set |
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
107 if (settings_opt_get_int("eventcmd_checkstatus")) { |
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
108 if (pid > 0) { |
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
109 // exit status 2 -> beep |
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
110 if (WIFEXITED(status) && WEXITSTATUS(status) == 2) { |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
111 scr_beep(); |
676
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
112 } |
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
113 } |
80d4959422ca
New "eventcmd_checkstatus" option
Mikael Berthe <mikael@lilotux.net>
parents:
580
diff
changeset
|
114 } |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
115 } while (pid > 0); |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
116 signal(SIGCHLD, sig_handler); |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
117 } else if (signum == SIGTERM) { |
962
e79af58cd0be
mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents:
961
diff
changeset
|
118 mcabber_terminate("Killed by SIGTERM"); |
389
6e895f397474
Ncurses changes + Ctrl-C does not send a signal anylore
Mikael Berthe <mikael@lilotux.net>
parents:
374
diff
changeset
|
119 } else if (signum == SIGINT) { |
962
e79af58cd0be
mcabber_disconnect() -> static mcabber_terminate()
Mikael Berthe <mikael@lilotux.net>
parents:
961
diff
changeset
|
120 mcabber_terminate("Killed by SIGINT"); |
1454
6b98dc22946d
Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents:
1448
diff
changeset
|
121 #ifdef USE_SIGWINCH |
6b98dc22946d
Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents:
1448
diff
changeset
|
122 } else if (signum == SIGWINCH) { |
6b98dc22946d
Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents:
1448
diff
changeset
|
123 ungetch(KEY_RESIZE); |
6b98dc22946d
Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents:
1448
diff
changeset
|
124 #endif |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
125 } else { |
374
bd5638c21834
Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents:
364
diff
changeset
|
126 scr_LogPrint(LPRINT_LOGNORM, "Caught signal: %d", signum); |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
127 } |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
128 } |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
129 |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
130 // ask_password(what) |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
131 // Return the password, or NULL. |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
132 // The string must be freed after use. |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
133 static char *ask_password(const char *what) |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
134 { |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
135 char *password, *p; |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
136 size_t passsize = 128; |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
137 struct termios orig, new; |
482
2ea7591584ab
Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents:
429
diff
changeset
|
138 |
2ea7591584ab
Use fgets() instead of getline()
Mikael Berthe <mikael@lilotux.net>
parents:
429
diff
changeset
|
139 password = g_new0(char, passsize); |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
140 |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
141 /* Turn echoing off and fail if we can't. */ |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
142 if (tcgetattr(fileno(stdin), &orig) != 0) return NULL; |
789
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
143 backup_termios = &orig; |
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
144 |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
145 new = orig; |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
146 new.c_lflag &= ~ECHO; |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
147 if (tcsetattr(fileno(stdin), TCSAFLUSH, &new) != 0) return NULL; |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
148 |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
149 /* Read the password. */ |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
150 printf("Please enter %s: ", what); |
1598 | 151 if (fgets(password, passsize, stdin) == NULL) return NULL; |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
152 |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
153 /* Restore terminal. */ |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
154 tcsetattr(fileno(stdin), TCSAFLUSH, &orig); |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
155 printf("\n"); |
789
1fa93cc6f5e3
Correctly restore term settings when interrupting the password query
Mikael Berthe <mikael@lilotux.net>
parents:
784
diff
changeset
|
156 backup_termios = NULL; |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
157 |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
158 for (p = (char*)password; *p; p++) |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
159 ; |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
160 for ( ; p > (char*)password ; p--) |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
161 if (*p == '\n' || *p == '\r') *p = 0; |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
162 |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
163 return password; |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
164 } |
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
165 |
784
d7f3b58db522
Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents:
781
diff
changeset
|
166 static void credits(void) |
24 | 167 { |
895 | 168 const char *v_fmt = "MCabber %s -- Email: mcabber [at] lilotux [dot] net\n"; |
784
d7f3b58db522
Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents:
781
diff
changeset
|
169 char *v = mcabber_version(); |
851
da03534e46c7
Add startup log messages to the status buffer
Mikael Berthe <mikael@lilotux.net>
parents:
848
diff
changeset
|
170 printf(v_fmt, v); |
1897
efd7c4c34ff2
Display mcabber version when starting a trace log
Mikael Berthe <mikael@lilotux.net>
parents:
1894
diff
changeset
|
171 scr_LogPrint(LPRINT_NORMAL|LPRINT_NOTUTF8, v_fmt, v); |
784
d7f3b58db522
Display hgcset (if defined) at startup
Mikael Berthe <mikael@lilotux.net>
parents:
781
diff
changeset
|
172 g_free(v); |
24 | 173 } |
174 | |
1257
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
175 static void compile_options(void) |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
176 { |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
177 puts("Installation data directory: " DATA_DIR "\n"); |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
178 #ifdef HAVE_UNICODE |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
179 puts("Compiled with unicode support."); |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
180 #endif |
1630
141ae278e769
Reorder feature list in mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents:
1628
diff
changeset
|
181 #ifdef MODULES_ENABLE |
1764
6e856c5858c3
Display module API version with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents:
1744
diff
changeset
|
182 printf("Compiled with modules support. (API %s:%d-%d)\n", |
6e856c5858c3
Display module API version with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents:
1744
diff
changeset
|
183 MCABBER_BRANCH, MCABBER_API_MIN, MCABBER_API_VERSION); |
1702
02039190532d
Display modules directory with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents:
1685
diff
changeset
|
184 # ifdef PKGLIB_DIR |
1764
6e856c5858c3
Display module API version with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents:
1744
diff
changeset
|
185 puts("Modules directory: " PKGLIB_DIR); |
1702
02039190532d
Display modules directory with mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents:
1685
diff
changeset
|
186 # endif |
1630
141ae278e769
Reorder feature list in mcabber -V
Mikael Berthe <mikael@lilotux.net>
parents:
1628
diff
changeset
|
187 #endif |
1257
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
188 #ifdef HAVE_GPGME |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
189 puts("Compiled with GPG support."); |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
190 #endif |
1299
3b338a5c01fc
OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents:
1259
diff
changeset
|
191 #ifdef HAVE_LIBOTR |
3b338a5c01fc
OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents:
1259
diff
changeset
|
192 puts("Compiled with OTR support."); |
3b338a5c01fc
OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents:
1259
diff
changeset
|
193 #endif |
1590
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
194 #ifdef WITH_ENCHANT |
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
195 puts("Compiled with Enchant support."); |
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
196 #endif |
1257
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
197 #ifdef WITH_ASPELL |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
198 puts("Compiled with Aspell support."); |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
199 #endif |
1423
757ebe4df0b9
Replace DEBUG_ENABLE with ENABLE_DEBUG
Mikael Berthe <mikael@lilotux.net>
parents:
1421
diff
changeset
|
200 #ifdef ENABLE_DEBUG |
1257
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
201 puts("Compiled with debugging support."); |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
202 #endif |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
203 } |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
204 |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
205 static void main_init_pgp(void) |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
206 { |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
207 #ifdef HAVE_GPGME |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
208 const char *pk, *pp; |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
209 char *typed_passwd = NULL; |
1238
80008fe2a4f2
Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents:
1223
diff
changeset
|
210 char *p; |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
211 bool pgp_invalid = FALSE; |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
212 bool pgp_agent; |
1313
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
213 int retries; |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
214 |
1238
80008fe2a4f2
Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents:
1223
diff
changeset
|
215 p = getenv("GPG_AGENT_INFO"); |
80008fe2a4f2
Re-enable gpg-agent (revert 591d8b35c881)
Mikael Berthe <mikael@lilotux.net>
parents:
1223
diff
changeset
|
216 pgp_agent = (p && strchr(p, ':')); |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
217 |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
218 pk = settings_opt_get("pgp_private_key"); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
219 pp = settings_opt_get("pgp_passphrase"); |
1313
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
220 |
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
221 if (settings_opt_get("pgp_passphrase_retries")) |
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
222 retries = settings_opt_get_int("pgp_passphrase_retries"); |
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
223 else |
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
224 retries = 2; |
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
225 |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
226 if (!pk) { |
1597
4f59a414217e
Fix typo reported by rhonda
Mikael Berthe <mikael@lilotux.net>
parents:
1590
diff
changeset
|
227 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unknown PGP private key"); |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
228 pgp_invalid = TRUE; |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
229 } else if (!(pp || pgp_agent)) { |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
230 // Request PGP passphrase |
1799
e73cd9377a4e
Better UI message for password prompt
Mikael Berthe <mikael@lilotux.net>
parents:
1780
diff
changeset
|
231 pp = typed_passwd = ask_password("your PGP passphrase"); |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
232 } |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
233 gpg_init(pk, pp); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
234 // Erase password from the settings array |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
235 if (pp) { |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
236 memset((char*)pp, 0, strlen(pp)); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
237 if (typed_passwd) |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
238 g_free(typed_passwd); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
239 else |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
240 settings_set(SETTINGS_TYPE_OPTION, "pgp_passphrase", NULL); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
241 } |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
242 if (!pgp_agent && pk && pp && gpg_test_passphrase()) { |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
243 // Let's check the pasphrase |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
244 int i; |
1313
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
245 for (i = 1; retries < 0 || i <= retries; i++) { |
1799
e73cd9377a4e
Better UI message for password prompt
Mikael Berthe <mikael@lilotux.net>
parents:
1780
diff
changeset
|
246 typed_passwd = ask_password("your PGP passphrase"); // Ask again... |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
247 if (typed_passwd) { |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
248 gpg_set_passphrase(typed_passwd); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
249 memset(typed_passwd, 0, strlen(typed_passwd)); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
250 g_free(typed_passwd); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
251 } |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
252 if (!gpg_test_passphrase()) |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
253 break; // Ok |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
254 } |
1313
d1d12a09b04a
Make passphrase entry retries customizable (suggested by Till Maas)
Mikael Berthe <mikael@lilotux.net>
parents:
1311
diff
changeset
|
255 if (i > retries) |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
256 pgp_invalid = TRUE; |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
257 } |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
258 if (pgp_invalid) |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
259 scr_LogPrint(LPRINT_LOGNORM, "WARNING: PGP key/pass invalid"); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
260 #else /* not HAVE_GPGME */ |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
261 scr_LogPrint(LPRINT_LOGNORM, "WARNING: not compiled with PGP support"); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
262 #endif /* HAVE_GPGME */ |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
263 } |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
264 |
1359
7daf906fbcdc
The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents:
1313
diff
changeset
|
265 void mcabber_set_terminate_ui(void) |
7daf906fbcdc
The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents:
1313
diff
changeset
|
266 { |
7daf906fbcdc
The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents:
1313
diff
changeset
|
267 terminate_ui = TRUE; |
7daf906fbcdc
The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents:
1313
diff
changeset
|
268 } |
7daf906fbcdc
The command /quit can be used in bindings, hooks and sourced files
Mikael Berthe <mikael@lilotux.net>
parents:
1313
diff
changeset
|
269 |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
270 typedef struct { |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
271 GSource source; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
272 GPollFD pollfd; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
273 } mcabber_source_t; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
274 |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
275 static gboolean mcabber_source_prepare(GSource *source, gint *timeout) |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
276 { |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
277 *timeout = -1; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
278 return FALSE; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
279 } |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
280 |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
281 static gboolean mcabber_source_check(GSource *source) |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
282 { |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
283 mcabber_source_t *mc_source = (mcabber_source_t *) source; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
284 gushort revents = mc_source->pollfd.revents; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
285 if (revents) |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
286 return TRUE; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
287 return FALSE; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
288 } |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
289 |
1657
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
290 static gboolean keyboard_activity(void) |
1598 | 291 { |
292 keycode kcode; | |
293 | |
294 if (terminate_ui) { | |
295 return FALSE; | |
296 } | |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
297 scr_do_update(); |
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
298 scr_getch(&kcode); |
1598 | 299 |
1618 | 300 while (kcode.value != ERR) { |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
301 scr_process_key(kcode); |
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
302 scr_getch(&kcode); |
1618 | 303 } |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
304 scr_check_auto_away(FALSE); |
1598 | 305 |
306 return TRUE; | |
307 } | |
308 | |
1657
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
309 static gboolean mcabber_source_dispatch(GSource *source, GSourceFunc callback, |
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
310 gpointer udata) { |
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
311 return keyboard_activity(); |
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
312 } |
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
313 |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
314 static GSourceFuncs mcabber_source_funcs = { |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
315 mcabber_source_prepare, |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
316 mcabber_source_check, |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
317 mcabber_source_dispatch, |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
318 NULL, |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
319 NULL, |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
320 NULL |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
321 }; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
322 |
24 | 323 int main(int argc, char **argv) |
324 { | |
169 | 325 char *configFile = NULL; |
281
f562b9af2de7
Add "const" specifier in prototypes
Mikael Berthe <mikael@lilotux.net>
parents:
279
diff
changeset
|
326 const char *optstring; |
177 | 327 int optval, optval2; |
333
db5bebe96c89
New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents:
322
diff
changeset
|
328 int ret; |
24 | 329 |
330 credits(); | |
331 | |
332 signal(SIGTERM, sig_handler); | |
312
f0b7ff2df7e8
Ctrl-C does not terminate mcabber
Mikael Berthe <mikael@lilotux.net>
parents:
307
diff
changeset
|
333 signal(SIGINT, sig_handler); |
163 | 334 signal(SIGCHLD, sig_handler); |
1454
6b98dc22946d
Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents:
1448
diff
changeset
|
335 #ifdef USE_SIGWINCH |
6b98dc22946d
Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents:
1448
diff
changeset
|
336 signal(SIGWINCH, sig_handler); |
6b98dc22946d
Add optional SIGWINCH handler (Markus Hennecke)
Mikael Berthe <mikael@lilotux.net>
parents:
1448
diff
changeset
|
337 #endif |
413 | 338 signal(SIGPIPE, SIG_IGN); |
24 | 339 |
77 | 340 /* Parse command line options */ |
24 | 341 while (1) { |
1259
c5c09f8f60b0
Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents:
1257
diff
changeset
|
342 int c = getopt(argc, argv, "hVf:"); |
24 | 343 if (c == -1) { |
344 break; | |
345 } else | |
346 switch (c) { | |
347 case 'h': | |
1256
ea679e3598a9
Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents:
1253
diff
changeset
|
348 case '?': |
1259
c5c09f8f60b0
Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents:
1257
diff
changeset
|
349 printf("Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]); |
1256
ea679e3598a9
Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents:
1253
diff
changeset
|
350 return (c == 'h' ? 0 : -1); |
1259
c5c09f8f60b0
Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents:
1257
diff
changeset
|
351 case 'V': |
1257
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
352 compile_options(); |
05dc45e7c7bb
Add command line option -v
Mikael Berthe <mikael@lilotux.net>
parents:
1256
diff
changeset
|
353 return 0; |
24 | 354 case 'f': |
1241 | 355 configFile = g_strdup(optarg); |
356 break; | |
24 | 357 } |
358 } | |
359 | |
1256
ea679e3598a9
Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents:
1253
diff
changeset
|
360 if (optind < argc) { |
1259
c5c09f8f60b0
Change command line option -v to -V
Mikael Berthe <mikael@lilotux.net>
parents:
1257
diff
changeset
|
361 fprintf(stderr, "Usage: %s [-h|-V|-f mcabberrc_file]\n\n", argv[0]); |
1256
ea679e3598a9
Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents:
1253
diff
changeset
|
362 return -1; |
ea679e3598a9
Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents:
1253
diff
changeset
|
363 } |
ea679e3598a9
Don't start when command line options are wrong
Mikael Berthe <mikael@lilotux.net>
parents:
1253
diff
changeset
|
364 |
1176
547a8ca7c1a8
Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents:
1173
diff
changeset
|
365 /* Initialize command system, roster and default key bindings */ |
333
db5bebe96c89
New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents:
322
diff
changeset
|
366 cmd_init(); |
848
a9161d2dc414
Introduce special buffer stuff
Mikael Berthe <mikael@lilotux.net>
parents:
815
diff
changeset
|
367 roster_init(); |
1065
230dca34dbea
Extand pgp_data structure
Mikael Berthe <mikael@lilotux.net>
parents:
1058
diff
changeset
|
368 settings_init(); |
1176
547a8ca7c1a8
Move init_bindings() to screen.c, with a few updates
Mikael Berthe <mikael@lilotux.net>
parents:
1173
diff
changeset
|
369 scr_init_bindings(); |
1600 | 370 caps_init(); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
371 #ifdef MODULES_ENABLE |
1922
4ba68ad737bc
Increase the number of available categories for completions
Mikael Berthe <mikael@lilotux.net>
parents:
1916
diff
changeset
|
372 compl_init_system(); |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
373 modules_init(); |
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
374 #endif |
779
057ffe7c43dc
Initialize locale charset earlier
Mikael Berthe <mikael@lilotux.net>
parents:
777
diff
changeset
|
375 /* Initialize charset */ |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
376 scr_init_locale_charset(); |
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
377 ut_init_debug(); |
1678 | 378 help_init(); |
333
db5bebe96c89
New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents:
322
diff
changeset
|
379 |
24 | 380 /* Parsing config file... */ |
1192 | 381 ret = cfg_read_file(configFile, TRUE); |
374
bd5638c21834
Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents:
364
diff
changeset
|
382 /* free() configFile if it has been allocated during options parsing */ |
774
46304b773a44
Remove useless checks before g_free() calls
Mikael Berthe <mikael@lilotux.net>
parents:
772
diff
changeset
|
383 g_free(configFile); |
333
db5bebe96c89
New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents:
322
diff
changeset
|
384 /* Leave if there was an error in the config. file */ |
872
a0ddc43b421e
Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
855
diff
changeset
|
385 if (ret == -2) |
333
db5bebe96c89
New config. file parsing
Mikael Berthe <mikael@lilotux.net>
parents:
322
diff
changeset
|
386 exit(EXIT_FAILURE); |
24 | 387 |
1894
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
388 /* Display configuration settings */ |
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
389 { |
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
390 const char *p; |
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
391 if ((p = settings_opt_get("server")) != NULL) |
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
392 scr_log_print(LPRINT_NORMAL, "Server: %s", p); |
1900
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
393 if ((p = settings_opt_get("jid")) != NULL) { |
1894
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
394 scr_log_print(LPRINT_NORMAL, "User JID: %s", p); |
1900
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
395 } else if (settings_opt_get("username")) { |
1916
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
396 /* TODO: remove after 0.10.2/3 */ |
1900
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
397 scr_log_print(LPRINT_NORMAL, "** ERROR: The JID is missing, but " |
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
398 "the variable 'username' is defined in your " |
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
399 "configuration file.\n" |
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
400 "** Please update your configuration file and set " |
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
401 "the 'jid' variable."); |
5dc0fd8225e3
Display a warning when the configuration file hasn't been updated
Mikael Berthe <mikael@lilotux.net>
parents:
1897
diff
changeset
|
402 } |
1916
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
403 |
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
404 if (settings_opt_get("ssl_verify")) { // Deprecated option |
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
405 /* TODO: remove after 0.10.2/3 */ |
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
406 scr_log_print(LPRINT_NORMAL, |
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
407 "** ERROR: The option ssl_verify is deprecated.\n" |
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
408 "** Please update your configuration file and use " |
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
409 "the 'ssl_ignore_checks' variable."); |
a87ac75872fe
Display a warning when the option ssl_verify is still used
Mikael Berthe <mikael@lilotux.net>
parents:
1901
diff
changeset
|
410 } |
1894
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
411 } |
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
412 |
306
b2d11b11675f
Fix interactive password prompt
Mikael Berthe <mikael@lilotux.net>
parents:
300
diff
changeset
|
413 /* If no password is stored, we ask for it before entering |
872
a0ddc43b421e
Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
855
diff
changeset
|
414 ncurses mode -- unless the username is unknown. */ |
1610
6db9f403f707
Replace 'username' with 'jid' in the configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
1607
diff
changeset
|
415 if (settings_opt_get("jid") && !settings_opt_get("password")) { |
1894
c3271ac96173
Display the JID before attempting to connect
Mikael Berthe <mikael@lilotux.net>
parents:
1811
diff
changeset
|
416 char *pwd = ask_password("your Jabber password"); |
1123 | 417 settings_set(SETTINGS_TYPE_OPTION, "password", pwd); |
418 g_free(pwd); | |
415
5692c3a13202
Display the server name/IP before asking for password
Mikael Berthe <mikael@lilotux.net>
parents:
413
diff
changeset
|
419 } |
24 | 420 |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
421 /* Initialize PGP system |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
422 We do it before ncurses initialization because we may need to request |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
423 a passphrase. */ |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
424 if (settings_opt_get_int("pgp")) |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
425 main_init_pgp(); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
426 |
24 | 427 /* Initialize N-Curses */ |
374
bd5638c21834
Improve logging system (traces)
Mikael Berthe <mikael@lilotux.net>
parents:
364
diff
changeset
|
428 scr_LogPrint(LPRINT_DEBUG, "Initializing N-Curses..."); |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
429 scr_init_curses(); |
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
430 scr_draw_main_window(TRUE); |
29 | 431 |
279
f5dd437c057b
Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
272
diff
changeset
|
432 optval = (settings_opt_get_int("logging") > 0); |
f5dd437c057b
Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
272
diff
changeset
|
433 optval2 = (settings_opt_get_int("load_logs") > 0); |
177 | 434 if (optval || optval2) |
298
35cda94e570d
Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents:
281
diff
changeset
|
435 hlog_enable(optval, settings_opt_get("logging_dir"), optval2); |
113 | 436 |
1590
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
437 #if defined(WITH_ENCHANT) || defined(WITH_ASPELL) |
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
438 /* Initialize spelling */ |
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
439 if (settings_opt_get_int("spell_enable")) { |
1179 | 440 spellcheck_init(); |
441 } | |
442 #endif | |
443 | |
279
f5dd437c057b
Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
272
diff
changeset
|
444 optstring = settings_opt_get("events_command"); |
f5dd437c057b
Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents:
272
diff
changeset
|
445 if (optstring) |
160 | 446 hk_ext_cmd_init(optstring); |
447 | |
1632
d29376ef424d
Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents:
1630
diff
changeset
|
448 optstring = settings_opt_get("roster_display_filter"); |
d29376ef424d
Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents:
1630
diff
changeset
|
449 if (optstring) |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
450 scr_roster_display(optstring); |
1632
d29376ef424d
Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents:
1630
diff
changeset
|
451 // Empty filter isn't allowed... |
d29376ef424d
Remove deprecated option ('hide_offline_buddies')
Mikael Berthe <mikael@lilotux.net>
parents:
1630
diff
changeset
|
452 if (!buddylist_get_filter()) |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
453 scr_roster_display("*"); |
87 | 454 |
993
0759f4c7da68
Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents:
962
diff
changeset
|
455 chatstates_disabled = settings_opt_get_int("disable_chatstates"); |
0759f4c7da68
Add option 'disable_chatstates'
Mikael Berthe <mikael@lilotux.net>
parents:
962
diff
changeset
|
456 |
1941
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
457 #ifndef MODULES_ENABLE |
1426
a64778f5f26b
Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents:
1425
diff
changeset
|
458 /* Initialize FIFO named pipe */ |
1940
7eadf86039e6
Use guard for the fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1936
diff
changeset
|
459 fifo_init(); |
1941
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
460 #endif |
1426
a64778f5f26b
Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents:
1425
diff
changeset
|
461 |
1437
071c8170b7de
Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents:
1426
diff
changeset
|
462 /* Load previous roster state */ |
071c8170b7de
Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents:
1426
diff
changeset
|
463 hlog_load_state(); |
071c8170b7de
Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents:
1426
diff
changeset
|
464 |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
465 main_context = g_main_context_default(); |
1598 | 466 |
872
a0ddc43b421e
Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
855
diff
changeset
|
467 if (ret < 0) { |
a0ddc43b421e
Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
855
diff
changeset
|
468 scr_LogPrint(LPRINT_NORMAL, "No configuration file has been found."); |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
469 scr_show_buddy_window(); |
872
a0ddc43b421e
Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
855
diff
changeset
|
470 } else { |
a0ddc43b421e
Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
855
diff
changeset
|
471 /* Connection */ |
1810
8c2651fc217a
Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents:
1799
diff
changeset
|
472 if (xmpp_connect()) |
8c2651fc217a
Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents:
1799
diff
changeset
|
473 scr_show_buddy_window(); |
872
a0ddc43b421e
Don't stop when there is no configuration file
Mikael Berthe <mikael@lilotux.net>
parents:
855
diff
changeset
|
474 } |
298
35cda94e570d
Add /connect and /disconnect commands
Mikael Berthe <mikael@lilotux.net>
parents:
281
diff
changeset
|
475 |
1810
8c2651fc217a
Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents:
1799
diff
changeset
|
476 // Initial drawing |
8c2651fc217a
Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents:
1799
diff
changeset
|
477 scr_draw_roster(); |
8c2651fc217a
Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents:
1799
diff
changeset
|
478 scr_do_update(); |
8c2651fc217a
Improve initial display when there is an error message
Mikael Berthe <mikael@lilotux.net>
parents:
1799
diff
changeset
|
479 |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
480 { // add keypress processing source |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
481 GSource *mc_source = g_source_new(&mcabber_source_funcs, |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
482 sizeof(mcabber_source_t)); |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
483 GPollFD *mc_pollfd = &(((mcabber_source_t *)mc_source)->pollfd); |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
484 mc_pollfd->fd = STDIN_FILENO; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
485 mc_pollfd->events = POLLIN|POLLERR|POLLPRI; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
486 mc_pollfd->revents = 0; |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
487 g_source_add_poll(mc_source, mc_pollfd); |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
488 g_source_attach(mc_source, main_context); |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
489 |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
490 scr_LogPrint(LPRINT_DEBUG, "Entering into main loop..."); |
112 | 491 |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
492 while(!terminate_ui) { |
1657
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
493 if (g_main_context_iteration(main_context, TRUE) == FALSE) |
c4ee6d99f75b
Fix resize event handling issue (reported by mvuets)
Mikael Berthe <mikael@lilotux.net>
parents:
1653
diff
changeset
|
494 keyboard_activity(); |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
495 if (update_roster) |
1780
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
496 scr_draw_roster(); |
e4378fbab5d7
Major API cleanup - bump API to 4
Mikael Berthe <mikael@lilotux.net>
parents:
1764
diff
changeset
|
497 scr_do_update(); |
1653
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
498 } |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
499 |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
500 g_source_destroy(mc_source); |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
501 g_source_unref(mc_source); |
fca9a4c17432
Improve UI latency and CPU usage
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1643
diff
changeset
|
502 } |
24 | 503 |
1685
1342df44c814
Improved events interface
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1678
diff
changeset
|
504 evs_deinit(); |
1607 | 505 #ifdef MODULES_ENABLE |
1735
5093b5ca1572
New modules loading scheme
Myhailo Danylenko <isbear@ukrpost.net>
parents:
1729
diff
changeset
|
506 modules_deinit(); |
1607 | 507 #endif |
1941
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
508 #ifndef MODULES_ENABLE |
1426
a64778f5f26b
Implement FIFO named command pipe
Mikael Berthe <mikael@lilotux.net>
parents:
1425
diff
changeset
|
509 fifo_deinit(); |
1941
2256d0626730
Modularize fifo system (Myhailo Danylenko)
Mikael Berthe <mikael@lilotux.net>
parents:
1940
diff
changeset
|
510 #endif |
1299
3b338a5c01fc
OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents:
1259
diff
changeset
|
511 #ifdef HAVE_LIBOTR |
3b338a5c01fc
OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents:
1259
diff
changeset
|
512 otr_terminate(); |
3b338a5c01fc
OTR support
Frank Zschockelt <mcabber_otr[at]freakysoft.de>
parents:
1259
diff
changeset
|
513 #endif |
1598 | 514 xmpp_disconnect(); |
1042
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
515 #ifdef HAVE_GPGME |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
516 gpg_terminate(); |
8a395c2cafc4
Initial PGP support (decrypt)
Mikael Berthe <mikael@lilotux.net>
parents:
993
diff
changeset
|
517 #endif |
1590
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
518 #if defined(WITH_ENCHANT) || defined(WITH_ASPELL) |
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
519 /* Deinitialize spelling */ |
8d1bcc83ae32
Add support for spellchecking with Enchant (caolan)
Mikael Berthe <mikael@lilotux.net>
parents:
1545
diff
changeset
|
520 if (settings_opt_get_int("spell_enable")) |
1179 | 521 spellcheck_deinit(); |
522 #endif | |
1936
9e6e53821fb3
Do not terminate ncurses too early
Mikael Berthe <mikael@lilotux.net>
parents:
1922
diff
changeset
|
523 |
9e6e53821fb3
Do not terminate ncurses too early
Mikael Berthe <mikael@lilotux.net>
parents:
1922
diff
changeset
|
524 scr_terminate_curses(); |
1437
071c8170b7de
Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents:
1426
diff
changeset
|
525 /* Save pending message state */ |
071c8170b7de
Add option 'statefile' to keep track of unread messages across restarts
Mikael Berthe <mikael@lilotux.net>
parents:
1426
diff
changeset
|
526 hlog_save_state(); |
1600 | 527 caps_free(); |
24 | 528 |
961
95659cf9ea1a
Display mcabber version in the status window
Mikael Berthe <mikael@lilotux.net>
parents:
955
diff
changeset
|
529 printf("\n\nThanks for using mcabber!\n"); |
24 | 530 |
531 return 0; | |
532 } | |
576 | 533 |
1811 | 534 /* vim: set expandtab cindent cinoptions=>2\:2(0 sw=2 ts=2: For Vim users... */ |