1 #ifndef __ICQCONF_H__
2 #define __ICQCONF_H__
3 
4 #include "icqcommon.h"
5 
6 #include <stdio.h>
7 #include <fcntl.h>
8 #include <dirent.h>
9 
10 #include "config.h"
11 
12 #include "kkstrtext.h"
13 #include "kkfsys.h"
14 #include "conscommon.h"
15 #include "colorschemer.h"
16 
17 #include "icqgroup.h"
18 
19 #include "captcha.h"
20 
21 enum cicq_colorpairs {
22     cp_status = 1,
23     cp_dialog_text,
24     cp_dialog_menu,
25     cp_dialog_selected,
26     cp_dialog_highlight,
27     cp_dialog_frame,
28     cp_main_text,
29     cp_main_menu,
30     cp_main_selected,
31     cp_main_highlight,
32     cp_main_frame,
33     cp_main_history_incoming,
34     cp_main_history_outgoing,
35     cp_clist_icq,
36     cp_clist_yahoo,
37     cp_clist_infocard,
38     cp_clist_msn,
39     cp_clist_aim,
40     cp_clist_irc,
41     cp_clist_jabber,
42     cp_clist_rss,
43     cp_clist_lj,
44     cp_clist_gadu,
45     cp_clist_online,
46     cp_clist_offline,
47     cp_clist_away,
48     cp_clist_dnd,
49     cp_clist_na,
50     cp_clist_occupied,
51     cp_clist_free_for_chat,
52     cp_clist_invisible,
53     cp_clist_not_in_list,
54     cp_clist_unread,
55 };
56 
57 enum cicq_keybindings {
58     section_contact,
59     section_history,
60     section_editor,
61     section_info,
62     key_info,
63     key_quit,
64     key_change_status,
65     key_history,
66     key_fetch_away_message,
67     key_user_menu,
68     key_general_menu,
69     key_hide_offline,
70     key_contact_external_action,
71     key_add,
72     key_fullscreen,
73     key_remove,
74     key_send_message,
75     key_compose,
76     key_send_contact,
77     key_send_url,
78     key_rename,
79     key_version,
80     key_edit,
81     key_ignore,
82     key_quickfind,
83     key_search,
84     key_search_again,
85     key_next_chat,
86     key_prev_chat,
87     key_out_chat,
88     key_show_urls,
89     key_rss_check,
90     key_multiple_recipients,
91     key_user_external_action,
92     key_left_panel_move_right,
93     key_left_panel_move_left,
94     key_log_panel_move_up,
95     key_log_panel_move_down,
96     key_chat_panel_move_up,
97     key_chat_panel_move_down,
98     key_otr_start_session,
99     key_otr_end_session
100 };
101 
102 class icqconf {
103     public:
104 	enum regsound { rscard, rsspeaker, rsdisable, rsdontchange };
105 	enum regcolor { rcdark, rcblue, rcdontchange };
106 	enum groupmode { group1, group2, nogroups };
107 	enum colormode { cmproto, cmstatus };
108 	// leave the sort_by_nb_of_sorts as the last value
109 	// do not forget to add the new sort types to the icqcontacts.cc
110 	enum sortmode { sort_by_status_and_activity,
111 			sort_by_status_and_name,
112 			sort_by_activity,
113 			sort_by_name,
114 			sort_by_nb_of_sorts};
115 
116 	struct imserver {
117 	    string server;
118 	    int port, secureport;
119 	};
120 
121 	struct keybinding {
122 	    int section, key, action;
123 	    bool alt, ctrl;
124 	};
125 
126 	struct imaccount {
127 	    imaccount();
128 	    imaccount(protocolname apname);
129 
130 	    string nickname, server, password;
131 	    unsigned long uin, port;
132 	    protocolname pname;
133 	    map<string, string> additional;
134 
135 	    void write(ofstream &f);
136 	    void read(const string &spec);
137 
138 	    bool empty() const;
139 
140 	    bool operator == (protocolname apname) const;
141 	    bool operator != (protocolname apname) const;
142 	};
143 
144 	static imserver defservers[];
145 
146 	static vector<keybinding> keys;
147 
148     protected:
149 	icqconf();
150 	icqconf(const icqconf&);
151 	icqconf& operator=(const icqconf&);
152 
153 	vector<icqgroup> groups;
154 	vector<imaccount> accounts;
155 
156 	unsigned short socksport, smtpport, httpproxyport;
157 
158 	int autoaway, autona, ptpmin, ptpmax;
159 
160 	bool hideoffline, quote, savepwd, antispam, screenna, mailcheck,
161 	    makelog, fenoughdiskspace, askaway, bidi, logtimestamps,
162 	    logonline, emacs, proxyconnect, proxyssl, notitles, debug,
163 	    timestampstothesecond, dropauthreq, usingcaptcha, askquit,
164 	    showopenedchats, vi, autoawayx;
165 
166 	unsigned int captchatimeout;
167 
168 	bool startoffline;
169 
170 	bool chatmode[protocolname_size];
171 	bool cpconvert[protocolname_size];
172 	bool entersends[protocolname_size];
173 	bool nonimonline[protocolname_size];
174 	bool docaptcha[protocolname_size];
175 
176 	string sockshost, socksuser, sockspass, basedir, argv0, smtphost,
177 	    bindhost, httpproxyhost, httpproxyuser, httpproxypasswd,
178 	    fromcharset, tocharset, browser, screensocketpath,
179 	    captchagreet, captchasuccess, captchafailure;
180 
181 	char *DEFAULT_TIMESTAMP_FORMAT, *DEFAULT_LOGTIMESTAMP_FORMAT,
182 	  *SECONDS_TIMESTAMP_FORMAT, *SECONDS_LOGTIMESTAMP_FORMAT;
183 
184 	char *timestampformat, *logtimestampformat;
185 
186 	map<string, string> actions;
187 
188 	regsound rs;
189 	regcolor rc;
190 	groupmode fgroupmode;
191 	colormode cm;
192 	sortmode fsortmode;
193 	int leftpanelwidth;
194 	int logpanelheight;
195 	int chatpanelheight;
196 
197 	string defaultAuthMessage;
198 
199 	colorschemer<cicq_colorpairs> schemer;
200 
201 	void loadmainconfig();
202 	void usage() const;
203 
204 	void constructevent(const string &event, const string &proto,
205 	    const string &dest, const string &number) const;
206 
207 	void externalstatuschange(char st, const string &proto) const;
208 	void initmultiproto(bool p[], string buf, bool excludenochat);
209 
210 	void selfsignal(int signum) const;
211 	void setproxy();
212 
213     public:
214 	static icqconf* instance();
215 	~icqconf();
216 
217 	void checkdir();
218 	void load();
219 
getcolor(cicq_colorpairs cp)220 	int getcolor(cicq_colorpairs cp) const { return schemer[cp]; }
221 
222 	int getprotcolor(protocolname pname) const;
223 
224 	int getstatuscolor(imstatus status) const;
225 
226 	void save();
227 
228 	void loadkeys();
229 	void loadcolors();
230 	void loadsounds();
231 	void loadactions();
232 	void loadcaptcha();
233 
234 	regcolor getregcolor() const;
235 	void setregcolor(regcolor c);
236 
237 	regsound getregsound() const;
238 	void setregsound(regsound s);
239 
240 	colormode getcolormode() const;
241 	void setcolormode(colormode c);
242 
getemacs()243 	bool getemacs() const { return emacs; }
244 	void setemacs(bool fem);
245 
getvi()246 	bool getvi() const { return vi; }
247 	void setvi(bool b);
248 
gethideoffline()249 	bool gethideoffline() const { return hideoffline; }
250 	void sethideoffline(bool fho);
251 
getantispam()252 	bool getantispam() const { return antispam; }
253 	void setantispam(bool fas);
254 
getdropauthreq()255 	bool getdropauthreq() const { return dropauthreq; }
256 	void setdropauthreq(bool fas);
257 
getusingcaptcha()258 	bool getusingcaptcha() const { return usingcaptcha; }
259 	void setusingcaptcha(bool fas);
260 
getmailcheck()261 	bool getmailcheck() const { return mailcheck; }
262 	void setmailcheck(bool fmc);
263 
264 	void getauto(int &away, int &na, bool& usex) const;
265 	void setauto(int away, int na, bool usex);
266 
267 	bool getscreenna() const;
268 	void setscreenna(bool screenna);
269 
270 	string getscreensocketpath() const;
271 	void setscreensocketpath(string path);
272 
getquote()273 	bool getquote() const { return quote; }
274 	void setquote(bool use);
275 
getsavepwd()276 	bool getsavepwd() const { return savepwd; }
277 	void setsavepwd(bool ssave);
278 
getmakelog()279 	bool getmakelog() const { return makelog; }
280 	void setmakelog(bool slog);
281 
getproxyconnect()282 	bool getproxyconnect() const { return proxyconnect; }
283 	void setproxyconnect(bool proxyconnect);
284 
getproxyssl()285 	bool getproxyssl() const { return proxyssl; }
286 	void setproxyssl(bool sproxyssl);
287 
288 	bool getcpconvert(protocolname pname) const;
289 	void setcpconvert(protocolname pname, bool fcpconvert);
290 
getbidi()291 	bool getbidi() const { return bidi; }
292 	void setbidi(bool fbidi);
293 
getaskaway()294 	bool getaskaway() const { return askaway; }
295 	void setaskaway(bool faskaway);
296 
297 	bool getchatmode(protocolname pname);
298 	void setchatmode(protocolname pname, bool fchatmode);
299 
getaskquit()300         bool getaskquit() const { return askquit; }
301         void setaskquit(bool faskquit);
302 
303 	bool getentersends(protocolname pname);
304 	void setentersends(protocolname pname, bool fentersends);
305 
306 	bool getnonimonline(protocolname pname);
307 	void setnonimonline(protocolname pname, bool fnonimonline);
308 
gettimestampstothesecond()309 	bool gettimestampstothesecond() const { return timestampstothesecond; }
310 	void settimestampstothesecond(bool ftimestampstothesecond);
311 
gettimestampformat()312 	char *gettimestampformat() const { return timestampformat; } ;
getlogtimestampformat()313 	char *getlogtimestampformat() const { return logtimestampformat; } ;
314 
getgroupmode()315 	groupmode getgroupmode() const { return fgroupmode; }
316 	void setgroupmode(groupmode amode);
317 
getsortmode()318 	sortmode getsortmode() const { return fsortmode; }
319 	void setsortmode(sortmode smode);
320 
321 	string getsockshost() const;
322 	unsigned int getsocksport() const;
323 	void setsockshost(const string &nsockshost);
324 
325 	string getsmtphost() const;
326 	unsigned int getsmtpport() const;
327 	void setsmtphost(const string &asmtphost);
328 
329 	string getbrowser() const;
330 	void setbrowser(const string &abrowser);
331 
332 	string gethttpproxyhost() const;
333 	unsigned int gethttpproxyport() const;
334 	void sethttpproxyhost(const string &ahttpproxyhost);
335 	string gethttpproxyuser() const;
336 	string gethttpproxypasswd() const;
337 
338 	void getsocksuser(string &name, string &pass) const;
339 	void setsocksuser(const string &name, const string &pass);
340 
getpeertopeer(int & min,int & max)341 	void getpeertopeer(int &min, int &max) const { min = ptpmin; max = ptpmax; }
setpeertopeer(int min,int max)342 	void setpeertopeer(int min, int max) { ptpmin = min; ptpmax = max; }
343 
getshowopenedchats()344 	bool getshowopenedchats() const { return showopenedchats; }
345 	void setshowopenedchats(bool fsoc);
346 
347 	string execaction(const string &action, const string &param = "");
348 
349 	imstatus getstatus(protocolname pname);
350 	void savestatus(protocolname pname, imstatus st);
351 	void setavatar(protocolname pname, const string &ava);
352 
353 	string getprotocolname(protocolname pname) const;
354 	protocolname getprotocolbyletter(char letter) const;
355 	string getprotocolprefix(protocolname pname) const;
356 
getouridcount()357 	int getouridcount() const { return accounts.size(); }
358 	imaccount getourid(protocolname pname) const;
359 	void setourid(const imaccount &im);
360 
361 	string getawaymsg(protocolname pname) const;
362 	string getextstatus(protocolname pname, imstatus status) const;
363 	void setawaymsg(protocolname pname, const string &amsg);
364 	void setextstatus(protocolname pname, const string &amsg, imstatus status);
365 
getdirname()366 	string getdirname() const { return basedir; }
getconfigfname(const string & fname)367 	string getconfigfname(const string &fname) const { return getdirname() + fname; }
368 
369 	void commandline(int argc, char **argv);
370 
enoughdiskspace()371 	bool enoughdiskspace() const { return fenoughdiskspace; }
372 	void checkdiskspace();
373 
getbindhost()374 	string getbindhost() const { return bindhost; }
375 
getlogoptions(bool & flogtimestamps,bool & flogonline)376 	void getlogoptions(bool &flogtimestamps, bool &flogonline)
377 	    { flogtimestamps = logtimestamps, flogonline = logonline; }
378 
setlogoptions(bool flogtimestamps,bool flogonline)379 	void setlogoptions(bool flogtimestamps, bool flogonline)
380 	    { logtimestamps = flogtimestamps, logonline = flogonline; }
381 
382 	void setcharsets(const string &from, const string &to);
383 
384 	const char *getconvertfrom(protocolname pname = protocolname_size) const;
385 	const char *getconvertto(protocolname pname = protocolname_size) const;
386 
getxtitles()387 	bool getxtitles() const { return !notitles; }
getdebug()388 	bool getdebug() const { return debug; }
389 
getleftpanelwidth()390 	int  getleftpanelwidth() const { return leftpanelwidth; }
setleftpanelwidth(const int width)391 	void setleftpanelwidth(const int width)   { leftpanelwidth  = width; }
getlogpanelheight()392 	int  getlogpanelheight() const { return logpanelheight; }
setlogpanelheight(const int height)393 	void setlogpanelheight(const int height) { logpanelheight = height; }
getchatpanelheight()394 	int  getchatpanelheight() const { return chatpanelheight; }
setchatpanelheight(const int height)395 	void setchatpanelheight(const int height) { chatpanelheight = height; }
396 
getDefaultAuthMessage()397 	string getDefaultAuthMessage() const { return defaultAuthMessage; }
setDefaultAuthMessage(const string m)398 	void setDefaultAuthMessage(const string m) { defaultAuthMessage = m; }
399 
getcaptchagreet()400 	string getcaptchagreet() const { return captchagreet; }
getcaptchasuccess()401 	string getcaptchasuccess() const { return captchasuccess; }
getcaptchafailure()402 	string getcaptchafailure() const { return captchafailure; }
getcaptchatimeout()403 	unsigned int getcaptchatimeout() const { return captchatimeout; }
404 
405 	captcha thecaptcha;
406 
407     private:
408 	static icqconf* self;
409 
410 };
411 
412 extern icqconf* conf;
413 
414 #endif
415