Agent::Agent() : QObject(NULL, "agent") { kdebugf(); connect(gadu, SIGNAL(userStatusChangeIgnored(UinType)), this, SLOT(userFound(UinType))); // Main menu entry agentActionDescription = new ActionDescription( ActionDescription::TypeMainMenu, "agentAction", this, SLOT(resultsRequest()), "Agent", tr("Who has me on list") ); kadu->insertMenuActionDescription(0, agentActionDescription); if(config_file.readBoolEntry("Agent", "FirstTime", true)) { QFile listFile; listFile.setName(QString(ggPath("spy-unknownslist").ascii())); if(listFile.open(IO_ReadOnly)) { if(MessageBox::ask(tr("Agent has founded spy's unknown-users list. Do you want to append this list to agent module?"))) { QTextStream stream(&listFile); QString uin_str, date_str, line; bool ok; while (!stream.atEnd()) { UnknownUser user; bool isAlready = false; line = stream.readLine(); uin_str = line.section(',', 0, 0); date_str = line.section(',', 1, 1); unsigned int uin_int = uin_str.toUInt(&ok, 10); if(!ok) kdebugm(KDEBUG_PANIC, "Couldn't cast QString to int"); foreach(UnknownUser user, UnknownsList) { if (user.uin == uin_int) { isAlready = true; break; } } if (!isAlready) { user.uin = uin_int; user.date = QDate::fromString(date_str, Qt::ISODate); user.seq = 0; UnknownsList.append(user); } } } listFile.close(); }
void GaduProtocol::socketContactStatusChanged( UinType uin, unsigned int ggStatusId, const QString &description, unsigned int maxImageSize) { auto newStatus = Status{}; newStatus.setType(GaduProtocolHelper::statusTypeFromGaduStatus(ggStatusId)); newStatus.setDescription(description); if (uin == GaduLoginParams.uin) { if ((!m_lastRemoteStatusRequest.isValid() || m_lastRemoteStatusRequest.elapsed() > 10) && newStatus != m_lastSentStatus) { emit remoteStatusChangeRequest(account(), newStatus); if (m_lastRemoteStatusRequest.isValid()) m_lastRemoteStatusRequest.restart(); else m_lastRemoteStatusRequest.start(); } return; } auto contact = contactManager()->byId(account(), QString::number(uin), ActionReturnNull); contact.setMaximumImageSize(maxImageSize); auto oldStatus = contact.currentStatus(); contact.setCurrentStatus(newStatus); contact.setBlocking(GaduProtocolHelper::isBlockingStatus(ggStatusId)); if (contact.isAnonymous()) { if (contact.ownerBuddy()) emit userStatusChangeIgnored(contact.ownerBuddy()); rosterService()->removeContact(contact); return; } // see issue #2159 - we need a way to ignore first status of given contact if (contact.ignoreNextStatusChange()) contact.setIgnoreNextStatusChange(false); else emit contactStatusChanged(contact, oldStatus); }