MSNSearch::MSNSearch(MSNClient *client, QWidget *parent) : MSNSearchBase(parent) { m_client = client; connect(this, SIGNAL(setAdd(bool)), topLevelWidget(), SLOT(setAdd(bool))); edtMail->setValidator(new EMailValidator(edtMail)); initCombo(cmbCountry, 0, getCountries(), true, getCountryCodes()); m_btnMail = new GroupRadioButton(i18n("&E-Mail address"), grpMail); m_btnInfo = new GroupRadioButton(i18n("&Hotmail directory"), grpHotmail); connect(m_btnInfo, SIGNAL(toggled(bool)), this, SLOT(radioToggled(bool))); connect(m_btnMail, SIGNAL(toggled(bool)), this, SLOT(radioToggled(bool))); }
void ICQClient::setAIMInfo(ICQUserData *data) { if (getState() != Connected) return; bool bWide = isWide(data->FirstName.ptr) || isWide(data->LastName.ptr) || isWide(data->MiddleName.ptr) || isWide(data->Maiden.ptr) || isWide(data->Nick.ptr) || isWide(data->Zip.ptr) || isWide(data->Address.ptr) || isWide(data->City.ptr); string country; for (const ext_info *e = getCountryCodes(); e->szName; e++){ if (e->nCode == data->Country.value){ country = e->szName; break; } } snac(ICQ_SNACxFAM_LOCATION, ICQ_SNACxLOC_SETxDIRxINFO); string encoding = bWide ? "unicode-2-0" : "us-ascii"; m_socket->writeBuffer.tlv(0x1C, encoding.c_str()); m_socket->writeBuffer.tlv(0x0A, (unsigned short)0x01); encodeString(data->FirstName.ptr, 0x01, bWide); encodeString(data->LastName.ptr, 0x02, bWide); encodeString(data->MiddleName.ptr, 0x03, bWide); encodeString(data->Maiden.ptr, 0x04, bWide); encodeString(country.c_str(), 0x06, bWide); encodeString(data->Address.ptr, 0x07, bWide); encodeString(data->City.ptr, 0x08, bWide); encodeString(data->Nick.ptr, 0x0C, bWide); encodeString(data->Zip.ptr, 0x0D, bWide); encodeString(data->State.ptr, 0x21, bWide); sendPacket(false); ICQUserData *ownerData = &this->data.owner; set_str(&ownerData->FirstName.ptr, data->FirstName.ptr); set_str(&ownerData->LastName.ptr, data->LastName.ptr); set_str(&ownerData->MiddleName.ptr, data->MiddleName.ptr); set_str(&ownerData->Maiden.ptr, data->Maiden.ptr); set_str(&ownerData->Address.ptr, data->Address.ptr); set_str(&ownerData->City.ptr, data->City.ptr); set_str(&ownerData->Nick.ptr, data->Nick.ptr); set_str(&ownerData->Zip.ptr, data->Zip.ptr); set_str(&ownerData->State.ptr, data->State.ptr); ownerData->Country.value = data->Country.value; }
void AIMInfo::fill() { ICQUserData *data = m_data; if (data == NULL) data = &m_client->data.owner; setText(edtScreen, data->Screen.ptr); setText(edtFirst, data->FirstName.ptr); setText(edtLast, data->LastName.ptr); setText(edtMiddle, data->MiddleName.ptr); setText(edtMaiden, data->Maiden.ptr); setText(edtNick, data->Nick.ptr); setText(edtStreet, data->Address.ptr); setText(edtCity, data->City.ptr); setText(edtState, data->State.ptr); setText(edtZip, data->Zip.ptr); initCombo(cmbCountry, (unsigned short)(data->Country.value), getCountries(), true, getCountryCodes()); if (m_data == NULL){ if (edtFirst->text().isEmpty()) edtFirst->setText(getContacts()->owner()->getFirstName()); if (edtLast->text().isEmpty()) edtLast->setText(getContacts()->owner()->getLastName()); } cmbStatus->clear(); unsigned status = STATUS_ONLINE; if (m_data){ unsigned s = m_data->Status.value; if (s == ICQ_STATUS_OFFLINE){ status = STATUS_OFFLINE; }else if (s & ICQ_STATUS_AWAY){ status = STATUS_AWAY; } }else{ status = m_client->getStatus(); } if ((status != STATUS_ONLINE) && (status != STATUS_OFFLINE) && m_data){ edtAutoReply->setText(m_client->toUnicode(m_data->AutoReply.ptr, m_data)); }else{ edtAutoReply->hide(); } int current = 0; const char *text = NULL; for (const CommandDef *cmd = m_client->protocol()->statusList(); cmd->id; cmd++){ if (cmd->flags & COMMAND_CHECK_STATE) continue; if (status == cmd->id){ current = cmbStatus->count(); text = cmd->text; } cmbStatus->insertItem(Pict(cmd->icon), i18n(cmd->text)); } cmbStatus->setCurrentItem(current); disableWidget(cmbStatus); if (status == STATUS_OFFLINE){ lblOnline->setText(i18n("Last online") + ":"); edtOnline->setText(formatDateTime(data->StatusTime.value)); lblNA->hide(); edtNA->hide(); }else{ if (data->OnlineTime.value){ edtOnline->setText(formatDateTime(data->OnlineTime.value)); }else{ lblOnline->hide(); edtOnline->hide(); } if ((status == STATUS_ONLINE) || (text == NULL)){ lblNA->hide(); edtNA->hide(); }else{ lblNA->setText(i18n(text)); edtNA->setText(formatDateTime(data->StatusTime.value)); } } if (data->IP.ptr){ edtExtIP->setText(formatAddr(data->IP, data->Port.value)); }else{ lblExtIP->hide(); edtExtIP->hide(); } if (data->RealIP.ptr && ((data->IP.ptr == NULL) || (get_ip(data->IP) != get_ip(data->RealIP)))){ edtIntIP->setText(formatAddr(data->RealIP, data->Port.value)); }else{ lblIntIP->hide(); edtIntIP->hide(); } if (m_data){ string client_name = m_client->clientName(data); if (client_name.length()){ edtClient->setText(client_name.c_str()); }else{ lblClient->hide(); edtClient->hide(); } }else{ string name = PACKAGE; name += " "; name += VERSION; #ifdef WIN32 name += "/win32"; #endif edtClient->setText(name.c_str()); } if (m_bInit) return; m_bInit = true; m_client->fillEncoding(cmbEncoding, data); }
void ICQClient::snac_location(unsigned short type, unsigned short seq) { Contact *contact = NULL; ICQUserData *data; string screen; switch (type){ case ICQ_SNAXxLOC_RIGHTSxGRANTED: log(L_DEBUG, "Location rights granted"); break; case ICQ_SNACxLOC_ERROR: break; case ICQ_SNACxLOC_LOCATIONxINFO: screen = m_socket->readBuffer.unpackScreen(); if (isOwnData(screen.c_str())){ data = &this->data.owner; }else{ data = findContact(screen.c_str(), NULL, false, contact); } if (data){ string charset = "us-ascii"; m_socket->readBuffer.incReadPos(4); TlvList tlvs(m_socket->readBuffer); Tlv *tlvInfo = tlvs(0x02); if (tlvInfo){ QString info = convert(tlvInfo, tlvs, 0x01); if (info.left(6).upper() == "<HTML>") info = info.mid(6); if (info.right(7).upper() == "</HTML>") info = info.left(info.length() - 7); if (set_str(&data->About.ptr, info.utf8())){ data->ProfileFetch.bValue = true; if (contact){ Event e(EventContactChanged, contact); e.process(); }else{ Event e(EventClientChanged, this); e.process(); } } break; /* Because we won't find tlv(0x03) which is "since online" instead of encoding... */ } Tlv *tlvAway = tlvs(0x04); if (tlvAway){ QString info = convert(tlvAway, tlvs, 0x03); set_str(&data->AutoReply.ptr, info.utf8()); Event e(EventClientChanged, contact); e.process(); } } break; case ICQ_SNACxLOC_DIRxINFO: if (isOwnData(screen.c_str())){ data = &this->data.owner; }else{ data = findInfoRequest(seq, contact); } if (data){ bool bChanged = false; unsigned country = 0; m_socket->readBuffer.incReadPos(4); TlvList tlvs(m_socket->readBuffer); bChanged |= extractInfo(tlvs, 0x01, &data->FirstName.ptr); bChanged |= extractInfo(tlvs, 0x02, &data->LastName.ptr); bChanged |= extractInfo(tlvs, 0x03, &data->MiddleName.ptr); bChanged |= extractInfo(tlvs, 0x04, &data->Maiden.ptr); bChanged |= extractInfo(tlvs, 0x07, &data->State.ptr); bChanged |= extractInfo(tlvs, 0x08, &data->City.ptr); bChanged |= extractInfo(tlvs, 0x0C, &data->Nick.ptr); bChanged |= extractInfo(tlvs, 0x0D, &data->Zip.ptr); bChanged |= extractInfo(tlvs, 0x21, &data->Address.ptr); Tlv *tlvCountry = tlvs(0x06); if (tlvCountry){ const char *code = *tlvCountry; for (const ext_info *c = getCountryCodes(); c->nCode; c++){ QString name(c->szName); if (name.upper() == code){ country = c->nCode; break; } } } if (country != data->Country.value){ data->Country.value = country; bChanged = true; } data->ProfileFetch.bValue = true; if (bChanged){ if (contact){ Event e(EventContactChanged, contact); e.process(); }else{ Event e(EventClientChanged, this); e.process(); } } } break; case ICQ_SNACxLOC_RESPONSExSETxINFO: break; default: log(L_WARN, "Unknown location family type %04X", type); } }