summaryrefslogtreecommitdiffstats
path: root/kopete/protocols/oscar/icq/icqprotocol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/protocols/oscar/icq/icqprotocol.cpp')
-rw-r--r--kopete/protocols/oscar/icq/icqprotocol.cpp820
1 files changed, 820 insertions, 0 deletions
diff --git a/kopete/protocols/oscar/icq/icqprotocol.cpp b/kopete/protocols/oscar/icq/icqprotocol.cpp
new file mode 100644
index 00000000..42616e32
--- /dev/null
+++ b/kopete/protocols/oscar/icq/icqprotocol.cpp
@@ -0,0 +1,820 @@
+/*
+ icqprotocol.cpp - ICQ Protocol Plugin
+
+ Copyright (c) 2003 by Olivier Goffart <ogoffart @ kde.org>
+ Copyright (c) 2004 by Richard Smith <kde@metafoo.co.uk>
+ Kopete (c) 2002-2004 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include "config.h"
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include <netinet/in.h> // for ntohl()
+
+#include <qcombobox.h>
+/*
+#include <qhostaddress.h>
+#include <qlistbox.h>
+#include <qspinbox.h>
+#include <qtextedit.h>
+
+#include <kdatewidget.h>*/
+#include <qvaluelist.h>
+#include <kdialogbase.h>
+/*
+#include <klineedit.h>
+#include <kurllabel.h>
+*/
+#include <kgenericfactory.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <ksimpleconfig.h>
+#include <kmessagebox.h>
+
+#include "kopeteglobal.h"
+#include "kopeteuiglobal.h"
+#include "accountselector.h"
+#include "kopeteaccountmanager.h"
+
+#include "oscartypeclasses.h"
+
+#include "icqaccount.h"
+#include "icqcontact.h"
+#include "icqaddcontactpage.h"
+#include "icqeditaccountwidget.h"
+//#include "icquserinfowidget.h"
+
+
+#include "icqprotocol.h"
+
+typedef KGenericFactory<ICQProtocol> ICQProtocolFactory;
+K_EXPORT_COMPONENT_FACTORY( kopete_icq, ICQProtocolFactory( "kopete_icq" ) )
+
+//BEGIN class ICQProtocolHandler
+
+ICQProtocolHandler::ICQProtocolHandler() : Kopete::MimeTypeHandler(false)
+{
+ registerAsMimeHandler(QString::fromLatin1("application/x-icq"));
+}
+
+void ICQProtocolHandler::handleURL(const QString &mimeType, const KURL & url) const
+{
+ if (mimeType != "application/x-icq")
+ return;
+
+ /**
+ * File Format usually looks like
+ *
+ * [ICQ User]
+ * UIN=123456789
+ * Email=
+ * NickName=
+ * FirstName=
+ * LastName=
+ */
+
+ KSimpleConfig file(url.path(), true);
+
+ if (file.hasGroup("ICQ User"))
+ file.setGroup("ICQ User");
+ else if (file.hasGroup("ICQ Message User"))
+ file.setGroup("ICQ Message User");
+ else
+ return;
+
+ ICQProtocol *proto = ICQProtocol::protocol();
+
+ QString uin = file.readEntry("UIN");
+ if (uin.isEmpty())
+ return;
+
+ QString nick = file.readEntry("NickName");
+ QString first = file.readEntry("FirstName");
+ QString last = file.readEntry("LastName");
+ QString email = file.readEntry("Email");
+
+ Kopete::Account *account = 0;
+ QDict<Kopete::Account> accounts = Kopete::AccountManager::self()->accounts(proto);
+ // do not show chooser if we only have one account to "choose" from
+ if (accounts.count() == 1)
+ {
+ QDictIterator<Kopete::Account> it(accounts);
+ account = it.current();
+ }
+ else
+ {
+ KDialogBase *chooser = new KDialogBase(0, "chooser", true,
+ i18n("Choose Account"), KDialogBase::Ok|KDialogBase::Cancel,
+ KDialogBase::Ok, false);
+ AccountSelector *accSelector = new AccountSelector(proto, chooser,
+ "accSelector");
+ chooser->setMainWidget(accSelector);
+
+ int ret = chooser->exec();
+ account = accSelector->selectedItem();
+
+ delete chooser;
+ if (ret == QDialog::Rejected || account == 0)
+ {
+ kdDebug(14153) << k_funcinfo << "Cancelled" << endl;
+ return;
+ }
+ }
+
+ if (!account->isConnected())
+ {
+ kdDebug(14153) << k_funcinfo << "Can't add contact, we are offline!" << endl;
+ KMessageBox::sorry( Kopete::UI::Global::mainWidget(), i18n("You must be online to add a contact."), i18n("ICQ") );
+ return;
+ }
+
+ QString nickuin = nick.isEmpty() ?
+ i18n("'%1'").arg(uin) :
+ i18n("'%1' (%2)").arg(nick, uin);
+
+ if (KMessageBox::questionYesNo(Kopete::UI::Global::mainWidget(),
+ i18n("Do you want to add %1 to your contact list?").arg(nickuin), QString::null, i18n("Add"), i18n("Do Not Add"))
+ != KMessageBox::Yes)
+ {
+ kdDebug(14153) << k_funcinfo << "Cancelled" << endl;
+ return;
+ }
+
+ kdDebug(14153) << k_funcinfo <<
+ "Adding Contact; uin = " << uin << ", nick = '" << nick <<
+ "', firstname = '" << first << "', lastname = '" << last <<"'" << endl;
+ if (account->addContact(uin, nick, 0L, Kopete::Account::Temporary))
+ {
+ Kopete::Contact *contact = account->contacts()[uin];
+ if (!first.isEmpty())
+ contact->setProperty(Kopete::Global::Properties::self()->firstName(), first);
+ if (!last.isEmpty())
+ contact->setProperty(Kopete::Global::Properties::self()->lastName(), last);
+ if (!email.isEmpty())
+ contact->setProperty(Kopete::Global::Properties::self()->emailAddress(), email);
+ }
+}
+
+//END class ICQProtocolHandler
+
+//BEGIN class ICQProtocol
+
+ICQProtocol* ICQProtocol::protocolStatic_ = 0L;
+
+ICQProtocol::ICQProtocol(QObject *parent, const char *name, const QStringList&)
+: Kopete::Protocol( ICQProtocolFactory::instance(), parent, name ),
+ firstName(Kopete::Global::Properties::self()->firstName()),
+ lastName(Kopete::Global::Properties::self()->lastName()),
+ awayMessage(Kopete::Global::Properties::self()->awayMessage()),
+ emailAddress(Kopete::Global::Properties::self()->emailAddress()),
+ ipAddress("ipAddress", i18n("IP Address") ),
+ clientFeatures("clientFeatures", i18n("Client Features"), 0, false),
+ buddyIconHash("iconHash", i18n("Buddy Icon MD5 Hash"), QString::null, true, false, true),
+ contactEncoding( "contactEncoding", i18n( "Contact Encoding" ), QString::null, true, false, true )
+
+{
+ if (protocolStatic_)
+ kdWarning(14153) << k_funcinfo << "ICQ plugin already initialized" << endl;
+ else
+ protocolStatic_ = this;
+
+ // must be done after protocolStatic_ is set...
+ statusManager_ = new ICQ::OnlineStatusManager;
+
+ addAddressBookField("messaging/icq", Kopete::Plugin::MakeIndexField);
+
+ initGenders();
+ initLang();
+ initCountries();
+ initEncodings();
+ initMaritals();
+ initInterests();
+}
+
+ICQProtocol::~ICQProtocol()
+{
+ delete statusManager_;
+ protocolStatic_ =0L;
+}
+
+void ICQProtocol::initGenders()
+{
+ mGenders.insert(0, ""); // unspecified
+ mGenders.insert(1, i18n("Female"));
+ mGenders.insert(2, i18n("Male"));
+}
+
+void ICQProtocol::initCountries()
+{
+ mCountries.insert(0, ""); // unspecified
+ KLocale *kl = KGlobal::locale(); //KLocale(QString::fromLatin1("kopete"));
+
+ mCountries.insert(93, kl->twoAlphaToCountryName("af"));
+ mCountries.insert(355, kl->twoAlphaToCountryName("al"));
+ mCountries.insert(213, kl->twoAlphaToCountryName("dz"));
+ mCountries.insert(684, kl->twoAlphaToCountryName("as"));
+ mCountries.insert(376, kl->twoAlphaToCountryName("ad"));
+ mCountries.insert(244, kl->twoAlphaToCountryName("ao"));
+ mCountries.insert(101, kl->twoAlphaToCountryName("ai"));
+ mCountries.insert(102, kl->twoAlphaToCountryName("ag"));
+ mCountries.insert(54, kl->twoAlphaToCountryName("ar"));
+ mCountries.insert(374, kl->twoAlphaToCountryName("am"));
+ mCountries.insert(297, kl->twoAlphaToCountryName("aw"));
+ mCountries.insert(247, i18n("Ascension Island"));
+ mCountries.insert(61, kl->twoAlphaToCountryName("au"));
+ mCountries.insert(6721, i18n("Australian Antarctic Territory"));
+ mCountries.insert(43, kl->twoAlphaToCountryName("at"));
+ mCountries.insert(994, kl->twoAlphaToCountryName("az"));
+ mCountries.insert(103, kl->twoAlphaToCountryName("bs"));
+ mCountries.insert(973, kl->twoAlphaToCountryName("bh"));
+ mCountries.insert(880, kl->twoAlphaToCountryName("bd"));
+ mCountries.insert(104, kl->twoAlphaToCountryName("bb"));
+ mCountries.insert(120, i18n("Barbuda"));
+ mCountries.insert(375, kl->twoAlphaToCountryName("by"));
+ mCountries.insert(32, kl->twoAlphaToCountryName("be"));
+ mCountries.insert(501, kl->twoAlphaToCountryName("bz"));
+ mCountries.insert(229, kl->twoAlphaToCountryName("bj"));
+ mCountries.insert(105, kl->twoAlphaToCountryName("bm"));
+ mCountries.insert(975, kl->twoAlphaToCountryName("bt"));
+ mCountries.insert(591, kl->twoAlphaToCountryName("bo"));
+ mCountries.insert(387, kl->twoAlphaToCountryName("ba"));
+ mCountries.insert(267, kl->twoAlphaToCountryName("bw"));
+ mCountries.insert(55, kl->twoAlphaToCountryName("br"));
+ mCountries.insert(106, i18n("British Virgin Islands"));
+ mCountries.insert(673, kl->twoAlphaToCountryName("bn"));
+ mCountries.insert(359, kl->twoAlphaToCountryName("bg"));
+ mCountries.insert(226, kl->twoAlphaToCountryName("bf"));
+ mCountries.insert(257, kl->twoAlphaToCountryName("bi"));
+ mCountries.insert(855, kl->twoAlphaToCountryName("kh"));
+ mCountries.insert(237, kl->twoAlphaToCountryName("cm"));
+ mCountries.insert(107, kl->twoAlphaToCountryName("ca"));
+ mCountries.insert(238, kl->twoAlphaToCountryName("cv"));
+ mCountries.insert(108, kl->twoAlphaToCountryName("ky"));
+ mCountries.insert(236, kl->twoAlphaToCountryName("cf"));
+ mCountries.insert(235, kl->twoAlphaToCountryName("td"));
+ mCountries.insert(56, kl->twoAlphaToCountryName("cl"));
+ mCountries.insert(86, kl->twoAlphaToCountryName("cn"));
+ mCountries.insert(672, kl->twoAlphaToCountryName("cx"));
+ mCountries.insert(6101, kl->twoAlphaToCountryName("c"));
+ mCountries.insert(57, kl->twoAlphaToCountryName("co"));
+ mCountries.insert(2691, kl->twoAlphaToCountryName("km"));
+ mCountries.insert(242, kl->twoAlphaToCountryName("cg"));
+ mCountries.insert(682, kl->twoAlphaToCountryName("ck"));
+ mCountries.insert(506, kl->twoAlphaToCountryName("cr"));
+ mCountries.insert(385, kl->twoAlphaToCountryName("hr"));
+ mCountries.insert(53, kl->twoAlphaToCountryName("cu"));
+ mCountries.insert(357, kl->twoAlphaToCountryName("cy"));
+ mCountries.insert(42, kl->twoAlphaToCountryName("cz"));
+ mCountries.insert(45, kl->twoAlphaToCountryName("dk"));
+ mCountries.insert(246, i18n("Diego Garcia"));
+ mCountries.insert(253, kl->twoAlphaToCountryName("dj"));
+ mCountries.insert(109, kl->twoAlphaToCountryName("dm"));
+ mCountries.insert(110, kl->twoAlphaToCountryName("do"));
+ mCountries.insert(593, kl->twoAlphaToCountryName("ec"));
+ mCountries.insert(20, kl->twoAlphaToCountryName("eg"));
+ mCountries.insert(503, kl->twoAlphaToCountryName("sv"));
+ mCountries.insert(240, kl->twoAlphaToCountryName("gq"));
+ mCountries.insert(291, kl->twoAlphaToCountryName("er"));
+ mCountries.insert(372, kl->twoAlphaToCountryName("ee"));
+ mCountries.insert(251, kl->twoAlphaToCountryName("et"));
+ mCountries.insert(298, kl->twoAlphaToCountryName("fo"));
+ mCountries.insert(500, kl->twoAlphaToCountryName("fk"));
+ mCountries.insert(679, kl->twoAlphaToCountryName("fj"));
+ mCountries.insert(358, kl->twoAlphaToCountryName("fi"));
+ mCountries.insert(33, kl->twoAlphaToCountryName("fr"));
+ mCountries.insert(5901, i18n("French Antilles"));
+ mCountries.insert(594, kl->twoAlphaToCountryName("gf"));
+ mCountries.insert(689, kl->twoAlphaToCountryName("pf"));
+ mCountries.insert(241, kl->twoAlphaToCountryName("ga"));
+ mCountries.insert(220, kl->twoAlphaToCountryName("gm"));
+ mCountries.insert(995, kl->twoAlphaToCountryName("ge"));
+ mCountries.insert(49, kl->twoAlphaToCountryName("de"));
+ mCountries.insert(233, kl->twoAlphaToCountryName("gh"));
+ mCountries.insert(350, kl->twoAlphaToCountryName("gi"));
+ mCountries.insert(30, kl->twoAlphaToCountryName("gr"));
+ mCountries.insert(299, kl->twoAlphaToCountryName("gl"));
+ mCountries.insert(111, kl->twoAlphaToCountryName("gd"));
+ mCountries.insert(590, kl->twoAlphaToCountryName("gp"));
+ mCountries.insert(671, kl->twoAlphaToCountryName("gu"));
+ mCountries.insert(5399, i18n("Guantanamo Bay"));
+ mCountries.insert(502, kl->twoAlphaToCountryName("gt"));
+ mCountries.insert(224, kl->twoAlphaToCountryName("gn"));
+ mCountries.insert(245, kl->twoAlphaToCountryName("gw"));
+ mCountries.insert(592, kl->twoAlphaToCountryName("gy"));
+ mCountries.insert(509, kl->twoAlphaToCountryName("ht"));
+ mCountries.insert(504, kl->twoAlphaToCountryName("hn"));
+ mCountries.insert(852, kl->twoAlphaToCountryName("hk"));
+ mCountries.insert(36, kl->twoAlphaToCountryName("hu"));
+ mCountries.insert(871, i18n("INMARSAT (Atlantic-East)"));
+ mCountries.insert(874, i18n("INMARSAT (Atlantic-West)"));
+ mCountries.insert(873, i18n("INMARSAT (Indian)"));
+ mCountries.insert(872, i18n("INMARSAT (Pacific)"));
+ mCountries.insert(870, i18n("INMARSAT"));
+ mCountries.insert(354, kl->twoAlphaToCountryName("is"));
+ mCountries.insert(91, kl->twoAlphaToCountryName("in"));
+ mCountries.insert(62, kl->twoAlphaToCountryName("id"));
+ mCountries.insert(800, i18n("International Freephone Service"));
+ mCountries.insert(98, kl->twoAlphaToCountryName("ir"));
+ mCountries.insert(964, kl->twoAlphaToCountryName("iq"));
+ mCountries.insert(353, kl->twoAlphaToCountryName("ie"));
+ mCountries.insert(972, kl->twoAlphaToCountryName("il"));
+ mCountries.insert(39, kl->twoAlphaToCountryName("it"));
+ mCountries.insert(225, i18n("Ivory Coast"));
+ mCountries.insert(112, kl->twoAlphaToCountryName("jm"));
+ mCountries.insert(81, kl->twoAlphaToCountryName("jp"));
+ mCountries.insert(962, kl->twoAlphaToCountryName("jo"));
+ mCountries.insert(705, kl->twoAlphaToCountryName("kz"));
+ mCountries.insert(254, kl->twoAlphaToCountryName("ke"));
+ mCountries.insert(686, kl->twoAlphaToCountryName("ki"));
+ mCountries.insert(850, kl->twoAlphaToCountryName("kp"));
+ mCountries.insert(82, kl->twoAlphaToCountryName("kr"));
+ mCountries.insert(965, kl->twoAlphaToCountryName("kw"));
+ mCountries.insert(706, kl->twoAlphaToCountryName("kg"));
+ mCountries.insert(856, kl->twoAlphaToCountryName("la"));
+ mCountries.insert(371, kl->twoAlphaToCountryName("lv"));
+ mCountries.insert(961, kl->twoAlphaToCountryName("kb"));
+ mCountries.insert(266, kl->twoAlphaToCountryName("ls"));
+ mCountries.insert(231, kl->twoAlphaToCountryName("lr"));
+ mCountries.insert(218, kl->twoAlphaToCountryName("ly"));
+ mCountries.insert(4101, kl->twoAlphaToCountryName("li"));
+ mCountries.insert(370, kl->twoAlphaToCountryName("lt"));
+ mCountries.insert(352, kl->twoAlphaToCountryName("lu"));
+ mCountries.insert(853, kl->twoAlphaToCountryName("mo"));
+ mCountries.insert(261, kl->twoAlphaToCountryName("mg"));
+ mCountries.insert(265, kl->twoAlphaToCountryName("mw"));
+ mCountries.insert(60, kl->twoAlphaToCountryName("my"));
+ mCountries.insert(960, kl->twoAlphaToCountryName("mv"));
+ mCountries.insert(223, kl->twoAlphaToCountryName("ml"));
+ mCountries.insert(356, kl->twoAlphaToCountryName("mt"));
+ mCountries.insert(692, kl->twoAlphaToCountryName("mh"));
+ mCountries.insert(596, kl->twoAlphaToCountryName("mq"));
+ mCountries.insert(222, kl->twoAlphaToCountryName("mr"));
+ mCountries.insert(230, kl->twoAlphaToCountryName("mu"));
+ mCountries.insert(269, kl->twoAlphaToCountryName("yt"));
+ mCountries.insert(52, kl->twoAlphaToCountryName("mx"));
+ mCountries.insert(691, kl->twoAlphaToCountryName("fm"));
+ mCountries.insert(373, kl->twoAlphaToCountryName("md"));
+ mCountries.insert(377, kl->twoAlphaToCountryName("mc"));
+ mCountries.insert(976, kl->twoAlphaToCountryName("mn"));
+ mCountries.insert(113, kl->twoAlphaToCountryName("ms"));
+ mCountries.insert(212, kl->twoAlphaToCountryName("ma"));
+ mCountries.insert(258, kl->twoAlphaToCountryName("mz"));
+ mCountries.insert(95, kl->twoAlphaToCountryName("mm"));
+ mCountries.insert(264, kl->twoAlphaToCountryName("na"));
+ mCountries.insert(674, kl->twoAlphaToCountryName("nr"));
+ mCountries.insert(977, kl->twoAlphaToCountryName("np"));
+ mCountries.insert(599, kl->twoAlphaToCountryName("an"));
+ mCountries.insert(31, kl->twoAlphaToCountryName("nl"));
+ mCountries.insert(114, i18n("Nevis"));
+ mCountries.insert(687, kl->twoAlphaToCountryName("nc"));
+ mCountries.insert(64, kl->twoAlphaToCountryName("nz"));
+ mCountries.insert(505, kl->twoAlphaToCountryName("ni"));
+ mCountries.insert(227, kl->twoAlphaToCountryName("ne"));
+ mCountries.insert(234, kl->twoAlphaToCountryName("ng"));
+ mCountries.insert(683, kl->twoAlphaToCountryName("nu"));
+ mCountries.insert(6722, kl->twoAlphaToCountryName("nf"));
+ mCountries.insert(47, kl->twoAlphaToCountryName("no"));
+ mCountries.insert(968, kl->twoAlphaToCountryName("om"));
+ mCountries.insert(92, kl->twoAlphaToCountryName("pk"));
+ mCountries.insert(680, kl->twoAlphaToCountryName("pw"));
+ mCountries.insert(507, kl->twoAlphaToCountryName("pa"));
+ mCountries.insert(675, kl->twoAlphaToCountryName("pg"));
+ mCountries.insert(595, kl->twoAlphaToCountryName("py"));
+ mCountries.insert(51, kl->twoAlphaToCountryName("pe"));
+ mCountries.insert(63, kl->twoAlphaToCountryName("ph"));
+ mCountries.insert(48, kl->twoAlphaToCountryName("pl"));
+ mCountries.insert(351, kl->twoAlphaToCountryName("pt"));
+ mCountries.insert(121, kl->twoAlphaToCountryName("pr"));
+ mCountries.insert(974, kl->twoAlphaToCountryName("qa"));
+ mCountries.insert(389, kl->twoAlphaToCountryName("mk"));
+ mCountries.insert(262, i18n("Reunion Island"));
+ mCountries.insert(40, kl->twoAlphaToCountryName("ro"));
+ mCountries.insert(6701, i18n("Rota Island"));
+ mCountries.insert(7, kl->twoAlphaToCountryName("ru"));
+ mCountries.insert(250, kl->twoAlphaToCountryName("rw"));
+ mCountries.insert(122, kl->twoAlphaToCountryName("lc"));
+ mCountries.insert(670, i18n("Ivory Coast"));
+ mCountries.insert(378, kl->twoAlphaToCountryName("sm"));
+ mCountries.insert(239, kl->twoAlphaToCountryName("st"));
+ mCountries.insert(966, kl->twoAlphaToCountryName("sa"));
+ mCountries.insert(221, kl->twoAlphaToCountryName("sn"));
+ mCountries.insert(248, kl->twoAlphaToCountryName("sc"));
+ mCountries.insert(232, kl->twoAlphaToCountryName("sl"));
+ mCountries.insert(65, kl->twoAlphaToCountryName("sg"));
+ mCountries.insert(4201, kl->twoAlphaToCountryName("sk"));
+ mCountries.insert(386, kl->twoAlphaToCountryName("si"));
+ mCountries.insert(677, kl->twoAlphaToCountryName("sb"));
+ mCountries.insert(252, kl->twoAlphaToCountryName("so"));
+ mCountries.insert(27, kl->twoAlphaToCountryName("za"));
+ mCountries.insert(34, kl->twoAlphaToCountryName("es"));
+ mCountries.insert(94, kl->twoAlphaToCountryName("lk"));
+ mCountries.insert(290, kl->twoAlphaToCountryName("sh"));
+ mCountries.insert(115, kl->twoAlphaToCountryName("kn"));
+ mCountries.insert(508, kl->twoAlphaToCountryName("pm"));
+ mCountries.insert(116, kl->twoAlphaToCountryName("vc"));
+ mCountries.insert(249, kl->twoAlphaToCountryName("sd"));
+ mCountries.insert(597, kl->twoAlphaToCountryName("sr"));
+ mCountries.insert(268, kl->twoAlphaToCountryName("sz"));
+ mCountries.insert(46, kl->twoAlphaToCountryName("se"));
+ mCountries.insert(41, kl->twoAlphaToCountryName("ch"));
+ mCountries.insert(963, kl->twoAlphaToCountryName("sy"));
+ mCountries.insert(886, kl->twoAlphaToCountryName("tw"));
+ mCountries.insert(708, kl->twoAlphaToCountryName("tj"));
+ mCountries.insert(255, kl->twoAlphaToCountryName("tz"));
+ mCountries.insert(66, kl->twoAlphaToCountryName("th"));
+ mCountries.insert(6702, i18n("Tinian Island"));
+ mCountries.insert(228, kl->twoAlphaToCountryName("tg")); // Togo
+ mCountries.insert(690, kl->twoAlphaToCountryName("tk")); // Tokelau
+ mCountries.insert(676, kl->twoAlphaToCountryName("to")); // Tonga
+ mCountries.insert(117, kl->twoAlphaToCountryName("tt")); // Trinidad and Tobago
+ mCountries.insert(216, kl->twoAlphaToCountryName("tn")); // Tunisia
+ mCountries.insert(90, kl->twoAlphaToCountryName("tr"));
+ mCountries.insert(709, kl->twoAlphaToCountryName("tm"));
+ mCountries.insert(118, kl->twoAlphaToCountryName("tc")); // Turks and Caicos Island
+ mCountries.insert(688, kl->twoAlphaToCountryName("tv")); // Tuvalu
+ mCountries.insert(1, kl->twoAlphaToCountryName("us")); // United States of America
+ mCountries.insert(256, kl->twoAlphaToCountryName("ug")); // Uganda
+ mCountries.insert(380, kl->twoAlphaToCountryName("ua")); // Ukraine
+ mCountries.insert(971, kl->twoAlphaToCountryName("ae")); // United Arab Emirates
+ mCountries.insert(44, kl->twoAlphaToCountryName("gb")); // United Kingdom
+ mCountries.insert(123, kl->twoAlphaToCountryName("vi")); // United States Virgin Islands
+ mCountries.insert(598, kl->twoAlphaToCountryName("uy")); // Uruguay
+ mCountries.insert(711, kl->twoAlphaToCountryName("uz")); // Uzbekistan
+ mCountries.insert(678, kl->twoAlphaToCountryName("vu")); // Vanuatu
+ mCountries.insert(379, kl->twoAlphaToCountryName("va")); // Vatican City
+ mCountries.insert(58, kl->twoAlphaToCountryName("ve")); // Venezuela
+ mCountries.insert(84, kl->twoAlphaToCountryName("vn")); // Vietnam
+ mCountries.insert(681, kl->twoAlphaToCountryName("wf")); // Wallis and Futuna Islands
+ mCountries.insert(685, kl->twoAlphaToCountryName("eh"));
+ mCountries.insert(967, kl->twoAlphaToCountryName("ye"));
+ mCountries.insert(381, kl->twoAlphaToCountryName("yu"));
+ mCountries.insert(243, kl->twoAlphaToCountryName("zr"));
+ mCountries.insert(260, kl->twoAlphaToCountryName("zm"));
+ mCountries.insert(263, kl->twoAlphaToCountryName("zw"));
+}
+
+void ICQProtocol::initLang()
+{
+
+ KLocale *kl = KGlobal::locale(); //KLocale(QString::fromLatin1("kopete"));
+
+ mLanguages.insert(0 , "");
+ mLanguages.insert(1 , kl->twoAlphaToLanguageName("ar") /*i18n("Arabic")*/);
+ mLanguages.insert(2 , i18n("Bhojpuri"));
+ mLanguages.insert(3 , kl->twoAlphaToLanguageName("bg") /*i18n("Bulgarian")*/);
+ mLanguages.insert(4 , kl->twoAlphaToLanguageName("my") /*i18n("Burmese")*/);
+ mLanguages.insert(5 , i18n("Cantonese"));
+ mLanguages.insert(6 , kl->twoAlphaToLanguageName("ca") /*i18n("Catalan")*/);
+ mLanguages.insert(7 , kl->twoAlphaToLanguageName("zh") /*i18n("Chinese")*/);
+ mLanguages.insert(8 , kl->twoAlphaToLanguageName("hr") /*i18n("Croatian")*/);
+ mLanguages.insert(9 , kl->twoAlphaToLanguageName("cs") /*i18n("Czech")*/);
+ mLanguages.insert(10, kl->twoAlphaToLanguageName("da") /*i18n("Danish")*/);
+ mLanguages.insert(11, kl->twoAlphaToLanguageName("nl") /*i18n("Dutch")*/);
+ mLanguages.insert(12, kl->twoAlphaToLanguageName("en") /*i18n("English")*/);
+ mLanguages.insert(13, kl->twoAlphaToLanguageName("eo") /*i18n("Esperanto")*/);
+ mLanguages.insert(14, kl->twoAlphaToLanguageName("et") /*i18n("Estonian")*/);
+ mLanguages.insert(15, i18n("Farsi"));
+ mLanguages.insert(16, kl->twoAlphaToLanguageName("fi") /*i18n("Finnish")*/);
+ mLanguages.insert(17, kl->twoAlphaToLanguageName("fr") /*i18n("French")*/);
+ mLanguages.insert(18, kl->twoAlphaToLanguageName("gd") /*i18n("Gaelic")*/);
+ mLanguages.insert(19, kl->twoAlphaToLanguageName("de") /*i18n("German")*/);
+ mLanguages.insert(20, kl->twoAlphaToLanguageName("el") /*i18n("Greek")*/);
+ mLanguages.insert(21, kl->twoAlphaToLanguageName("he") /*i18n("Hebrew")*/);
+ mLanguages.insert(22, kl->twoAlphaToLanguageName("hi") /*i18n("Hindi")*/);
+ mLanguages.insert(23, kl->twoAlphaToLanguageName("hu") /*i18n("Hungarian")*/);
+ mLanguages.insert(24, kl->twoAlphaToLanguageName("is") /*i18n("Icelandic")*/);
+ mLanguages.insert(25, kl->twoAlphaToLanguageName("id") /*i18n("Indonesian")*/);
+ mLanguages.insert(26, kl->twoAlphaToLanguageName("it") /*i18n("Italian")*/);
+ mLanguages.insert(27, kl->twoAlphaToLanguageName("ja") /*i18n("Japanese")*/);
+ mLanguages.insert(28, kl->twoAlphaToLanguageName("km") /*i18n("Khmer")*/);
+ mLanguages.insert(29, kl->twoAlphaToLanguageName("ko") /*i18n("Korean")*/);
+ mLanguages.insert(30, kl->twoAlphaToLanguageName("lo") /*i18n("Lao")*/);
+ mLanguages.insert(31, kl->twoAlphaToLanguageName("lv") /*i18n("Latvian")*/);
+ mLanguages.insert(32, kl->twoAlphaToLanguageName("lt") /*i18n("Lithuanian")*/);
+ mLanguages.insert(33, kl->twoAlphaToLanguageName("ms") /*i18n("Malay")*/);
+ mLanguages.insert(34, kl->twoAlphaToLanguageName("no") /*i18n("Norwegian")*/);
+ mLanguages.insert(35, kl->twoAlphaToLanguageName("pl") /*i18n("Polish")*/);
+ mLanguages.insert(36, kl->twoAlphaToLanguageName("pt") /*i18n("Portuguese")*/);
+ mLanguages.insert(37, kl->twoAlphaToLanguageName("ro") /*i18n("Romanian")*/);
+ mLanguages.insert(38, kl->twoAlphaToLanguageName("ru") /*i18n("Russian")*/);
+ mLanguages.insert(39, kl->twoAlphaToLanguageName("sr") /*i18n("Serbian")*/);
+ mLanguages.insert(40, kl->twoAlphaToLanguageName("sk") /*i18n("Slovak")*/);
+ mLanguages.insert(41, kl->twoAlphaToLanguageName("sl") /*i18n("Slovenian")*/);
+ mLanguages.insert(42, kl->twoAlphaToLanguageName("so") /*i18n("Somali")*/);
+ mLanguages.insert(43, kl->twoAlphaToLanguageName("es") /*i18n("Spanish")*/);
+ mLanguages.insert(44, kl->twoAlphaToLanguageName("sw") /*i18n("Swahili")*/);
+ mLanguages.insert(45, kl->twoAlphaToLanguageName("sv") /*i18n("Swedish")*/);
+ mLanguages.insert(46, kl->twoAlphaToLanguageName("tl") /*i18n("Tagalog")*/);
+ mLanguages.insert(47, kl->twoAlphaToLanguageName("tt") /*i18n("Tatar")*/);
+ mLanguages.insert(48, kl->twoAlphaToLanguageName("th") /*i18n("Thai")*/);
+ mLanguages.insert(49, kl->twoAlphaToLanguageName("tr") /*i18n("Turkish")*/);
+ mLanguages.insert(50, kl->twoAlphaToLanguageName("uk") /*i18n("Ukrainian")*/);
+ mLanguages.insert(51, kl->twoAlphaToLanguageName("ur") /*i18n("Urdu")*/);
+ mLanguages.insert(52, kl->twoAlphaToLanguageName("vi") /*i18n("Vietnamese")*/);
+ mLanguages.insert(53, kl->twoAlphaToLanguageName("yi") /*i18n("Yiddish")*/);
+ mLanguages.insert(54, kl->twoAlphaToLanguageName("yo") /*i18n("Yoruba")*/);
+ mLanguages.insert(55, i18n("Taiwanese"));
+ mLanguages.insert(56, kl->twoAlphaToLanguageName("af") /*i18n("Afrikaans")*/);
+ mLanguages.insert(57, kl->twoAlphaToLanguageName("fa") /*i18n("Persian")*/);
+ mLanguages.insert(58, kl->twoAlphaToLanguageName("sq") /*i18n("Albanian")*/);
+ mLanguages.insert(59, kl->twoAlphaToLanguageName("hy") /*i18n("Armenian")*/);
+}
+
+void ICQProtocol::initEncodings()
+{
+ mEncodings.insert(2026, i18n("Big5"));
+ mEncodings.insert(2101, i18n("Big5-HKSCS"));
+ mEncodings.insert(18, i18n("euc-JP Japanese"));
+ mEncodings.insert(38, i18n("euc-KR Korean"));
+ mEncodings.insert(57, i18n("GB-2312 Chinese"));
+ mEncodings.insert(113, i18n("GBK Chinese"));
+ mEncodings.insert(114, i18n("GB18030 Chinese"));
+
+ mEncodings.insert(16, i18n("JIS Japanese"));
+ mEncodings.insert(17, i18n("Shift-JIS Japanese"));
+
+ mEncodings.insert(2084, i18n("KOI8-R Russian"));
+ mEncodings.insert(2088, i18n("KOI8-U Ukrainian"));
+
+ mEncodings.insert(4, i18n("ISO-8859-1 Western"));
+ mEncodings.insert(5, i18n("ISO-8859-2 Central European"));
+ mEncodings.insert(6, i18n("ISO-8859-3 Central European"));
+ mEncodings.insert(7, i18n("ISO-8859-4 Baltic"));
+ mEncodings.insert(8, i18n("ISO-8859-5 Cyrillic"));
+ mEncodings.insert(9, i18n("ISO-8859-6 Arabic"));
+ mEncodings.insert(10, i18n("ISO-8859-7 Greek"));
+ mEncodings.insert(11, i18n("ISO-8859-8 Hebrew, visually ordered"));
+ mEncodings.insert(85, i18n("ISO-8859-8-I Hebrew, logically ordered"));
+ mEncodings.insert(12, i18n("ISO-8859-9 Turkish"));
+ mEncodings.insert(13, i18n("ISO-8859-10"));
+ mEncodings.insert(109, i18n("ISO-8859-13"));
+ mEncodings.insert(110, i18n("ISO-8859-14"));
+ mEncodings.insert(111, i18n("ISO-8859-15 Western"));
+
+ mEncodings.insert(2250, i18n("Windows-1250 Central European"));
+ mEncodings.insert(2251, i18n("Windows-1251 Cyrillic"));
+ mEncodings.insert(2252, i18n("Windows-1252 Western"));
+ mEncodings.insert(2253, i18n("Windows-1253 Greek"));
+ mEncodings.insert(2254, i18n("Windows-1254 Turkish"));
+ mEncodings.insert(2255, i18n("Windows-1255 Hebrew"));
+ mEncodings.insert(2256, i18n("Windows-1256 Arabic"));
+ mEncodings.insert(2257, i18n("Windows-1257 Baltic"));
+ mEncodings.insert(2258, i18n("Windows-1258 Viet Nam"));
+
+ mEncodings.insert(2009, i18n("IBM 850"));
+ mEncodings.insert(2085, i18n("IBM 866"));
+
+ mEncodings.insert(2259, i18n("TIS-620 Thai"));
+
+ mEncodings.insert(106, i18n("UTF-8 Unicode"));
+ mEncodings.insert(1015, i18n("UTF-16 Unicode"));
+
+/*
+Missing ones (copied from qtextcodec doc):
+TSCII -- Tamil
+utf8 -- Unicode, 8-bit
+utf16 -- Unicode
+CP874
+Apple Roman
+*/
+}
+void ICQProtocol::initMaritals()
+{
+ mMarital.insert(0 , "");
+ mMarital.insert(10 , i18n("Single"));
+ mMarital.insert(11 , i18n("Long term relationship"));
+ mMarital.insert(12 , i18n("Engaged"));
+ mMarital.insert(20 , i18n("Married"));
+ mMarital.insert(30 , i18n("Divorced"));
+ mMarital.insert(31 , i18n("Separated"));
+ mMarital.insert(40 , i18n("Widowed"));
+
+}
+
+void ICQProtocol::initInterests()
+{
+ mInterests.insert(0 , "");
+ mInterests.insert(100, i18n("Art"));
+ mInterests.insert(101, i18n("Cars"));
+ mInterests.insert(102, i18n("Celebrities"));
+ mInterests.insert(103, i18n("Collections"));
+ mInterests.insert(104, i18n("Computers"));
+ mInterests.insert(105, i18n("Culture"));
+ mInterests.insert(106, i18n("Fitness"));
+ mInterests.insert(107, i18n("Games"));
+ mInterests.insert(108, i18n("Hobbies"));
+ mInterests.insert(109, i18n("ICQ - Help"));
+ mInterests.insert(110, i18n("Internet"));
+ mInterests.insert(111, i18n("Lifestyle"));
+ mInterests.insert(112, i18n("Movies"));
+ mInterests.insert(113, i18n("Music"));
+ mInterests.insert(114, i18n("Outdoors"));
+ mInterests.insert(115, i18n("Parenting"));
+ mInterests.insert(116, i18n("Pets and animals"));
+ mInterests.insert(117, i18n("Religion"));
+ mInterests.insert(118, i18n("Science"));
+ mInterests.insert(119, i18n("Skills"));
+ mInterests.insert(120, i18n("Sports"));
+ mInterests.insert(121, i18n("Web design"));
+ mInterests.insert(122, i18n("Ecology"));
+ mInterests.insert(123, i18n("News and media"));
+ mInterests.insert(124, i18n("Government"));
+ mInterests.insert(125, i18n("Business"));
+ mInterests.insert(126, i18n("Mystics"));
+ mInterests.insert(127, i18n("Travel"));
+ mInterests.insert(128, i18n("Astronomy"));
+ mInterests.insert(129, i18n("Space"));
+ mInterests.insert(130, i18n("Clothing"));
+ mInterests.insert(131, i18n("Parties"));
+ mInterests.insert(132, i18n("Women"));
+ mInterests.insert(133, i18n("Social science"));
+ mInterests.insert(134, i18n("60's"));
+ mInterests.insert(135, i18n("70's"));
+ mInterests.insert(136, i18n("40's"));
+ mInterests.insert(137, i18n("50's"));
+ mInterests.insert(138, i18n("Finance and corporate"));
+ mInterests.insert(139, i18n("Entertainment"));
+ mInterests.insert(140, i18n("Consumer electronics"));
+ mInterests.insert(141, i18n("Retail stores"));
+ mInterests.insert(142, i18n("Health and beauty"));
+ mInterests.insert(143, i18n("Media"));
+ mInterests.insert(144, i18n("Household products"));
+ mInterests.insert(145, i18n("Mail order catalog"));
+ mInterests.insert(146, i18n("Business services"));
+ mInterests.insert(147, i18n("Audio and visual"));
+ mInterests.insert(148, i18n("Sporting and athletic"));
+ mInterests.insert(149, i18n("Publishing"));
+ mInterests.insert(150, i18n("Home automation"));
+
+}
+
+void ICQProtocol::fillComboFromTable(QComboBox *box, const QMap<int, QString> &map)
+{
+// kdDebug(14153) << k_funcinfo << "Called." << endl;
+
+ QStringList list = map.values();
+ list.sort();
+ box->insertStringList(list);
+}
+
+void ICQProtocol::setComboFromTable(QComboBox *box, const QMap<int, QString> &map, int value)
+{
+// kdDebug(14153) << k_funcinfo << "Called." << endl;
+ QMap<int, QString>::ConstIterator it;
+ it = map.find(value);
+ if (!(*it))
+ return;
+
+ for(int i=0; i<box->count(); i++)
+ {
+ if((*it) == box->text(i))
+ {
+ box->setCurrentItem(i);
+ return;
+ }
+ }
+}
+
+int ICQProtocol::getCodeForCombo(QComboBox *cmb, const QMap<int, QString> &map)
+{
+ const QString curText = cmb->currentText();
+
+ QMap<int, QString>::ConstIterator it;
+ for(it = map.begin(); it != map.end(); ++it)
+ {
+ if(it.data() == curText)
+ return it.key();
+ }
+ return 0; // unspecified is always first 0
+}
+#if 0
+
+void ICQProtocol::fillTZCombo(QComboBox *combo)
+{
+ QTime time(12, 0);
+ QTime done(0, 0);
+
+ while(time > done)
+ {
+ combo->insertItem("GMT-" + time.toString("h:mm"));
+ // subtract 30 minutes
+ time = time.addSecs(-30 * 60);
+ }
+
+ time = QTime(0, 0);
+ done = QTime(12, 0);
+
+ while(time <= done)
+ {
+ combo->insertItem("GMT+" + time.toString("h:mm"));
+ // add 30 minutes
+ time = time.addSecs(30 * 60);
+ }
+}
+
+void ICQProtocol::setTZComboValue(QComboBox *combo, const char &tz)
+{
+ kdDebug(14153) << k_funcinfo << "tz=" << int(tz) << endl;
+ if ((tz < -24) || (tz > 24))
+ combo->setCurrentItem(24); // GMT+0:00 as default
+ else
+ combo->setCurrentItem(24 + tz);
+}
+
+char ICQProtocol::getTZComboValue(QComboBox *combo)
+{
+ char ret = combo->currentItem() - 24;
+// kdDebug(14153) << k_funcinfo << "return value=" << int(ret) << endl;
+ return ret;
+}
+
+#endif
+ICQProtocol *ICQProtocol::protocol()
+{
+ return protocolStatic_;
+}
+
+bool ICQProtocol::canSendOffline() const
+{
+ return true;
+}
+
+Kopete::Contact *ICQProtocol::deserializeContact( Kopete::MetaContact *metaContact,
+ const QMap<QString, QString> &serializedData,
+ const QMap<QString, QString> &/*addressBookData*/ )
+{
+ QString accountId = serializedData["accountId"];
+ QDict<Kopete::Account> accounts = Kopete::AccountManager::self()->accounts(this);
+ ICQAccount *account = static_cast<ICQAccount*>(accounts[accountId]);
+
+ if(!account)
+ {
+ kdWarning(14153) << k_funcinfo <<
+ "WARNING: Account for contact does not exist, skipping " << accountId << endl;
+ return 0;
+ }
+
+ QString contactId=serializedData["contactId"];
+ uint ssiGid = 0, ssiBid = 0, ssiType = 0xFFFF;
+ QString ssiName;
+ bool ssiWaitingAuth = false;
+ if ( serializedData.contains( "ssi_name" ) )
+ ssiName = serializedData["ssi_name"];
+
+ if ( serializedData.contains( "ssi_waitingAuth" ) )
+ {
+ QString authStatus = serializedData["ssi_waitingAuth"];
+ if ( authStatus == "true" )
+ ssiWaitingAuth = true;
+ }
+
+ if ( serializedData.contains( "ssi_gid" ) )
+ ssiGid = serializedData["ssi_gid"].toUInt();
+ if ( serializedData.contains( "ssi_bid" ) )
+ ssiBid = serializedData["ssi_bid"].toUInt();
+ if ( serializedData.contains( "ssi_type" ) )
+ ssiType = serializedData["ssi_type"].toUInt();
+
+ Oscar::SSI item( ssiName, ssiGid, ssiBid, ssiType, QValueList<TLV>(), 0 );
+ item.setWaitingAuth( ssiWaitingAuth );
+ ICQContact *c = new ICQContact( account, contactId, metaContact, QString::null, item );
+ return c;
+}
+
+AddContactPage *ICQProtocol::createAddContactWidget(QWidget *parent, Kopete::Account *account)
+{
+ return new ICQAddContactPage( static_cast<ICQAccount*>( account ), parent);
+}
+
+KopeteEditAccountWidget *ICQProtocol::createEditAccountWidget(Kopete::Account *account, QWidget *parent)
+{
+ return new ICQEditAccountWidget(this, account, parent);
+}
+
+Kopete::Account *ICQProtocol::createNewAccount(const QString &accountId)
+{
+ return new ICQAccount(this, accountId);
+}
+
+ICQ::OnlineStatusManager *ICQProtocol::statusManager()
+{
+ return statusManager_;
+}
+
+//END class ICQProtocol
+
+#include "icqprotocol.moc"
+// kate: indent-mode csands;
+// vim: set noet ts=4 sts=4 sw=4: