/* (c) Copyright 2012 - 2018 Anton Sviridenko https://picapica.im 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 "contacts.h" //#include Contacts::Contacts(QString storage, QByteArray user_account_id) : account_id_(user_account_id) { dbconn = QSqlDatabase::database(); dbconn.setDatabaseName(storage); if (!dbconn.open()) { lasterr = dbconn.lastError(); return; } //check if table contacts exists //... QSqlQuery query; query.exec("PRAGMA foreign_keys=ON;"); //check result, if foreign keys support is on } bool Contacts::isOK() { return !lasterr.isValid(); } QString Contacts::GetLastError() { return lasterr.text(); } bool Contacts::Exists(QByteArray id) { QSqlQuery query; query.setForwardOnly(true); query.prepare("select count(*) from contacts where account_id=:account_id and id=:id"); query.bindValue(":account_id", account_id_); query.bindValue(":id", id); query.exec(); lasterr = query.lastError(); query.next(); if (query.value(0).toInt() == 1) return true; return false; } void Contacts::Add(QByteArray id, ContactType type) { QSqlQuery query; if (!Exists(id)) { query.prepare("insert into contacts (id, name, cert_pem, account_id, type) values (:id, NULL, NULL, :account_id, :type)"); query.bindValue(":id", id); query.bindValue(":account_id", account_id_); query.bindValue(":type", type); query.exec(); } else { query.prepare("update contacts set type=:type where id=:id and account_id=:account_id"); query.bindValue(":type", type); query.bindValue(":id", id); query.bindValue(":account_id", account_id_); query.exec(); } lasterr = query.lastError(); } void Contacts::Delete(QByteArray id) { QSqlQuery query; query.prepare("delete from contacts where id=:id and account_id=:account_id"); query.bindValue(":id", id); query.bindValue(":account_id", account_id_); query.exec(); lasterr = query.lastError(); } QList Contacts::GetContacts(ContactType type) { QList L; ContactRecord r; QSqlQuery query; query.setForwardOnly(true); query.prepare("select id, name from contacts where account_id=:account_id and type=:type"); query.bindValue(":account_id", account_id_); query.bindValue(":type", type); query.exec(); lasterr = query.lastError(); if (lasterr.isValid()) return L; while(query.next()) { r.id = query.value(0).toByteArray(); r.name = query.value(1).toString(); //CSTRL.append(" ("+query.value(0).toString()+") "+query.value(1).toString()); L << r; } return L; } QString Contacts::GetContactCert(QByteArray id) { QSqlQuery query; query.prepare("select cert_pem from contacts where id=:id and account_id=:account_id"); query.bindValue(":id", id); query.bindValue(":account_id", account_id_); query.exec(); lasterr = query.lastError(); if (lasterr.isValid()) return QString::null; query.next(); return query.value(0).toString(); } QString Contacts::GetContactName(QByteArray id) { QSqlQuery query; query.prepare("select name from contacts where id=:id and account_id=:account_id"); query.bindValue(":id", id); query.bindValue(":account_id", account_id_); query.exec(); lasterr = query.lastError(); if (lasterr.isValid()) return QString::null; query.next(); return query.value(0).toString(); } void Contacts::SetContactCert(QByteArray id, QString &cert_pem) { QSqlQuery query; query.prepare("update contacts set cert_pem=:cert_pem where id=:id and account_id=:account_id"); query.bindValue(":cert_pem", cert_pem); query.bindValue(":id", id); query.bindValue(":account_id", account_id_); query.exec(); lasterr = query.lastError(); } void Contacts::SetContactName(QByteArray id, QString name) { QSqlQuery query; query.prepare("update contacts set name=:name where id=:id and account_id=:account_id"); query.bindValue(":name", name); query.bindValue(":id", id); query.bindValue(":account_id", account_id_); query.exec(); lasterr = query.lastError(); }