// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include "clientcache.h" #include Core::ClientCache::ClientCache(): db("clients"), cache(db.addCache("info")), requested(), specific() { db.open(); } Core::ClientCache::~ClientCache() { db.close(); } void Core::ClientCache::open() { db.open();} void Core::ClientCache::close() { db.close();} bool Core::ClientCache::checkClient(const QString& node, const QString& ver, const QString& hash) { QString id = node + "/" + ver; if (requested.count(id) == 0 && !cache->checkRecord(id)) { Shared::ClientInfo& info = requested.insert(std::make_pair(id, Shared::ClientInfo())).first->second; info.node = node; info.verification = ver; info.hash = hash; emit requestClientInfo(id); return false; } return true; } bool Core::ClientCache::registerClientInfo ( const QString& sourceFullJid, const QString& id, const std::set& identities, const std::set& features) { std::map::iterator itr = requested.find(id); if (itr != requested.end()) { Shared::ClientInfo& info = itr->second; info.identities = identities; info.extensions = features; bool valid = info.valid(); if (valid) { cache->addRecord(id, info); } else { info.specificPresence = sourceFullJid; specific.insert(std::make_pair(sourceFullJid, info)); } requested.erase(id); return valid; } else { return false; } }