void LoadContactTree(void) { int tick = GetTickCount(); CallService(MS_CLUI_LISTBEGINREBUILD,0,0); for (int i=1;; i++) { if ((char*)CallService(MS_CLIST_GROUPGETNAME2, i, 0) == NULL) break; CallService(MS_CLUI_GROUPADDED, i, 0); } int hideOffline = db_get_b(NULL,"CList","HideOffline",SETTING_HIDEOFFLINE_DEFAULT); for (MCONTACT hContact = db_find_first(); hContact; hContact = db_find_next(hContact)) { ClcCacheEntry *cacheEntry = GetContactFullCacheEntry(hContact); if (cacheEntry == NULL) { MessageBoxA(0,"Fail To Get CacheEntry for hContact","!!!!!",0); break; } int status = cacheEntry->status; if ((!hideOffline || status != ID_STATUS_OFFLINE) && !cacheEntry->bIsHidden) ChangeContactIcon(hContact,ExtIconFromStatusMode(hContact,(char*)cacheEntry->szProto,status),1); } sortByStatus = db_get_b(NULL,"CList","SortByStatus",SETTING_SORTBYSTATUS_DEFAULT); sortByProto = db_get_b(NULL,"CList","SortByProto",SETTING_SORTBYPROTO_DEFAULT); sortNoOfflineBottom = db_get_b(NULL,"CList","NoOfflineBottom",SETTING_NOOFFLINEBOTTOM_DEFAULT); CallService(MS_CLUI_LISTENDREBUILD,0,0); tick = GetTickCount()-tick; char buf[255]; mir_snprintf(buf, SIZEOF(buf), "LoadContactTree %d \r\n", tick); OutputDebugStringA(buf); }
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_PTR ContactChangeGroup(WPARAM hContact, LPARAM lParam) { CallService(MS_CLUI_CONTACTDELETED, hContact, 0); if ((HANDLE)lParam == NULL) db_unset(hContact, "CList", "Group"); else db_set_s(hContact, "CList", "Group", (char*)CallService(MS_CLIST_GROUPGETNAME2, lParam, (LPARAM)(int*)NULL)); CallService(MS_CLUI_CONTACTADDED, hContact, ExtIconFromStatusMode(hContact, GetContactProto(hContact), GetContactStatus(hContact))); return 0; }
INT_PTR GetContactIcon(WPARAM wParam,LPARAM lParam) { char *szProto; int status; int res; szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0); if (szProto == NULL) status = ID_STATUS_OFFLINE; else status = ModernGetSettingWord((HANDLE) wParam, szProto, "Status", ID_STATUS_OFFLINE); res=ExtIconFromStatusMode((HANDLE)wParam,szProto,szProto==NULL?ID_STATUS_OFFLINE:status); //by FYR if (lParam==0 && res!=-1) res&=0xFFFF; return res; }
int GetContactIcon(WPARAM wParam,LPARAM lParam) { char *szProto; int status; pdisplayNameCacheEntry cacheEntry; cacheEntry=GetContactFullCacheEntry((HANDLE)wParam); //szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wParam,0); szProto=cacheEntry->szProto; status=cacheEntry->status; return ExtIconFromStatusMode((HANDLE)wParam,szProto,szProto==NULL?ID_STATUS_OFFLINE:status); //by FYR }
void LoadContactTree(void) { HANDLE hContact; int i,hideOffline,status,tick; pdisplayNameCacheEntry cacheEntry; tick=GetTickCount(); CallService(MS_CLUI_LISTBEGINREBUILD,0,0); for(i=1;;i++) { if((char*)CallService(MS_CLIST_GROUPGETNAME2,i,(LPARAM)(int*)NULL)==NULL) break; CallService(MS_CLUI_GROUPADDED,i,0); } hideOffline=DBGetContactSettingByte(NULL,"CList","HideOffline",SETTING_HIDEOFFLINE_DEFAULT); hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDFIRST,0,0); while(hContact!=NULL) { cacheEntry=GetContactFullCacheEntry(hContact); if (cacheEntry==NULL) { MessageBoxA(0,"Fail To Get CacheEntry for hContact","!!!!!",0); break; } status=cacheEntry->status; if((!hideOffline || status!=ID_STATUS_OFFLINE) && !cacheEntry->Hidden) ChangeContactIcon(hContact,ExtIconFromStatusMode(hContact,(char*)cacheEntry->szProto,status),1); hContact=(HANDLE)CallService(MS_DB_CONTACT_FINDNEXT,(WPARAM)hContact,0); } sortBy[0]=DBGetContactSettingByte(NULL,"CList","SortBy1",SETTING_SORTBY1_DEFAULT); sortBy[1]=DBGetContactSettingByte(NULL,"CList","SortBy2",SETTING_SORTBY2_DEFAULT); sortBy[2]=DBGetContactSettingByte(NULL,"CList","SortBy3",SETTING_SORTBY3_DEFAULT); sortNoOfflineBottom=DBGetContactSettingByte(NULL,"CList","NoOfflineBottom",SETTING_NOOFFLINEBOTTOM_DEFAULT); CallService(MS_CLUI_SORTLIST,0,0); CallService(MS_CLUI_LISTENDREBUILD,0,0); tick=GetTickCount()-tick; { char buf[255]; //sprintf(buf,"%s %s took %i ms",__FILE__,__LINE__,tick); sprintf(buf,"LoadContactTree %d \r\n",tick); TRACE(buf); } }
//returns normal icon or combined with status overlay. Needs to be destroyed. HICON cliGetIconFromStatusMode(HANDLE hContact, const char *szProto,int status) { HICON hIcon=NULL; HICON hXIcon=NULL; // check if options is turned on BYTE trayOption=ModernGetSettingByte(NULL,"CLUI","XStatusTray",SETTING_TRAYOPTION_DEFAULT); if (trayOption&3 && szProto!=NULL) { // check service exists char str[MAXMODULELABELLENGTH]; strcpy(str,szProto); strcat(str,"/GetXStatusIcon"); if (ServiceExists(str)) { // check status is online if (status>ID_STATUS_OFFLINE) { // get xicon hXIcon=(HICON)CallService(str,0,0); if (hXIcon) { // check overlay mode if (trayOption&2) { // get overlay HICON MainOverlay=(HICON)GetMainStatusOverlay(status); hIcon=ske_CreateJoinedIcon(hXIcon,MainOverlay,(trayOption&4)?192:0); DestroyIcon_protect(hXIcon); DestroyIcon_protect(MainOverlay); } else { // paint it hIcon=hXIcon; } } } } } if (!hIcon) { hIcon=ske_ImageList_GetIcon(g_himlCListClc,ExtIconFromStatusMode(hContact,szProto,status),ILD_NORMAL); } // if not ready take normal icon return hIcon; }
int ContactSettingChanged(WPARAM wParam,LPARAM lParam) { DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam; HANDLE hContact = (HANDLE)wParam; // Early exit if (hContact == NULL) return 0; __try { ClcCacheEntry *pdnce = (ClcCacheEntry *)pcli->pfnGetCacheEntry(hContact); if (pdnce == NULL) { OutputDebugStringA("!!! Very bad pdnce not found."); return 0; } if (pdnce && pdnce->protoNotExists == FALSE && pdnce->szProto) { if ( !strcmp(cws->szModule,pdnce->szProto)) { InvalidateDisplayNameCacheEntryByPDNE(hContact,pdnce,cws->value.type); if (cws->value.type == DBVT_WORD && !strcmp(cws->szSetting, "Status")) { if ( !(pdnce->bIsHidden == 1)) { if ( db_get_b((HANDLE)NULL,"CList","ShowStatusMsg",0)||db_get_b(hContact,"CList","StatusMsgAuto",0)) db_set_s(hContact, "CList", "StatusMsg", ""); if ( db_get_b(NULL, "CList", "HideOffline", SETTING_HIDEOFFLINE_DEFAULT)) { // User's state is changing, and we are hideOffline-ing if (cws->value.wVal == ID_STATUS_OFFLINE) { ChangeContactIcon(hContact, ExtIconFromStatusMode(hContact,cws->szModule, cws->value.wVal), 0); //by FYR return 0; } ChangeContactIcon(hContact, ExtIconFromStatusMode(hContact,cws->szModule, cws->value.wVal), 0); //by FYR } else ChangeContactIcon(hContact, ExtIconFromStatusMode(hContact,cws->szModule, cws->value.wVal), 0); //by FYR } } else if ( !strcmp(cws->szModule,"MetaContacts")) { PostMessage(pcli->hwndContactTree,CLM_AUTOREBUILD,0,0); return 0; } else return 0; SortContacts(); } } if ( !strcmp(cws->szModule,"CList")) { if (pdnce->tszName == NULL || !strcmp(cws->szSetting,"MyHandle")) InvalidateDisplayNameCacheEntryByPDNE(hContact,pdnce,cws->value.type); if ((!strcmp(cws->szSetting,"Group"))) InvalidateDisplayNameCacheEntryByPDNE(hContact,pdnce,cws->value.type); if ( !strcmp(cws->szSetting,"Hidden")) { InvalidateDisplayNameCacheEntryByPDNE(hContact,pdnce,cws->value.type); if (cws->value.type == DBVT_DELETED || cws->value.bVal == 0) { char *szProto = GetContactProto((HANDLE)wParam); ChangeContactIcon(hContact,ExtIconFromStatusMode(hContact, szProto, szProto == NULL ? ID_STATUS_OFFLINE : db_get_w(hContact, szProto, "Status", ID_STATUS_OFFLINE)), 1); //by FYR } } if ( !strcmp(cws->szSetting, "noOffline")) InvalidateDisplayNameCacheEntryByPDNE(hContact, pdnce, cws->value.type); } if ( !strcmp(cws->szModule, "Protocol")) { if ( !strcmp(cws->szSetting,"p")) { OutputDebugStringA("CHANGE: proto\r\n"); InvalidateDisplayNameCacheEntryByPDNE(hContact, pdnce, cws->value.type); char *szProto = (cws->value.type == DBVT_DELETED) ? NULL : cws->value.pszVal; ChangeContactIcon(hContact, ExtIconFromStatusMode(hContact, szProto, szProto == NULL?ID_STATUS_OFFLINE:db_get_w(hContact,szProto,"Status",ID_STATUS_OFFLINE)),0); //by FYR } } } __except (exceptFunction(GetExceptionInformation())) { } return 0; }
int ContactSettingChanged(WPARAM wParam,LPARAM lParam) { DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam; pdisplayNameCacheEntry pdnce; // Early exit if ((HANDLE)wParam == NULL) return 0; __try { pdnce = (pdisplayNameCacheEntry)pcli->pfnGetCacheEntry((HANDLE)wParam); if (pdnce == NULL) { OutputDebugStringA("!!! Very bad pdnce not found."); return 0; } if (pdnce&&(pdnce->protoNotExists == FALSE)&&pdnce->szProto) { if (!strcmp(cws->szModule,pdnce->szProto)) { InvalidateDisplayNameCacheEntryByPDNE((HANDLE)wParam,pdnce,cws->value.type); if (cws->value.type == DBVT_WORD&&!strcmp(cws->szSetting, "Status")) { if (!(pdnce->Hidden == 1)) { if(DBGetContactSettingByte((HANDLE)NULL,"CList","ShowStatusMsg",0)||DBGetContactSettingByte((HANDLE)wParam,"CList","StatusMsgAuto",0)) DBWriteContactSettingString((HANDLE)wParam, "CList", "StatusMsg", ""); if (DBGetContactSettingByte(NULL, "CList", "HideOffline", SETTING_HIDEOFFLINE_DEFAULT)) { // User's state is changing, and we are hideOffline-ing if (cws->value.wVal == ID_STATUS_OFFLINE) { ChangeContactIcon((HANDLE)wParam, ExtIconFromStatusMode((HANDLE)wParam,cws->szModule, cws->value.wVal), 0); //by FYR return 0; } ChangeContactIcon((HANDLE)wParam, ExtIconFromStatusMode((HANDLE)wParam,cws->szModule, cws->value.wVal), 0); //by FYR } else { ChangeContactIcon((HANDLE)wParam, ExtIconFromStatusMode((HANDLE)wParam,cws->szModule, cws->value.wVal), 0); //by FYR } } } else if (!strcmp(cws->szModule,"MetaContacts")) { PostMessage(pcli->hwndContactTree,CLM_AUTOREBUILD,0,0); return 0; } else return 0; SortContacts(); } } if(!strcmp(cws->szModule,"CList")) { /* sprintf(buf,"CHANGE: module:CList setting:%s %s\r\n",cws->szSetting,cws->value.pszVal); OutputDebugStringA(buf); */ //name is null or (setting is myhandle) if(pdnce->name == NULL||(!strcmp(cws->szSetting,"MyHandle")) ) InvalidateDisplayNameCacheEntryByPDNE((HANDLE)wParam,pdnce,cws->value.type); if((!strcmp(cws->szSetting,"Group")) ) InvalidateDisplayNameCacheEntryByPDNE((HANDLE)wParam,pdnce,cws->value.type); if(!strcmp(cws->szSetting,"Hidden")) { InvalidateDisplayNameCacheEntryByPDNE((HANDLE)wParam,pdnce,cws->value.type); if(cws->value.type == DBVT_DELETED || cws->value.bVal == 0) { char *szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wParam,0); ChangeContactIcon((HANDLE)wParam,ExtIconFromStatusMode((HANDLE)wParam,szProto,szProto == NULL?ID_STATUS_OFFLINE:DBGetContactSettingWord((HANDLE)wParam,szProto,"Status",ID_STATUS_OFFLINE)),1); //by FYR } } if(!strcmp(cws->szSetting,"noOffline")) InvalidateDisplayNameCacheEntryByPDNE((HANDLE)wParam,pdnce,cws->value.type); } if(!strcmp(cws->szModule,"Protocol")) { if(!strcmp(cws->szSetting,"p")) { char *szProto; OutputDebugStringA("CHANGE: proto\r\n"); InvalidateDisplayNameCacheEntryByPDNE((HANDLE)wParam,pdnce,cws->value.type); if(cws->value.type == DBVT_DELETED) szProto=NULL; else szProto=cws->value.pszVal; ChangeContactIcon((HANDLE)wParam,ExtIconFromStatusMode((HANDLE)wParam,szProto,szProto == NULL?ID_STATUS_OFFLINE:DBGetContactSettingWord((HANDLE)wParam,szProto,"Status",ID_STATUS_OFFLINE)),0); //by FYR } } } __except (exceptFunction(GetExceptionInformation()) ) { } return 0; }
int GetContactIconC(pdisplayNameCacheEntry cacheEntry) { return ExtIconFromStatusMode(cacheEntry->m_cache_hContact,cacheEntry->m_cache_cszProto,cacheEntry->m_cache_cszProto==NULL ? ID_STATUS_OFFLINE : pdnce___GetStatus( cacheEntry )); }
int GetContactIconC(pdisplayNameCacheEntry cacheEntry) { return ExtIconFromStatusMode(cacheEntry->hContact,cacheEntry->szProto,cacheEntry->szProto==NULL ? ID_STATUS_OFFLINE : cacheEntry->status); }