static INT_PTR Proto_RemoveFromContact(WPARAM wParam,LPARAM lParam) { int i; DBVARIANT dbv; char str[10]; i = Proto_IsProtoOnContact(wParam,lParam); if(!i) return 1; if(i==-1) DBDeleteContactSetting((HANDLE)wParam,"Protocol","p"); else { for(i--;;i++) { //we have to decrease i, as Proto_IsOnContact returns +1 more number than read from database _itoa(i+1,str,10); if(0!=DBGetContactSettingString((HANDLE)wParam,"_Filter",str,&dbv)) { _itoa(i,str,10); DBDeleteContactSetting((HANDLE)wParam,"_Filter",str); break; } _itoa(i,str,10); DBWriteContactSettingString((HANDLE)wParam,"_Filter",str,dbv.pszVal); mir_free(dbv.pszVal); } } return 0; }
void write_ping_address(PINGADDRESS *i) { bool is_contact = (bool)(CallService(MS_DB_CONTACT_IS, (WPARAM)i->hContact, 0) != 0); if(!is_contact) { //MessageBox(0, "Creating contact", "Ping", MB_OK); i->hContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0); CallService( MS_PROTO_ADDTOCONTACT, ( WPARAM )i->hContact, ( LPARAM )PROTO ); CallService(MS_IGNORE_IGNORE, (WPARAM)i->hContact, (WPARAM)IGNOREEVENT_USERONLINE); } DBWriteContactSettingString(i->hContact, PROTO, "Address", i->pszName); set_changing_clist_handle(TRUE); DBWriteContactSettingString(i->hContact, "CList", "MyHandle", i->pszLabel); set_changing_clist_handle(FALSE); DBWriteContactSettingString(i->hContact, PROTO, "Nick", i->pszLabel); DBWriteContactSettingWord(i->hContact, PROTO, "Status", i->status); DBWriteContactSettingDword(i->hContact, PROTO, "Port", i->port); DBWriteContactSettingString(i->hContact, PROTO, "Proto", i->pszProto); if(strlen(i->pszCommand)) DBWriteContactSettingString(i->hContact, PROTO, "Command", i->pszCommand); else DBDeleteContactSetting(i->hContact, PROTO, "Command"); if(strlen(i->pszParams)) DBWriteContactSettingString(i->hContact, PROTO, "CommandParams", i->pszParams); else DBDeleteContactSetting(i->hContact, PROTO, "CommandParams"); DBWriteContactSettingWord(i->hContact, PROTO, "SetStatus", i->set_status); DBWriteContactSettingWord(i->hContact, PROTO, "GetStatus", i->get_status); DBWriteContactSettingWord(i->hContact, PROTO, "Index", i->index); if(strlen(i->pszCListGroup)) DBWriteContactSettingString(i->hContact, "CList", "Group", i->pszCListGroup); else DBDeleteContactSetting(i->hContact, "CList", "Group"); }
HANDLE add_contact(char *name, DWORD flags) { HANDLE hContact; // already on list? if (hContact=find_contact(name)) { if (!(flags & PALF_TEMPORARY) && DBGetContactSettingByte(hContact, "CList", "NotOnList", 1)) { DBDeleteContactSetting( hContact, "CList", "NotOnList" ); DBDeleteContactSetting( hContact, "CList", "Hidden" ); } LOG(("add_contact: Found %s", name)); return hContact; // already there, return handle } // no, so add LOG(("add_contact: Adding %s", name)); hContact=(HANDLE)CallServiceSync(MS_DB_CONTACT_ADD, 0, 0); if (hContact) { if (CallServiceSync(MS_PROTO_ADDTOCONTACT, (WPARAM)hContact,(LPARAM)SKYPE_PROTONAME)!=0) { LOG(("add_contact: Ouch! MS_PROTO_ADDTOCONTACT failed for some reason")); CallServiceSync(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0); return NULL; } if (name[0]) DBWriteContactSettingString(hContact, SKYPE_PROTONAME, SKYPE_NAME, name); if (flags & PALF_TEMPORARY ) { DBWriteContactSettingByte(hContact, "CList", "NotOnList", 1); DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); } if (name[0]) { SkypeSend("GET USER %s DISPLAYNAME", name); } else {LOG(("add_contact: Info: The contact added has no name."));} } else {LOG(("add_contact: Ouch! MS_DB_CONTACT_ADD failed for some reason"));} LOG(("add_contact succeeded")); return hContact; }
HANDLE CMsnProto::AddToListByEmail(const char *email, const char *nick, DWORD flags) { HANDLE hContact = MSN_HContactFromEmail(email, nick, true, flags & PALF_TEMPORARY); if (flags & PALF_TEMPORARY) { if (DBGetContactSettingByte(hContact, "CList", "NotOnList", 0) == 1) DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); } else { DBDeleteContactSetting(hContact, "CList", "Hidden"); if (msnLoggedIn) { // int netId = Lists_GetNetId(email); // if (netId == NETID_UNKNOWN) int netId = strncmp(email, "tel:", 4) ? NETID_MSN : NETID_MOB; if (MSN_AddUser(hContact, email, netId, LIST_FL)) { MSN_AddUser(hContact, email, netId, LIST_PL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_BL + LIST_REMOVE); MSN_AddUser(hContact, email, netId, LIST_AL); DBDeleteContactSetting(hContact, "CList", "Hidden"); } MSN_SetContactDb(hContact, email); if (MSN_IsMeByContact(hContact)) displayEmailCount(hContact); } else hContact = NULL; } return hContact; }
void logoff_contacts(BOOL bCleanup) { HANDLE hContact; char *szProto; DBVARIANT dbv={0}; LOG(("logoff_contacts: Logging off contacts.")); for (hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);hContact != NULL;hContact=(HANDLE)CallService( MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0)) { szProto = (char*)CallService( MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0 ); if (szProto!=NULL && !strcmp(szProto, SKYPE_PROTONAME)) { if (DBGetContactSettingWord(hContact, SKYPE_PROTONAME, "Status", ID_STATUS_OFFLINE)!=ID_STATUS_OFFLINE) DBWriteContactSettingWord(hContact, SKYPE_PROTONAME, "Status", ID_STATUS_OFFLINE); DBDeleteContactSetting(hContact, SKYPE_PROTONAME, "CallId"); if (DBGetContactSettingByte(hContact, SKYPE_PROTONAME, "ChatRoom", 0)==1) { if (DBGetContactSettingTString(hContact, SKYPE_PROTONAME, "ChatRoomID", &dbv)) continue; RemChat (dbv.ptszVal); DBFreeVariant(&dbv); } if (DBGetContactSettingString(hContact, SKYPE_PROTONAME, "Typing_Stream", &dbv) == 0) { if (bCleanup) SkypeSend ("ALTER APPLICATION libpurple_typing DISCONNECT %s", dbv.pszVal); DBFreeVariant(&dbv); DBDeleteContactSetting(hContact, SKYPE_PROTONAME, "Typing_Stream"); } } } if (bCleanup && (protocol>=5 || bIsImoproxy)) SkypeSend ("DELETE APPLICATION libpurple_typing"); }
static void ICQserverImport() { // Clear last update stamp DBDeleteContactSetting(NULL, szICQModuleName[ iICQAccount ], "SrvLastUpdate"); DBDeleteContactSetting(NULL, szICQModuleName[ iICQAccount ], "SrvRecordCount"); // Enable contacts downloading DBWriteContactSettingByte(NULL, szICQModuleName[ iICQAccount ], "UseServerCList", 1); DBWriteContactSettingByte(NULL, szICQModuleName[ iICQAccount ], "AddServerNew", 1); DBWriteContactSettingByte(NULL, szICQModuleName[ iICQAccount ], "UseServerNicks", 1); DBWriteContactSettingByte(NULL, szICQModuleName[ iICQAccount ], "ServerAddRemove", 1); }
static void RemoveAvatar(HANDLE hContact) { char tFileName[ MAX_PATH ]; if (hContact == NULL) { jabberThreadInfo->avatarHash[0] = '\0'; } TlenGetAvatarFileName( NULL, tFileName, sizeof tFileName ); DeleteFileA(tFileName); DBDeleteContactSetting(hContact, "ContactPhoto", "File"); DBDeleteContactSetting(hContact, jabberProtoName, "AvatarHash"); DBDeleteContactSetting(hContact, jabberProtoName, "AvatarFormat"); ProtoBroadcastAck(jabberProtoName, NULL, ACKTYPE_AVATAR, ACKRESULT_STATUS, NULL, 0); }
int replaceSetting(HWND hwnd, HANDLE hContact, const char *module, const char *setting, DBVARIANT *dbv, const char *find, const char *replace, int mode) { DBCONTACTWRITESETTING cws; char *myreplace = NULL; int count = 0; DBVARIANT dbv2; if (!dbv->type) return 0; if (mode & RW_FULL) cws.szSetting = (char*)replace; else { myreplace = multiReplace(setting, find, replace, mode & RW_CASE); cws.szSetting = myreplace; } if (cws.szSetting[0]==0) { ItemFound(hwnd,hContact,module,setting,NULL,FW_SETTINGNAME|FW_DELETED); DBDeleteContactSetting(hContact,module,setting); mir_free(myreplace); return 1; } // check & write if (GetSetting(hContact, module, myreplace, &dbv2)) { cws.szModule=module; cws.value.type=dbv->type; cws.value.pszVal=dbv->pszVal; cws.value.bVal=dbv->bVal; cws.value.wVal=dbv->wVal; cws.value.dVal=dbv->dVal; cws.value.pbVal = dbv->pbVal; cws.value.cpbVal = dbv->cpbVal; if (!CallService(MS_DB_CONTACT_WRITESETTING,(WPARAM)hContact,(LPARAM)&cws)) { count++; DBDeleteContactSetting(hContact,module,setting); ItemFound(hwnd,hContact,module,cws.szSetting,NULL,FW_SETTINGNAME|FW_REPLACED); } } else DBFreeVariant(&dbv2); mir_free(myreplace); return count; }
INT_PTR __cdecl Service_PGPsetKey(WPARAM wParam, LPARAM lParam) { BOOL del = true; if(bPGPloaded) { if(bPGPkeyrings) { char szKeyID[128]; szKeyID[0]='\0'; PVOID KeyID = pgp_select_keyid(GetForegroundWindow(),szKeyID); if(szKeyID[0]) { DBDeleteContactSetting((HANDLE)wParam,szModuleName,"pgp"); DBCONTACTWRITESETTING cws; memset(&cws,0,sizeof(cws)); cws.szModule = szModuleName; cws.szSetting = "pgp"; cws.value.type = DBVT_BLOB; cws.value.pbVal = (LPBYTE)KeyID; cws.value.cpbVal = pgp_size_keyid(); CallService(MS_DB_CONTACT_WRITESETTING,wParam,(LPARAM)&cws); DBWriteContactSettingByte((HANDLE)wParam,szModuleName,"pgp_mode",0); DBWriteContactSettingString((HANDLE)wParam,szModuleName,"pgp_abbr",szKeyID); del = false; } } else if(bPGPprivkey) { char KeyPath[MAX_PATH]; KeyPath[0]='\0'; if(ShowSelectKeyDlg(0,KeyPath)) { char *publ = LoadKeys(KeyPath,false); if(publ) { DBDeleteContactSetting((HANDLE)wParam,szModuleName,"pgp"); myDBWriteStringEncode((HANDLE)wParam,szModuleName,"pgp",publ); DBWriteContactSettingByte((HANDLE)wParam,szModuleName,"pgp_mode",1); DBWriteContactSettingString((HANDLE)wParam,szModuleName,"pgp_abbr","(binary)"); mir_free(publ); del = false; } } } } if(del) Service_PGPdelKey(wParam,lParam); else { pUinKey ptr = getUinKey((HANDLE)wParam); cpp_delete_context(ptr->cntx); ptr->cntx=0; } ShowStatusIconNotify((HANDLE)wParam); return 1; }
INT_PTR __cdecl Service_PGPdelKey(WPARAM wParam, LPARAM lParam) { if(bPGPloaded) { DBDeleteContactSetting((HANDLE)wParam, szModuleName, "pgp"); DBDeleteContactSetting((HANDLE)wParam, szModuleName, "pgp_mode"); DBDeleteContactSetting((HANDLE)wParam, szModuleName, "pgp_abbr"); } { pUinKey ptr = getUinKey((HANDLE)wParam); cpp_delete_context(ptr->cntx); ptr->cntx=0; } ShowStatusIconNotify((HANDLE)wParam); return 1; }
static BOOL Convert(HANDLE hContact, char* module, char* setting, int value, int toType) // 0 = byte, 1 = word, 2 = dword, 3 = string { int Result = 1; char temp[64]; switch (toType) { case 0: if (value > 0xFF) Result = 0; else DBWriteContactSettingByte(hContact, module, setting, (BYTE)value); break; case 1: if (value > 0xFFFF) Result = 0; else DBWriteContactSettingWord(hContact, module, setting, (WORD)value); break; case 2: DBWriteContactSettingDword(hContact, module, setting, (DWORD)value); break; case 3: DBDeleteContactSetting(hContact, module, setting); DBWriteContactSettingString(hContact, module, setting, itoa(value,temp,10)); break; } return Result; }
int RecvFile(WPARAM wParam, LPARAM lParam) { DBEVENTINFO dbei; CCSDATA* ccs = (CCSDATA*)lParam; PROTORECVEVENT* pre = (PROTORECVEVENT*)ccs->lParam; char* szDesc; char* szFile; DBDeleteContactSetting(ccs->hContact, "CList", "Hidden"); szFile = pre->szMessage + sizeof(DWORD); szDesc = szFile + strlen(szFile) + 1; ZeroMemory(&dbei, sizeof(dbei)); dbei.cbSize = sizeof(dbei); dbei.szModule = PROTO; dbei.timestamp = pre->timestamp; dbei.flags = (pre->flags & PREF_CREATEREAD) ? DBEF_READ : 0; dbei.eventType = EVENTTYPE_FILE; dbei.cbBlob = sizeof(DWORD) + strlen(szFile) + strlen(szDesc) + 2; dbei.pBlob = (PBYTE)pre->szMessage; CallService(MS_DB_EVENT_ADD, (WPARAM)ccs->hContact, (LPARAM)&dbei); return 0; }
int __cdecl onSystemOKToExit(WPARAM wParam,LPARAM lParam) { if(bSavePass) { LPSTR tmp = gpg_get_passphrases(); DBWriteContactSettingString(0,szModuleName,"gpgSave",tmp); LocalFree(tmp); } else { DBDeleteContactSetting(0,szModuleName,"gpgSave"); } if(bPGPloaded) pgp_done(); if(bGPGloaded) gpg_done(); rsa_done(); while(iHook--) UnhookEvent(g_hHook[iHook]); mir_free(g_hHook); while(iService--) DestroyServiceFunction(g_hService[iService]); mir_free(g_hService); DestroyHookableEvent(g_hEvent[0]); DestroyHookableEvent(g_hEvent[1]); freeContactList(); free_rtfconv(); #if defined(_DEBUG) || defined(NETLIB_LOG) DeinitNetlib(); #endif return 0; }
void JabberDBAddAuthRequest(TlenProtocol *proto, char *jid, char *nick) { char *s; PBYTE pCurBlob; PBYTE pBlob; DWORD cbBlob; HANDLE hContact; if ((hContact=JabberHContactFromJID(proto, jid)) == NULL) { hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0); CallService(MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM) proto->iface.m_szModuleName); // strip resource if present s = JabberLoginFromJID(jid); _strlwr(s); DBWriteContactSettingString(hContact, proto->iface.m_szModuleName, "jid", s); mir_free(s); } else { DBDeleteContactSetting(hContact, proto->iface.m_szModuleName, "Hidden"); } DBWriteContactSettingString(hContact, proto->iface.m_szModuleName, "Nick", nick); JabberLog(proto, "auth request: %s, %s", jid, nick); //blob is: uin(DWORD), hContact(HANDLE), nick(ASCIIZ), first(ASCIIZ), last(ASCIIZ), email(ASCIIZ), reason(ASCIIZ) //blob is: 0(DWORD), hContact(HANDLE), nick(ASCIIZ), ""(ASCIIZ), ""(ASCIIZ), email(ASCIIZ), ""(ASCIIZ) cbBlob = sizeof(DWORD) + sizeof(HANDLE) + (int)strlen(nick) + (int)strlen(jid) + 5; pBlob = pCurBlob = (PBYTE) mir_alloc(cbBlob); *((PDWORD) pCurBlob) = 0; pCurBlob += sizeof(DWORD); *((PHANDLE) pCurBlob) = hContact; pCurBlob += sizeof(HANDLE); strcpy((char *) pCurBlob, nick); pCurBlob += strlen(nick)+1; *pCurBlob = '\0'; pCurBlob++; //firstName *pCurBlob = '\0'; pCurBlob++; //lastName strcpy((char *) pCurBlob, jid); pCurBlob += strlen(jid)+1; *pCurBlob = '\0'; //reason JabberDBAddEvent(proto, NULL, EVENTTYPE_AUTHREQUEST, 0, pBlob, cbBlob); }
BOOL SM_SetStatus(const TCHAR* pszID, const char* pszModule, int wStatus) { SESSION_INFO *pTemp = m_WndList, *pLast = NULL; if (!pszModule) return FALSE; while ( pTemp != NULL ) { if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { pTemp->wStatus = wStatus; if (pTemp->hWnd && g_Settings.TabsEnable) g_TabSession.wStatus = wStatus; if ( pTemp->hContact ) { if ( pTemp->iType != GCW_SERVER && wStatus != ID_STATUS_OFFLINE ) DBDeleteContactSetting(pTemp->hContact, "CList", "Hidden"); DBWriteContactSettingWord(pTemp->hContact, pTemp->pszModule, "Status", (WORD)wStatus); } if ( g_Settings.TabsEnable && g_TabSession.hWnd ) PostMessage( g_TabSession.hWnd, GC_FIXTABICONS, 0, (LPARAM) pTemp ); if (pszID) return TRUE; } pLast = pTemp; pTemp = pTemp->next; } return TRUE; }
//Function to put all enabled contact to the Online status void RefreshContact(void) { HACCOUNT Finder; for(Finder=POP3Plugin->FirstAccount;Finder!=NULL;Finder=Finder->Next) { if(Finder->hContact != NULL) { if((Finder->Flags & YAMN_ACC_ENA) && (Finder->NewMailN.Flags & YAMN_ACC_CONT)) { DBDeleteContactSetting(Finder->hContact, "CList", "Hidden"); } else { DBWriteContactSettingByte(Finder->hContact, "CList", "Hidden", 1); } } else { if((Finder->Flags & YAMN_ACC_ENA) && (Finder->NewMailN.Flags & YAMN_ACC_CONT)) { Finder->hContact =(HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0); CallService(MS_PROTO_ADDTOCONTACT,(WPARAM)Finder->hContact,(LPARAM)ProtoName); DBWriteContactSettingString(Finder->hContact,ProtoName,"Id",Finder->Name); DBWriteContactSettingString(Finder->hContact,ProtoName,"Nick",Finder->Name); DBWriteContactSettingString(Finder->hContact,"Protocol","p",ProtoName); DBWriteContactSettingWord(Finder->hContact, ProtoName, "Status", ID_STATUS_ONLINE); DBWriteContactSettingString(Finder->hContact, "CList", "StatusMsg", Translate("No new mail message")); } } } }
BOOL SM_SetStatus(const TCHAR* pszID, const char* pszModule, int wStatus) { SESSION_INFO* pTemp = m_WndList, *pLast = NULL; if (!pszModule) return FALSE; while (pTemp != NULL) { if ((!pszID || !lstrcmpi(pTemp->ptszID, pszID)) && !lstrcmpiA(pTemp->pszModule, pszModule)) { pTemp->wStatus = wStatus; if (pTemp->hContact) { if (pTemp->iType != GCW_SERVER && wStatus != ID_STATUS_OFFLINE) DBDeleteContactSetting(pTemp->hContact, "CList", "Hidden"); DBWriteContactSettingWord(pTemp->hContact, pTemp->pszModule, "Status", (WORD)wStatus); } if (pszID) return TRUE; } pLast = pTemp; pTemp = pTemp->next; } return TRUE; }
static int SaveTree(HWND hwndDlg) { TVITEM tvi; int count; TCHAR idstr[100]; char menuItemName[256], DBString[256], MenuNameItems[256]; int menupos; int MenuObjectId, runtimepos; TIntMenuObject* pimo; MenuItemOptData* iod; HWND hTree = GetDlgItem( hwndDlg, IDC_MENUITEMS ); if ( !GetCurrentMenuObjectID( hwndDlg, &MenuObjectId )) return 0; tvi.hItem = TreeView_GetRoot( hTree ); tvi.cchTextMax = 99; tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_HANDLE; tvi.pszText = idstr; count = 0; menupos = GetMenuObjbyId( MenuObjectId ); if ( menupos == -1 ) return -1; pimo = g_menus[menupos]; mir_snprintf( MenuNameItems, sizeof(MenuNameItems), "%s_Items", pimo->Name); runtimepos = 100; while ( tvi.hItem != NULL ) { TreeView_GetItem( hTree, &tvi ); iod = ( MenuItemOptData* )tvi.lParam; if ( iod->pimi ) { GetMenuItemName( iod->pimi, menuItemName, sizeof( menuItemName )); mir_snprintf( DBString, SIZEOF(DBString), "%s_visible", menuItemName ); DBWriteContactSettingByte( NULL, MenuNameItems, DBString, iod->show ); mir_snprintf( DBString, SIZEOF(DBString), "%s_pos", menuItemName ); DBWriteContactSettingDword( NULL, MenuNameItems, DBString, runtimepos ); mir_snprintf( DBString, SIZEOF(DBString), "%s_name", menuItemName ); if ( lstrcmp( iod->name, iod->defname ) != 0 ) DBWriteContactSettingTString( NULL, MenuNameItems, DBString, iod->name ); else DBDeleteContactSetting( NULL, MenuNameItems, DBString ); runtimepos += 100; } if ( iod->name && !_tcscmp( iod->name, STR_SEPARATOR) && iod->show ) runtimepos += SEPARATORPOSITIONINTERVAL; tvi.hItem = TreeView_GetNextSibling( hTree, tvi.hItem ); count++; } return 1; }
static void timeapiSetInfoByContact(HANDLE hContact, HANDLE hTZ) { MIM_TIMEZONE *tz = (MIM_TIMEZONE*)hTZ; if (hContact == NULL) return; if (tz) { DBWriteContactSettingTString(hContact, "UserInfo", "TzName", tz->tszName); DBWriteContactSettingByte(hContact, "UserInfo", "Timezone", (char)((tz->tzi.Bias + tz->tzi.StandardBias) / 30)); } else { DBDeleteContactSetting(hContact, "UserInfo", "TzName"); DBDeleteContactSetting(hContact, "UserInfo", "Timezone"); } }
// remove or display the weatehr information for a contact // hContact - the contact in which the info is going to be removed void DBDataManage(HANDLE hContact, WORD Mode, WPARAM wParam, LPARAM lParam) { DBCONTACTENUMSETTINGS dbces; DBVARIANT dbv; WCOUNTER wc; wc.current = 0; dbces.lParam=(LPARAM)&wc; dbces.pfnEnumProc=GetWeatherDataFromDB; dbces.szModule=WEATHERCONDITION; // get all the settings and stored them in a temporary list if(CallService(MS_DB_CONTACT_ENUMSETTINGS,(WPARAM)hContact,(LPARAM)&dbces)==-1) wc.current--; // begin deleting settings for (; --wc.current>-1;) { if (!DBGetContactSettingString(hContact, WEATHERCONDITION, wc.value[wc.current], &dbv)) { switch (Mode) { case WDBM_REMOVE: DBDeleteContactSetting(hContact, WEATHERCONDITION, wc.value[wc.current]); break; case WDBM_DETAILDISPLAY: { HWND hList = GetDlgItem((HWND)wParam, IDC_DATALIST); LV_ITEM lvi = { 0 }; // skip the "WeatherInfo" variable if (strcmp(wc.value[wc.current], "WeatherInfo") == 0 || strcmp(wc.value[wc.current], "Ignore") == 0 || wc.value[wc.current][0] == '#') { wfree(&wc.value[wc.current]); DBFreeVariant(&dbv); continue; } lvi.mask = LVIF_TEXT | LVIF_PARAM; lvi.iItem = 0; lvi.iSubItem = 0; lvi.lParam = (LPARAM)wc.current; lvi.pszText = (LPSTR)Translate(wc.value[wc.current]); lvi.iItem = ListView_InsertItemWth(hList, &lvi); lvi.pszText = dbv.pszVal; ListView_SetItemTextWth(hList, lvi.iItem, 1, lvi.pszText); break; } } DBFreeVariant(&dbv); } wfree(&wc.value[wc.current]); } }
int CIcqProto::setContactHidden(HANDLE hContact, BYTE bHidden) { int nResult = DBWriteContactSettingByte(hContact, "CList", "Hidden", bHidden); if (!bHidden) // clear zero setting DBDeleteContactSetting(hContact, "CList", "Hidden"); return nResult; }
void removeWindow(HANDLE hContact) { DWORD frameId = DBGetContactSettingDword(hContact, WEATHERPROTONAME, "mwin", 0); WindowList_Remove(hMwinWindowList, WindowList_Find(hMwinWindowList, hContact)); CallService(MS_CLIST_FRAMES_REMOVEFRAME, frameId, 0); DBWriteContactSettingDword(hContact, WEATHERPROTONAME, "mwin", 0); DBDeleteContactSetting(hContact, "CList", "Hidden"); }
int ContactChangeGroup(WPARAM wParam,LPARAM lParam) { CallService(MS_CLUI_CONTACTDELETED,wParam,0); if((HANDLE)lParam==NULL) DBDeleteContactSetting((HANDLE)wParam,"CList","Group"); else DBWriteContactSettingString((HANDLE)wParam,"CList","Group",(char*)CallService(MS_CLIST_GROUPGETNAME2,lParam,(LPARAM)(int*)NULL)); CallService(MS_CLUI_CONTACTADDED,wParam,ExtIconFromStatusMode((HANDLE)wParam,(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wParam,0),GetContactStatus((HANDLE)wParam))); return 0; }
int ContactChangeGroup(WPARAM wParam, LPARAM lParam) { CallService(MS_CLUI_CONTACTDELETED, wParam, 0); if ((HANDLE) lParam == NULL) DBDeleteContactSetting((HANDLE) wParam, "CList", "Group"); else DBWriteContactSettingTString((HANDLE) wParam, "CList", "Group", GetGroupNameT(lParam, NULL)); CallService(MS_CLUI_CONTACTADDED, wParam, IconFromStatusMode((char*) CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0), GetContactStatus((HANDLE) wParam), (HANDLE) wParam, NULL)); return 0; }
int SweepPlugin(const char *szModule,const char *szPlugin) { HANDLE hcontact; DBCONTACTENUMSETTINGS dbces; DELETESTRUCT del; dbces.szModule=szModule; dbces.pfnEnumProc=SweepSettings; dbces.lParam=(LPARAM)&del; del.pszModule=szModule; hcontact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0); while(hcontact!=NULL) { del.hcontact=hcontact; del.count=0; CallService(MS_DB_CONTACT_ENUMSETTINGS,(WPARAM)hcontact,(LPARAM)&dbces); for(;del.count;del.count--) { DBDeleteContactSetting(del.hcontact,del.pszModule,del.pszSetting[del.count-1]); free((char *)del.pszSetting[del.count-1]); } hcontact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hcontact,0); } del.hcontact=NULL; del.count=0; CallService(MS_DB_CONTACT_ENUMSETTINGS,(WPARAM)del.hcontact,(LPARAM)&dbces); for(;del.count;del.count--) { DBDeleteContactSetting(del.hcontact,del.pszModule,del.pszSetting[del.count-1]); free((char *)del.pszSetting[del.count-1]); } DBDeleteContactSetting(NULL,"Uninstall",szPlugin); return 0; }
void EndRename(HWND hwnd,struct ClcData *dat,int save) { HWND hwndEdit; if (!dat) return; hwndEdit=dat->hwndRenameEdit; if(dat->hwndRenameEdit==NULL) return; dat->hwndRenameEdit=NULL; if(save) { TCHAR text[120]; struct ClcContact *contact; GetWindowText(hwndEdit,text,sizeof(text)); if(GetRowByIndex(dat,dat->selection,&contact,NULL)!=-1) { if(lstrcmp(contact->szText,text)) { if(contact->type==CLCIT_GROUP&&!_tcsstr(text,TEXT("\\"))) { TCHAR szFullName[256]; if(contact->group->parent && contact->group->parent->parent) { TCHAR * tc=(TCHAR*)CallService(MS_CLIST_GROUPGETNAMET,(WPARAM)contact->group->parent->groupId,(LPARAM)(int*)NULL); _sntprintf(szFullName,sizeof(szFullName),TEXT("%s\\%s"),tc,text); } else lstrcpyn(szFullName,text,sizeof(szFullName)); CallService(MS_CLIST_GROUPRENAME,contact->groupId,(LPARAM)szFullName); } else if(contact->type==CLCIT_CONTACT) { TCHAR *otherName=mir_strdupT((TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME,(WPARAM)contact->hContact,GCDNF_NOMYHANDLE|GCDNF_UNICODE/*|TODO: UNICODE*/)); InvalidateDisplayNameCacheEntry(contact->hContact); if(text[0]==TEXT('\0')) { DBDeleteContactSetting(contact->hContact,"CList","MyHandle"); } else { if(!lstrcmp(otherName,text)) DBDeleteContactSetting(contact->hContact,"CList","MyHandle"); else DBWriteContactSettingTString(contact->hContact,"CList","MyHandle",text); } if (otherName) mir_free(otherName); InvalidateDisplayNameCacheEntry(contact->hContact); } } } } DestroyWindow(hwndEdit); }
// needed for msg_count_xxx substitutions int EventDeleted(WPARAM wParam, LPARAM lParam) { DBEVENTINFO dbei = {0}; dbei.cbSize = sizeof(dbei); if (!CallService(MS_DB_EVENT_GET, lParam, (LPARAM)&dbei)) { if (dbei.eventType == EVENTTYPE_MESSAGE) DBDeleteContactSetting((HANDLE)wParam, MODULE, "LastCountTS"); } return 0; }
int __cdecl CMsnProto::RecvMsg(HANDLE hContact, PROTORECVEVENT* pre) { char tEmail[MSN_MAX_EMAIL_LEN]; getStaticString(hContact, "e-mail", tEmail, sizeof(tEmail)); if (Lists_IsInList(LIST_FL, tEmail)) DBDeleteContactSetting(hContact, "CList", "Hidden"); CCSDATA ccs = { hContact, PSR_MESSAGE, 0, (LPARAM)pre }; MSN_CallService(MS_PROTO_RECVMSG, 0, (LPARAM)&ccs); return 0; }
void CIcqProto::setStatusMsgVar(HANDLE hContact, char* szStatusMsg, bool isAnsi) { if (szStatusMsg && szStatusMsg[0]) { if (isAnsi) { char* szStatusNote = getSettingStringUtf(hContact, DBSETTING_STATUS_NOTE, ""); wchar_t* szStatusNoteW = make_unicode_string(szStatusNote); int len = (int)wcslen(szStatusNoteW) * 3 + 1; char* szStatusNoteAnsi = (char*)alloca(len); WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, szStatusNoteW, -1, szStatusNoteAnsi, len, NULL, NULL); bool notmatch = false; for (int i=0; ;++i) { if (szStatusNoteAnsi[i] != szStatusMsg[i] && szStatusNoteAnsi[i] != '?' && szStatusMsg[i] != '?') { notmatch = true; break; } if (!szStatusNoteAnsi[i] || !szStatusMsg[i]) break; } szStatusMsg = notmatch ? ansi_to_utf8(szStatusMsg) : szStatusNote; SAFE_FREE(&szStatusNoteW); if (notmatch) SAFE_FREE(&szStatusNote); } char* oldStatusMsg = NULL; DBVARIANT dbv; if (!DBGetContactSetting(hContact, "CList", "StatusMsg", &dbv)) { switch (dbv.type) { case DBVT_UTF8: oldStatusMsg = null_strdup(dbv.pszVal); break; case DBVT_WCHAR: oldStatusMsg = make_utf8_string(dbv.pwszVal); break; } ICQFreeVariant(&dbv); } if (!oldStatusMsg || strcmp(oldStatusMsg, szStatusMsg)) setSettingStringUtf(hContact, "CList", "StatusMsg", szStatusMsg); SAFE_FREE(&oldStatusMsg); if (isAnsi) SAFE_FREE(&szStatusMsg); } else DBDeleteContactSetting(hContact, "CList", "StatusMsg"); }
/** A message has been received on a conversation */ void mwIm_conversation_recv(mwConversation *conv, mwImSendType type, gconstpointer msg) { mwIdBlock *idb = mwConversation_getTarget(conv); HANDLE hContact = FindContactByUserId(idb->user); if(type == mwImSend_TYPING) { CallService(MS_PROTO_CONTACTISTYPING, (WPARAM)hContact, (LPARAM)(GPOINTER_TO_UINT(msg) == 0 ? 0 : 2)); return; } if(type != mwImSend_PLAIN) return; wchar_t temp[MAX_MESSAGE_SIZE]; char text[MAX_MESSAGE_SIZE]; MultiByteToWideChar(CP_UTF8, 0, (const char *)msg, -1, temp, MAX_MESSAGE_SIZE); WideCharToMultiByte(CallService(MS_LANGPACK_GETCODEPAGE, 0, 0), WC_COMPOSITECHECK, temp, -1, text, MAX_MESSAGE_SIZE * sizeof(char), 0, 0); CCSDATA ccs = {0}; PROTORECVEVENT pre = {0}; ccs.hContact = hContact; ccs.szProtoService = PSR_MESSAGE; ccs.wParam = 0; ccs.lParam = (LPARAM)⪯ pre.timestamp = (DWORD)time(0); int tMsgBodyLen = strlen(text); int tRealBodyLen = wcslen(temp); int tMsgBufLen = (tMsgBodyLen+1) * sizeof(char) + (tRealBodyLen+1)*sizeof( wchar_t ); char* tMsgBuf = ( char* )malloc( tMsgBufLen ); char* p = tMsgBuf; strcpy( p, text ); p += (tMsgBodyLen+1); if ( tRealBodyLen != 0 ) { wcscpy((wchar_t *)p, temp); pre.flags = PREF_UNICODE; } pre.szMessage = tMsgBuf; DBDeleteContactSetting(hContact, "CList", "Hidden"); CallService(MS_PROTO_CHAINRECV, 0, (LPARAM)&ccs); free(tMsgBuf); }