/* * 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 Shared::ClientId& p_id) { QString id = p_id.getId(); if (requested.count(id) == 0 && !cache->checkRecord(id)) { requested.emplace(id, p_id); 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; } }