void CSkypeProto::UpdateProfileLanguage(const JSONNode &root, MCONTACT hContact) { CMString isocode = root["language"].as_mstring(); if (!isocode.IsEmpty() && isocode != "null") setTString(hContact, "Language0", languages[isocode.GetBuffer()].c_str()); else delSetting(hContact, "Language0"); }
// we assume that it could be called only for the metacontacts static int Meta_SrmmIconClicked(WPARAM hMeta, LPARAM lParam) { StatusIconClickData *sicd = (StatusIconClickData*)lParam; if (lstrcmpA(sicd->szModule, META_PROTO)) return 0; DBCachedContact *cc = CheckMeta(hMeta); if (cc == NULL) return 0; HMENU hMenu = CreatePopupMenu(); int iDefault = Meta_GetContactNumber(cc, db_mc_getSrmmSub(cc->contactID)); MENUITEMINFO mii = { sizeof(mii) }; mii.fMask = MIIM_ID | MIIM_STATE | MIIM_STRING; for (int i = 0; i < cc->nSubs; i++) { char *szProto = GetContactProto(cc->pSubs[i]); if (szProto == NULL) continue; PROTOACCOUNT *pa = ProtoGetAccount(szProto); if (pa == NULL) continue; CMString tszNick; if (options.menu_contact_label == DNT_DID) tszNick = cli.pfnGetContactDisplayName(cc->pSubs[i], 0); else Meta_GetSubNick(hMeta, i, tszNick); tszNick.AppendFormat(_T(" [%s]"), pa->tszAccountName); mii.wID = i + 1; mii.fState = (i == iDefault) ? MFS_CHECKED : MFS_ENABLED; mii.dwTypeData = tszNick.GetBuffer(); mii.cch = tszNick.GetLength(); InsertMenuItem(hMenu, i, TRUE, &mii); } UINT res = TrackPopupMenu(hMenu, TPM_NONOTIFY | TPM_RETURNCMD | TPM_BOTTOMALIGN | TPM_LEFTALIGN, sicd->clickLocation.x, sicd->clickLocation.y, 0, cli.hwndContactTree, NULL); if (res > 0) { MCONTACT hChosen = Meta_GetContactHandle(cc, res - 1); MetaSrmmData tmp = { cc->contactID }; if (MetaSrmmData *p = arMetaWindows.find(&tmp)) p->m_hSub = hChosen; db_mc_setDefault(cc->contactID, hChosen, true); } return 0; }
BOOL CMPath::PathExist(const CMString& sPathName) { CMString str = sPathName; #ifdef PLAT_SYMBIAN TPtrC ptr((const TUint16*)str.GetBuffer(),str.GetLength()); if(BaflUtils::PathExists(CCoeEnv::Static()->FsSession(), ptr)==EFalse) return FALSE; #else ::WIN32_FIND_DATA fd; HANDLE hd=::FindFirstFile(str,&fd); if(hd==INVALID_HANDLE_VALUE) return FALSE; ::CloseHandle(hd); #endif return TRUE; }
void CSkypeProto::UpdateProfileBirthday(const JSONNode &root, MCONTACT hContact) { CMString birthday = root["birthday"].as_mstring(); if (!birthday.IsEmpty() && birthday != "null") { int d, m, y; _stscanf(birthday.GetBuffer(), _T("%d-%d-%d"), &y, &m, &d); setWord(hContact, "BirthYear", y); setByte(hContact, "BirthDay", d); setByte(hContact, "BirthMonth", m); } else { delSetting(hContact, "BirthYear"); delSetting(hContact, "BirthDay"); delSetting(hContact, "BirthMonth"); } }
INT_PTR CALLBACK DlgProcOptionsPage(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: { char key[64]; int count = 0; CMString replies; TranslateDialogDefault(hwndDlg); variables_skin_helpbutton(hwndDlg, IDC_VARIABLES); ShowWindow(GetDlgItem(hwndDlg, IDC_VARIABLES_HINT), ServiceExists(MS_VARS_FORMATSTRING)); mir_subclassWindow(GetDlgItem(hwndDlg, IDC_REPLIES), MessageEditSubclassProc); mir_snprintf(key, _countof(key), "ImmediatelySend_%x", iNumber); CheckDlgButton(hwndDlg, IDC_IMMEDIATELY, db_get_w(NULL, MODULE, key, 1) ? BST_CHECKED : BST_UNCHECKED); mir_snprintf(key, _countof(key), "RepliesCount_%x", iNumber); count = db_get_w(NULL, MODULE, key, 0); for (int i = 0; i < count; i++) { mir_snprintf(key, _countof(key), "Reply_%x_%x", iNumber, i); wchar_t *value = db_get_wsa(NULL, MODULE, key); if (value) { replies.Append(value); replies.Append(_T("\r\n")); } mir_free(value); } SetDlgItemText(hwndDlg, IDC_REPLIES, replies.GetBuffer()); } return TRUE; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) { switch(LOWORD(wParam)) { case IDC_VARIABLES: variables_showhelp(hwndDlg, IDC_REPLIES, VHF_SIMPLEDLG, NULL, NULL); break; case IDC_IMMEDIATELY: SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } } break; case WM_NOTIFY: { NMHDR *p = ((LPNMHDR)lParam); switch (p->code) { case PSN_APPLY: { char key[64]; int count = 0; wchar_t *tszReplies; mir_snprintf(key, _countof(key), "RepliesCount_%x", iNumber); count = db_get_b(NULL, MODULE, key, 0); for (int i = 0; i < count; i++) { mir_snprintf(key, _countof(key), "Reply_%x_%x", iNumber, i); db_unset(NULL, MODULE, key); } int length = SendDlgItemMessage(hwndDlg, IDC_REPLIES, WM_GETTEXTLENGTH, 0, 0); tszReplies = (wchar_t*)mir_alloc(sizeof(wchar_t)* (length + 1)); GetDlgItemText(hwndDlg, IDC_REPLIES, tszReplies, length + 1); tszReplies[length] = '\0'; { CMString replies = tszReplies; if (replies.Right(2) != _T("\r\n")) replies.Append(_T("\r\n")); count = 0; int pos = -1, prev = 0; while ((pos = replies.Find(_T("\r\n"), prev)) != -1) { mir_snprintf(key, _countof(key), "Reply_%x_%x", iNumber, count++); db_set_ws(NULL, MODULE, key, replies.Mid(prev, pos - prev).GetBuffer()); prev = pos + 2; } } mir_free(tszReplies); mir_snprintf(key, _countof(key), "RepliesCount_%x", iNumber); db_set_w(NULL, MODULE, key, count); mir_snprintf(key, _countof(key), "ImmediatelySend_%x", iNumber); db_set_b(NULL, MODULE, key, (BYTE)IsDlgButtonChecked(hwndDlg, IDC_IMMEDIATELY)); return TRUE; } break; } } break; } if (HIWORD(wParam) == EN_CHANGE && GetFocus() == (HWND)lParam) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); return FALSE; }
int CSkypeProto::OnGroupChatEventHook(WPARAM, LPARAM lParam) { GCHOOK *gch = (GCHOOK*)lParam; if (!gch) { return 1; } else if (mir_strcmp(gch->pDest->pszModule, m_szModuleName) != 0) { return 0; } ptrA chat_id(mir_t2a(gch->pDest->ptszID)); switch (gch->pDest->iType) { case GC_USER_MESSAGE: { OnSendChatMessage(gch->pDest->ptszID, gch->ptszText); break; } case GC_USER_PRIVMESS: { MCONTACT hContact = FindContact(_T2A(gch->ptszUID)); if (hContact == NULL) { hContact = AddContact(_T2A(gch->ptszUID), true); setWord(hContact, "Status", ID_STATUS_ONLINE); db_set_b(hContact, "CList", "Hidden", 1); setTString(hContact, "Nick", gch->ptszUID); db_set_dw(hContact, "Ignore", "Mask1", 0); } CallService(MS_MSG_SENDMESSAGET, hContact, 0); break; } case GC_USER_LOGMENU: { switch (gch->dwData) { case 10: { CSkypeInviteDlg dlg(this); if(!dlg.DoModal()) { break; } MCONTACT hContact = dlg.m_hContact; if (hContact != NULL) { ptrA username(db_get_sa(hContact, m_szModuleName, SKYPE_SETTINGS_ID)); SendRequest(new InviteUserToChatRequest(m_szRegToken, chat_id, username, "User", m_szServer)); } break; } case 20: OnLeaveChatRoom(FindChatRoom(chat_id), NULL); break; case 30: CMString newTopic = ChangeTopicForm(); if (!newTopic.IsEmpty()) SendRequest(new SetChatPropertiesRequest(m_szRegToken, chat_id, "topic", ptrA(mir_utf8encodeT(newTopic.GetBuffer())), m_szServer)); break; } break; } case GC_USER_NICKLISTMENU: { ptrA user_id; if (gch->dwData == 10 || gch->dwData == 30 || gch->dwData == 40) { user_id = mir_t2a_cp(gch->ptszUID, CP_UTF8); } switch (gch->dwData) { case 10: SendRequest(new KickUserRequest(m_szRegToken, chat_id, user_id, m_szServer)); break; case 30: SendRequest(new InviteUserToChatRequest(m_szRegToken, chat_id, user_id, "Admin", m_szServer)); break; case 40: SendRequest(new InviteUserToChatRequest(m_szRegToken, chat_id, user_id, "User", m_szServer)); break; } break; } } return 0; }
int Meta_ModifyMenu(WPARAM hMeta, LPARAM) { DBCachedContact *cc = currDb->m_cache->GetCachedContact(hMeta); if (cc == NULL) return 0; Menu_ShowItem(hMenuRoot, false); if (cc->IsMeta()) { // save the mouse pos in case they open a subcontact menu GetCursorPos(&menuMousePoint); // This is a MetaContact, show the edit, force default, and the delete menu, and hide the others Menu_ShowItem(hMenuEdit, true); Menu_ShowItem(hMenuAdd, false); Menu_ShowItem(hMenuConvert, false); Menu_ShowItem(hMenuDefault, false); Menu_ShowItem(hMenuDelete, false); Menu_ModifyItem(hMenuDelete, LPGENT("Remove from metacontact")); // show subcontact menu items CMString tszNick; for (int i = 0; i < MAX_CONTACTS; i++) { if (i >= cc->nSubs) { Menu_ShowItem(hMenuContact[i], false); continue; } MCONTACT hContact = Meta_GetContactHandle(cc, i); LPCTSTR ptszName; if (options.menu_contact_label == DNT_UID) { Meta_GetSubNick(hMeta, i, tszNick); ptszName = tszNick.GetBuffer(); } else ptszName = cli.pfnGetContactDisplayName(hContact, 0); int iconIndex = CallService(MS_CLIST_GETCONTACTICON, hContact, 0); HICON hIcon = ImageList_GetIcon((HIMAGELIST)CallService(MS_CLIST_GETICONSIMAGELIST, 0, 0), iconIndex, 0); Menu_ModifyItem(hMenuContact[i], ptszName, hIcon, 0); DestroyIcon(hIcon); Menu_ShowItem(hMenuRoot, true); } // show hide nudge menu item char serviceFunc[256]; mir_snprintf(serviceFunc, _countof(serviceFunc), "%s%s", GetContactProto(Meta_GetMostOnline(cc)), PS_SEND_NUDGE); CallService(MS_NUDGE_SHOWMENU, (WPARAM)META_PROTO, ServiceExists(serviceFunc)); return 0; } PROTOACCOUNT *pa = Proto_GetAccount(cc->szProto); if (!db_mc_isEnabled() || !pa || pa->bIsVirtual) { // groups disabled - all meta menu options hidden Menu_ShowItem(hMenuDefault, false); Menu_ShowItem(hMenuDelete, false); Menu_ShowItem(hMenuAdd, false); Menu_ShowItem(hMenuConvert, false); Menu_ShowItem(hMenuEdit, false); return 0; } // the contact is affected to a metacontact if (cc->IsSub()) { Menu_ShowItem(hMenuDefault, true); Menu_ModifyItem(hMenuDelete, LPGENT("Remove from metacontact")); Menu_ShowItem(hMenuDelete, true); Menu_ShowItem(hMenuAdd, false); Menu_ShowItem(hMenuConvert, false); Menu_ShowItem(hMenuEdit, false); } else { // The contact is neutral bool bHideChat = db_get_b(hMeta, cc->szProto, "ChatRoom", 0) == 0; Menu_ShowItem(hMenuAdd, bHideChat); Menu_ShowItem(hMenuConvert, bHideChat); Menu_ShowItem(hMenuEdit, false); Menu_ShowItem(hMenuDelete, false); Menu_ShowItem(hMenuDefault, false); } for (int i = 0; i < MAX_CONTACTS; i++) Menu_ShowItem(hMenuContact[i], false); return 0; }