virtual void OnApply() { ptrT tszGroup(m_group.GetText()); if (mir_tstrcmp(m_proto->m_tszDefaultGroup, tszGroup)) m_proto->m_tszDefaultGroup = tszGroup.detach(); if (m_proto->isOnline()) MessageBox(NULL, TranslateT("Changes will be applied after protocol restart"), m_proto->m_tszUserName, MB_OK); }
INT_PTR Meta_Convert(WPARAM wParam, LPARAM) { ptrT tszGroup(db_get_tsa(wParam, "CList", "Group")); // Create a new metacontact MCONTACT hMetaContact = (MCONTACT)CallService(MS_DB_CONTACT_ADD, 0, 0); if (hMetaContact == NULL) return NULL; DBCachedContact *cc = currDb->m_cache->GetCachedContact(hMetaContact); if (cc == NULL) return 0; db_set_dw(hMetaContact, META_PROTO, "NumContacts", 0); cc->nSubs = 0; currDb->MetaSetDefault(cc); // explicitly write default sub to a db // Add the MetaContact protocol to the new meta contact Proto_AddToContact(hMetaContact, META_PROTO); if (tszGroup) db_set_ts(hMetaContact, "CList", "Group", tszGroup); // Assign the contact to the MetaContact just created (and make default). if (!Meta_Assign(wParam, hMetaContact, TRUE)) { MessageBox(0, TranslateT("There was a problem in assigning the contact to the metacontact"), TranslateT("Error"), MB_ICONEXCLAMATION); CallService(MS_DB_CONTACT_DELETE, hMetaContact, 0); return 0; } // hide the contact if clist groups disabled (shouldn't create one anyway since menus disabled) if (!db_mc_isEnabled()) db_set_b(hMetaContact, "CList", "Hidden", 1); return hMetaContact; }
void OnInitDialog() { char szUin[10]; Window_SetSkinIcon_IcoLib(m_hwnd, SKINICON_OTHER_ADDCONTACT); if (m_acs.handleType == HANDLE_EVENT) { DWORD dwUin; DBEVENTINFO dbei = { sizeof(dbei) }; dbei.cbBlob = sizeof(DWORD); dbei.pBlob = (PBYTE)&dwUin; db_event_get(m_acs.hDbEvent, &dbei); _ltoa(dwUin, szUin, 10); m_acs.szProto = dbei.szModule; } MCONTACT hContact; TCHAR *szName = NULL, *tmpStr = NULL; if (m_acs.handleType == HANDLE_CONTACT) szName = cli.pfnGetContactDisplayName(hContact = m_acs.hContact, 0); else { int isSet = 0; hContact = 0; if (m_acs.handleType == HANDLE_EVENT) { DBEVENTINFO dbei = { sizeof(dbei) }; dbei.cbBlob = db_event_getBlobSize(m_acs.hDbEvent); dbei.pBlob = (PBYTE)mir_alloc(dbei.cbBlob); db_event_get(m_acs.hDbEvent, &dbei); hContact = *(MCONTACT*)(dbei.pBlob + sizeof(DWORD)); mir_free(dbei.pBlob); if (hContact != INVALID_CONTACT_ID) { szName = cli.pfnGetContactDisplayName(hContact, 0); isSet = 1; } } if (!isSet) { if (m_acs.handleType == HANDLE_EVENT) szName = mir_a2t(szUin); else { szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->id); if (!szName) szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->nick); } } } if (szName && szName[0]) SetCaption(CMString(FORMAT, TranslateT("Add %s"), szName)); else SetCaption(TranslateT("Add contact")); mir_free(tmpStr); if (m_acs.handleType == HANDLE_CONTACT && m_acs.hContact) if (m_acs.szProto == NULL || (m_acs.szProto != NULL && *m_acs.szProto == 0)) m_acs.szProto = GetContactProto(m_acs.hContact); int groupSel = 0; ptrT tszGroup(db_get_tsa(hContact, "CList", "Group")); TCHAR *grpName; for (int groupId = 1; (grpName = Clist_GroupGetName(groupId, NULL)) != NULL; groupId++) { int id = m_group.AddString(grpName, groupId); if (!mir_tstrcmpi(tszGroup, grpName)) groupSel = id; } m_group.InsertString(TranslateT("None"), 0); m_group.SetCurSel(groupSel); // By default check both checkboxes m_chkAdded.SetState(true); m_chkAuth.SetState(true); // Set last choice if (db_get_b(NULL, "Miranda", "AuthOpenWindow", 1)) m_chkOpen.SetState(true); DWORD flags = (m_acs.szProto) ? CallProtoServiceInt(NULL, m_acs.szProto, PS_GETCAPS, PFLAGNUM_4, 0) : 0; if (flags & PF4_FORCEADDED) // force you were added requests for this protocol m_chkAdded.Enable(false); if (flags & PF4_FORCEAUTH) // force auth requests for this protocol m_chkAuth.Enable(false); if (flags & PF4_NOCUSTOMAUTH) m_authReq.Enable(false); else { m_authReq.Enable(m_chkAuth.Enabled()); m_authReq.SetText(TranslateT("Please authorize my request and add me to your contact list.")); } }
int GetFontSettingFromDB(char *settings_group, char *prefix, LOGFONT *lf, COLORREF *colour, DWORD flags) { GetDefaultFontSetting(lf, colour); char idstr[256]; if (flags & FIDF_APPENDNAME) mir_snprintf(idstr, "%sName", prefix); else strncpy_s(idstr, prefix, _TRUNCATE); int retval = 0; ptrT tszGroup(db_get_tsa(NULL, settings_group, idstr)); if (tszGroup != NULL) _tcsncpy_s(lf->lfFaceName, tszGroup, _TRUNCATE); else retval = 1; if (colour) { mir_snprintf(idstr, "%sCol", prefix); *colour = db_get_dw(NULL, settings_group, idstr, *colour); } mir_snprintf(idstr, "%sSize", prefix); lf->lfHeight = (char)db_get_b(NULL, settings_group, idstr, lf->lfHeight); mir_snprintf(idstr, "%sSty", prefix); BYTE style = (BYTE)db_get_b(NULL, settings_group, idstr, (lf->lfWeight == FW_NORMAL ? 0 : DBFONTF_BOLD) | (lf->lfItalic ? DBFONTF_ITALIC : 0) | (lf->lfUnderline ? DBFONTF_UNDERLINE : 0) | lf->lfStrikeOut ? DBFONTF_STRIKEOUT : 0); lf->lfWidth = lf->lfEscapement = lf->lfOrientation = 0; lf->lfWeight = style & DBFONTF_BOLD ? FW_BOLD : FW_NORMAL; lf->lfItalic = (style & DBFONTF_ITALIC) != 0; lf->lfUnderline = (style & DBFONTF_UNDERLINE) != 0; lf->lfStrikeOut = (style & DBFONTF_STRIKEOUT) != 0; mir_snprintf(idstr, "%sSet", prefix); lf->lfCharSet = db_get_b(NULL, settings_group, idstr, lf->lfCharSet); lf->lfOutPrecision = OUT_DEFAULT_PRECIS; lf->lfClipPrecision = CLIP_DEFAULT_PRECIS; lf->lfQuality = DEFAULT_QUALITY; lf->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; if (lf->lfHeight > 0) { HDC hdc = GetDC(0); if (flags & FIDF_SAVEPOINTSIZE) lf->lfHeight = -MulDiv(lf->lfHeight, GetDeviceCaps(hdc, LOGPIXELSY), 72); else { // assume SAVEACTUALHEIGHT HFONT hFont = CreateFontIndirect(lf); HFONT hOldFont = (HFONT)SelectObject(hdc, hFont); TEXTMETRIC tm; GetTextMetrics(hdc, &tm); lf->lfHeight = -(lf->lfHeight - tm.tmInternalLeading); SelectObject(hdc, hOldFont); DeleteObject(hFont); } ReleaseDC(0, hdc); } return retval; }
int CLVM_GetContactHiddenStatus(MCONTACT hContact, char *szProto, struct ClcData *dat) { int dbHidden = db_get_b(hContact, "CList", "Hidden", 0); // default hidden state, always respect it. // always hide subcontacts (but show them on embedded contact lists) if (dat != NULL && dat->bHideSubcontacts && cfg::dat.bMetaEnabled && db_mc_isSub(hContact)) return 1; if (!cfg::dat.bFilterEffective) return dbHidden; if (szProto == NULL) szProto = GetContactProto(hContact); // check stickies first (priority), only if we really have stickies defined (CLVM_STICKY_CONTACTS is set). if (cfg::dat.bFilterEffective & CLVM_STICKY_CONTACTS) { DWORD dwLocalMask = db_get_dw(hContact, "CLVM", cfg::dat.current_viewmode, 0); if (dwLocalMask != 0) { if (cfg::dat.bFilterEffective & CLVM_FILTER_STICKYSTATUS) { WORD wStatus = db_get_w(hContact, szProto, "Status", ID_STATUS_OFFLINE); return !((1 << (wStatus - ID_STATUS_OFFLINE)) & HIWORD(dwLocalMask)); } return 0; } } // check the proto, use it as a base filter result for all further checks int filterResult = 1; if (cfg::dat.bFilterEffective & CLVM_FILTER_PROTOS) { char szTemp[64]; mir_snprintf(szTemp, "%s|", szProto); filterResult = strstr(cfg::dat.protoFilter, szTemp) ? 1 : 0; } if (cfg::dat.bFilterEffective & CLVM_FILTER_GROUPS) { ptrT tszGroup(db_get_tsa(hContact, "CList", "Group")); if (tszGroup != NULL) { TCHAR szGroupMask[256]; mir_sntprintf(szGroupMask, _T("%s|"), tszGroup); int bHasGroup = _tcsstr(cfg::dat.groupFilter, szGroupMask) ? 1 : 0; filterResult = (cfg::dat.filterFlags & CLVM_PROTOGROUP_OP) ? (filterResult | bHasGroup) : (filterResult & bHasGroup); } else if (cfg::dat.filterFlags & CLVM_INCLUDED_UNGROUPED) filterResult = (cfg::dat.filterFlags & CLVM_PROTOGROUP_OP) ? filterResult : filterResult & 1; else filterResult = (cfg::dat.filterFlags & CLVM_PROTOGROUP_OP) ? filterResult : filterResult & 0; } if (cfg::dat.bFilterEffective & CLVM_FILTER_STATUS) { WORD wStatus = db_get_w(hContact, szProto, "Status", ID_STATUS_OFFLINE); filterResult = (cfg::dat.filterFlags & CLVM_GROUPSTATUS_OP) ? ((filterResult | ((1 << (wStatus - ID_STATUS_OFFLINE)) & cfg::dat.statusMaskFilter ? 1 : 0))) : (filterResult & ((1 << (wStatus - ID_STATUS_OFFLINE)) & cfg::dat.statusMaskFilter ? 1 : 0)); } if (cfg::dat.bFilterEffective & CLVM_FILTER_LASTMSG) { TExtraCache *p = cfg::getCache(hContact, szProto); if (p) { DWORD now = cfg::dat.t_now; now -= cfg::dat.lastMsgFilter; if (cfg::dat.bFilterEffective & CLVM_FILTER_LASTMSG_OLDERTHAN) filterResult = filterResult & (p->dwLastMsgTime < now); else if (cfg::dat.bFilterEffective & CLVM_FILTER_LASTMSG_NEWERTHAN) filterResult = filterResult & (p->dwLastMsgTime > now); } } return (dbHidden | !filterResult); }
void fnAddContactToTree(HWND hwnd, ClcData *dat, MCONTACT hContact, int updateTotalCount, int checkHideOffline) { DWORD style = GetWindowLongPtr(hwnd, GWL_STYLE); WORD status = ID_STATUS_OFFLINE; char *szProto = GetContactProto(hContact); dat->bNeedsResort = true; if (style & CLS_NOHIDEOFFLINE) checkHideOffline = 0; if (checkHideOffline) if (szProto != NULL) status = db_get_w(hContact, szProto, "Status", ID_STATUS_OFFLINE); int i; DWORD groupFlags; ClcGroup *group; ptrT tszGroup(db_get_tsa(hContact, "CList", "Group")); if (tszGroup == NULL) group = &dat->list; else { group = cli.pfnAddGroup(hwnd, dat, tszGroup, (DWORD)-1, 0, 0); if (group == NULL) { if (!(style & CLS_HIDEEMPTYGROUPS)) return; if (checkHideOffline && cli.pfnIsHiddenMode(dat, status)) { for (i = 1;; i++) { TCHAR *szGroupName = Clist_GroupGetName(i, &groupFlags); if (szGroupName == NULL) return; if (!mir_tstrcmp(szGroupName, tszGroup)) break; } if (groupFlags & GROUPF_HIDEOFFLINE) return; } for (i = 1;; i++) { TCHAR *szGroupName = Clist_GroupGetName(i, &groupFlags); if (szGroupName == NULL) return; if (!mir_tstrcmp(szGroupName, tszGroup)) break; size_t len = mir_tstrlen(szGroupName); if (!_tcsncmp(szGroupName, tszGroup, len) && tszGroup[len] == '\\') cli.pfnAddGroup(hwnd, dat, szGroupName, groupFlags, i, 1); } group = cli.pfnAddGroup(hwnd, dat, tszGroup, groupFlags, i, 1); } } if (checkHideOffline) { if (cli.pfnIsHiddenMode(dat, status) && (style & CLS_HIDEOFFLINE || group->hideOffline)) { if (updateTotalCount) group->totalMembers++; return; } } cli.pfnAddContactToGroup(dat, group, hContact); if (updateTotalCount) group->totalMembers++; }