// Copyright © 2008 sss, chaos.persei // // 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. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "commonheaders.h" TCHAR* __stdcall UniGetContactSettingUtf(HANDLE hContact, const char *szModule,const char* szSetting, TCHAR* szDef) { DBVARIANT dbv = {DBVT_DELETED}; TCHAR* szRes; if (DBGetContactSettingTString(hContact, szModule, szSetting, &dbv)) return _tcsdup(szDef); if(dbv.pszVal) szRes = _tcsdup(dbv.ptszVal); DBFreeVariant(&dbv); return szRes; } extern JabberAccount Accounts; int GetAccountsCount(); int GetJabberInterface(WPARAM, LPARAM) //get interface for all jabber accounts, options later { IJabberInterface *JIftmp[50]; //should it be dynamic ? int count = 0; PROTOACCOUNT **accounts; JabberAccount *acc = &Accounts; if(!acc) acc = new(JabberAccount); ProtoEnumAccounts(&count, &accounts); acc->AccountNumber = 0; for(int i = 0; i < count; i++) { char *tmp = mir_u2a(accounts[i]->tszAccountName); JIftmp[i] = getJabberApi(tmp); if(!acc) acc = new(JabberAccount); if(JIftmp[i]) { acc->JabberInterface = JIftmp[i]; acc->AccountName = accounts[i]->tszAccountName; acc->AccountNumber = i; acc = acc->next; acc = new(JabberAccount); } mir_free(tmp); } if(!GetAccountsCount()) return 1; //no jabber accounts found return 0; } int HandleDbNewContact(WPARAM w, LPARAM l) { for(int i = 0; i < GetAccountsCount(); i++) { JabberAccount *acc = &Accounts; if(!acc) break; IJabberSysInterface *ijsys = acc->JabberInterface->Sys(); LPTSTR tmp = ijsys->ContactToJID(HANDLE(w)); if(tmp) { if(_tcsstr(_T(JUICK_JID), tmp)) { if(!acc->hPrescenseHandler && !acc->hMessageHandler && !acc->hIqHandler) { IJabberNetInterface *ijnet = acc->JabberInterface->Net(); acc->hPrescenseHandler = ijnet->AddPresenceHandler(acc->PrescenseHandler(acc->JabberInterface, acc->pNODE, acc->ppUserData)); acc->hMessageHandler = ijnet->AddMessageHandler(acc->MessageHandler(acc->JabberInterface, acc->mNODE, acc->mpUserData), JABBER_MESSAGE_TYPE_ANY, 0, 0); //hm... acc->hIqHandler = ijnet->AddIqHandler(acc->IqHandler(acc->JabberInterface, acc->iNODE, acc->ipUserData), JABBER_IQ_TYPE_ANY, 0, 0); //hm... } } } acc = acc->next; } return 0; } int HandleDbContactDeleted(WPARAM w, LPARAM l) { for(int i = 0; i < GetAccountsCount(); i++) { JabberAccount *acc = &Accounts; if(!acc) break; IJabberSysInterface *ijsys = acc->JabberInterface->Sys(); LPTSTR tmp = ijsys->ContactToJID(HANDLE(w)); if(tmp) { if(_tcsstr(_T(JUICK_JID), tmp)) { if(acc->hPrescenseHandler && acc->hMessageHandler && acc->hIqHandler) { IJabberNetInterface *ijnet = acc->JabberInterface->Net(); ijnet->RemoveHandler(acc->hPrescenseHandler); ijnet->RemoveHandler(acc->hMessageHandler); ijnet->RemoveHandler(acc->hIqHandler); } } } acc = acc->next; } return 0; } void FindJuickAccounts() { for(int i = 0; i < GetAccountsCount(); i++) { JabberAccount *acc = &Accounts; if(!acc) break; IJabberSysInterface *ijsys = acc->JabberInterface->Sys(); if(ijsys->ContactFromJID(_T(JUICK_JID))) { IJabberNetInterface *ijnet = acc->JabberInterface->Net(); if(!acc->hPrescenseHandler && !acc->hMessageHandler && !acc->hIqHandler) { acc->hPrescenseHandler = ijnet->AddPresenceHandler(acc->PrescenseHandler(acc->JabberInterface, acc->pNODE, acc->ppUserData)); acc->hMessageHandler = ijnet->AddMessageHandler(acc->MessageHandler(acc->JabberInterface, acc->mNODE, acc->mpUserData), JABBER_MESSAGE_TYPE_ANY, 0, 0); //hm... acc->hIqHandler = ijnet->AddIqHandler(acc->IqHandler(acc->JabberInterface, acc->iNODE, acc->ipUserData), JABBER_IQ_TYPE_ANY, 0, 0); //hm... } } acc = acc->next; } } JABBER_HANDLER_FUNC JabberAccount::PrescenseHandler(IJabberInterface *ji, HXML node, void *pUserData) { return FALSE; } JABBER_HANDLER_FUNC JabberAccount::MessageHandler(IJabberInterface *ji, HXML node, void *pUserData) { return FALSE; } JABBER_HANDLER_FUNC JabberAccount::IqHandler(IJabberInterface *ji, HXML node, void *pUserData) { return FALSE; } BOOL JabberAccount::operator!() { if(!this) return TRUE; return FALSE; } JabberAccount::JabberAccount() { AccountName = _T(""); AccountNumber = 0; } int GetAccountsCount() { int i; JabberAccount *tmp = &Accounts; for(i = 0; tmp; tmp=tmp->next, i++) ; return i; } char *date() { static char d[11]; char *tmp = __DATE__, m[4], mn[3] = "01"; m[0]=tmp[0]; m[1]=tmp[1]; m[2]=tmp[2]; if(strstr(m,"Jan")) strcpy(mn,"01"); else if(strstr(m,"Feb")) strcpy(mn,"02"); else if(strstr(m,"Mar")) strcpy(mn,"03"); else if(strstr(m,"Apr")) strcpy(mn,"04"); else if(strstr(m,"May")) strcpy(mn,"05"); else if(strstr(m,"Jun")) strcpy(mn,"06"); else if(strstr(m,"Jul")) strcpy(mn,"07"); else if(strstr(m,"Aug")) strcpy(mn,"08"); else if(strstr(m,"Sep")) strcpy(mn,"09"); else if(strstr(m,"Oct")) strcpy(mn,"10"); else if(strstr(m,"Nov")) strcpy(mn,"11"); else if(strstr(m,"Dec")) strcpy(mn,"12"); d[0]=tmp[7]; d[1]=tmp[8]; d[2]=tmp[9]; d[3]=tmp[10]; d[4]='.'; d[5]=mn[0]; d[6]=mn[1]; d[7]='.'; if (tmp[4] == ' ') d[8] = '0'; else d[8]=tmp[4]; d[9]=tmp[5]; return d; }