void GaduProtocol::sendStatusToServer() { if (!isConnected() && !isDisconnecting()) return; if (!GaduSession) return; // some services have per-status configuration configureServices(); Status newStatus = status(); int friends = account().privateStatus() ? GG_STATUS_FRIENDS_MASK : 0; int type = GaduProtocolHelper::gaduStatusFromStatus(newStatus); bool hasDescription = !newStatus.description().isEmpty(); setStatusFlags(); m_lastSentStatus = newStatus; auto writableSessionToken = Connection->writableSessionToken(); if (hasDescription) gg_change_status_descr( writableSessionToken.rawSession(), type | friends, newStatus.description().toUtf8().constData()); else gg_change_status(writableSessionToken.rawSession(), type | friends); account().accountContact().setCurrentStatus(status()); }
void GaduRosterService::exportContactList() { if (!m_connection || !m_connection.data()->hasSession()) { putFinished(false); return; } m_synchronizingContacts = contacts(); for (auto &&contact : m_synchronizingContacts) contact.rosterEntry()->setSynchronizingToRemote(); auto contacts = m_gaduListHelper->contactListToByteArray(m_synchronizingContacts); kdebugmf(KDEBUG_NETWORK|KDEBUG_INFO, "\n%s\n", contacts.constData()); auto accountData = GaduAccountData{account()}; auto writableSessionToken = m_connection.data()->writableSessionToken(); auto ret = gg_userlist100_request(writableSessionToken.rawSession(), GG_USERLIST100_PUT, accountData.userlistVersion(), GG_USERLIST100_FORMAT_TYPE_GG70, contacts.constData()); if (-1 == ret) { markSynchronizingAsSynchronized(); putFinished(false); } }
void GaduContactPersonalInfoService::fetchPersonalInfo(Contact contact) { if (!Connection || !Connection.data()->hasSession()) return; Id = contact.id(); gg_pubdir50_t req = gg_pubdir50_new(GG_PUBDIR50_SEARCH); gg_pubdir50_add(req, GG_PUBDIR50_UIN, Id.toUtf8().constData()); auto writableSessionToken = Connection.data()->writableSessionToken(); FetchSeq = gg_pubdir50(writableSessionToken.rawSession(), req); //gg_pubdir50_free(req); }
void GaduSearchService::searchNext() { if (!Connection || !Connection->hasSession()) return; Stopped = false; gg_pubdir50_t req = gg_pubdir50_new(GG_PUBDIR50_SEARCH); if (Query.SearchBuddy.hasContact(account())) gg_pubdir50_add(req, GG_PUBDIR50_UIN, Query.SearchBuddy.id(account()).toUtf8().constData()); if (!Query.SearchBuddy.firstName().isEmpty()) gg_pubdir50_add(req, GG_PUBDIR50_FIRSTNAME, Query.SearchBuddy.firstName().toUtf8().constData()); if (!Query.SearchBuddy.lastName().isEmpty()) gg_pubdir50_add(req, GG_PUBDIR50_LASTNAME, Query.SearchBuddy.lastName().toUtf8().constData()); if (!Query.SearchBuddy.nickName().isEmpty()) gg_pubdir50_add(req, GG_PUBDIR50_NICKNAME, Query.SearchBuddy.nickName().toUtf8().constData()); if (!Query.SearchBuddy.city().isEmpty()) gg_pubdir50_add(req, GG_PUBDIR50_CITY, Query.SearchBuddy.city().toUtf8().constData()); if (!Query.BirthYearFrom.isEmpty()) { QString bufYear = Query.BirthYearFrom + ' ' + Query.BirthYearTo; gg_pubdir50_add(req, GG_PUBDIR50_BIRTHYEAR, bufYear.toUtf8().constData()); } switch (Query.SearchBuddy.gender()) { case GenderMale: gg_pubdir50_add(req, GG_PUBDIR50_GENDER, GG_PUBDIR50_GENDER_MALE); break; case GenderFemale: gg_pubdir50_add(req, GG_PUBDIR50_GENDER, GG_PUBDIR50_GENDER_FEMALE); break; case GenderUnknown: // do nothing break; } if (Query.Active) gg_pubdir50_add(req, GG_PUBDIR50_ACTIVE, GG_PUBDIR50_ACTIVE_TRUE); gg_pubdir50_add(req, GG_PUBDIR50_START, QString::number(From).toUtf8().constData()); auto writableSessionToken = Connection->writableSessionToken(); SearchSeq = gg_pubdir50(writableSessionToken.rawSession(), req); gg_pubdir50_free(req); }
void GaduRosterService::importContactList() { if (!m_connection || !m_connection.data()->hasSession()) { emit getFinished(false); return; } m_synchronizingContacts = contacts(); for (auto &&contact : m_synchronizingContacts) contact.rosterEntry()->setSynchronizingFromRemote(); auto writableSessionToken = m_connection.data()->writableSessionToken(); int ret = gg_userlist100_request(writableSessionToken.rawSession(), GG_USERLIST100_GET, 0, GG_USERLIST100_FORMAT_TYPE_GG70, 0); if (-1 == ret) { markSynchronizingAsSynchronized(); emit getFinished(false); } }
void GaduProtocol::everyMinuteActions() { auto writableSessionToken = Connection->writableSessionToken(); gg_ping(writableSessionToken.rawSession()); }