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 ¶m = ""); 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