void MessagesDlg::OnChangeTab(pjsua_call_info *p_call_info) { tab->HighlightItem(tab->GetCurSel(),FALSE); MessagesContact* messagesContact = GetMessageContact(); SetWindowText(messagesContact->name); if (messagesContact->callId != -1) { pjsua_call_info call_info; if (!p_call_info) { pjsua_call_get_info(messagesContact->callId, &call_info); p_call_info = &call_info; } UpdateCallButton(TRUE, p_call_info); if (accountSettings.singleMode &&(p_call_info->role==PJSIP_ROLE_UAC || (p_call_info->role==PJSIP_ROLE_UAS && (p_call_info->state == PJSIP_INV_STATE_CONFIRMED || p_call_info->state == PJSIP_INV_STATE_CONNECTING) )) ) { SIPURI sipuri; ParseSIPURI(messagesContact->number, &sipuri); #ifndef _GLOBAL_ACCOUNT_MINI microsipDlg->pageDialer->SetNumber(!sipuri.user.IsEmpty() && sipuri.domain == accountSettings.account.domain ? sipuri.user : messagesContact->number); #else microsipDlg->pageDialer->SetNumber(!sipuri.user.IsEmpty() ? sipuri.user : messagesContact->number); #endif } } else { UpdateCallButton(); if (accountSettings.singleMode) { microsipDlg->pageDialer->Clear(); } } CRichEditCtrl* richEditList = (CRichEditCtrl*)GetDlgItem(IDC_LIST); CRichEditCtrl* richEdit = (CRichEditCtrl*)GetDlgItem(IDC_MESSAGE); CString messages = messagesContact->messages; EDITSTREAM es; es.dwCookie = (DWORD) &messages; es.pfnCallback = MEditStreamInCallback; richEditList->StreamIn(SF_RTF, es); richEditList->PostMessage(WM_VSCROLL, SB_BOTTOM, 0); richEdit->SetWindowText(messagesContact->message); int nEnd = richEdit->GetTextLengthEx(GTL_NUMCHARS); richEdit->SetSel(nEnd, nEnd); }
bool SelectSIPAccount(CString number, pjsua_acc_id &acc_id, pj_str_t &pj_uri) { SIPURI sipuri; ParseSIPURI(number, &sipuri); if (pjsua_acc_is_valid(account) && pjsua_acc_is_valid(account_local)) { acc_id = account; if (accountSettings.account.domain != sipuri.domain) { int pos = sipuri.domain.Find(_T(":")); CString domainWithoutPort = RemovePort(sipuri.domain); if (domainWithoutPort.CompareNoCase(_T("localhost"))==0 || IsIP(domainWithoutPort)) { acc_id = account_local; } } } else if (pjsua_acc_is_valid(account)) { acc_id = account; } else if (pjsua_acc_is_valid(account_local)) { acc_id = account_local; } else { return false; } pj_uri = StrToPjStr ( GetSIPURI(number, acc_id == account_local, acc_id == account_local) ); return true; }
MessagesContact* MessagesDlg::AddTab(CString number, CString name, BOOL activate, pjsua_call_info *call_info, BOOL notShowWindow, BOOL ifExists) { MessagesContact* messagesContact; SIPURI sipuri; ParseSIPURI(number, &sipuri); if (!accountSettings.account.domain.IsEmpty() && RemovePort(accountSettings.account.domain) == RemovePort(sipuri.domain) ) { sipuri.domain = accountSettings.account.domain; } number = (sipuri.user.GetLength() ? sipuri.user + _T("@") : _T("")) + sipuri.domain; LONG exists = -1; for (int i=0; i < tab->GetItemCount(); i++) { messagesContact = GetMessageContact(i); CString compareNumber = messagesContact->number; #ifdef _GLOBAL_NUMBER_PREFIX compareNumber = _T(_GLOBAL_NUMBER_PREFIX) + compareNumber; #endif if (messagesContact->number == number || compareNumber == number) { exists=i; if (call_info) { if (messagesContact->callId != -1) { if (messagesContact->callId != call_info->id) { if (call_info->state != PJSIP_INV_STATE_DISCONNECTED) { microsipDlg->PostMessage(MYWM_CALL_ANSWER, (WPARAM)call_info->id, -486); } return NULL; } } else { messagesContact->callId = call_info->id; } } break; } } if (exists==-1) { if (ifExists) { return NULL; } #ifndef _GLOBAL_NO_CONTACTS if (!name.GetLength()) { name = microsipDlg->pageContacts->GetNameByNumber(number); #endif if (!name.GetLength()) { if (!sipuri.name.GetLength()) { name = (sipuri.domain == accountSettings.account.domain ? sipuri.user : number); } else { name = sipuri.name + _T(" (") + (sipuri.domain == accountSettings.account.domain ? sipuri.user : number) + _T(")"); } } #ifndef _GLOBAL_NO_CONTACTS } #endif messagesContact = new MessagesContact(); messagesContact->callId = call_info ? call_info->id : -1; messagesContact->number = number; messagesContact->name = name; TCITEM item; item.mask = TCIF_PARAM | TCIF_TEXT; name.Format(_T(" %s "), name); item.pszText=name.GetBuffer(); item.cchTextMax=0; item.lParam = (LPARAM)messagesContact; exists = tab->InsertItem(tab->GetItemCount(),&item); if (tab->GetCurSel() == exists) { OnChangeTab(call_info); } } else { if (tab->GetCurSel() == exists && call_info) { UpdateCallButton(messagesContact->callId != -1, call_info); } } //if (tab->GetCurSel() != exists && (activate || !IsWindowVisible())) if (tab->GetCurSel() != exists && activate) { long result; OnTcnSelchangingTab(NULL, &result); tab->SetCurSel(exists); OnChangeTab(call_info); } if (!IsWindowVisible()) { if (!notShowWindow) { if (!accountSettings.hidden) { ShowWindow(SW_SHOW); CRichEditCtrl* richEdit = (CRichEditCtrl*)GetDlgItem(IDC_MESSAGE); GotoDlgCtrl(richEdit); } } } return messagesContact; }