Added SQLite database support for managing device information and common data. Implemented DAOs for handling device and common data operations, such as inserting/updating devices and tracking the last scan time. Enhanced `DeviceScreener` to read device info, update database records, and take screenshots.
76 lines
2.5 KiB
C++
76 lines
2.5 KiB
C++
#include "device_dao.h"
|
|
#include <QSqlQuery>
|
|
#include <QSqlError>
|
|
#include <QVariant>
|
|
#include <QDebug>
|
|
#include "../database_manager.h"
|
|
|
|
bool DeviceDAO::upsertDevice(const DeviceInfo& device) {
|
|
QSqlQuery query(DatabaseManager::instance().database());
|
|
|
|
// Проверка: существует ли запись
|
|
query.prepare("SELECT COUNT(*) FROM devices WHERE id = :id");
|
|
query.bindValue(":id", device.id);
|
|
|
|
if (!query.exec() || !query.next()) {
|
|
qWarning() << "Ошибка при проверке существования записи:" << query.lastError().text();
|
|
return false;
|
|
}
|
|
|
|
bool exists = query.value(0).toInt() > 0;
|
|
|
|
if (exists) {
|
|
// Обновление
|
|
query.prepare(R"(
|
|
UPDATE devices SET
|
|
status = :status,
|
|
name = :name,
|
|
android = :android,
|
|
screen_width = :width,
|
|
screen_height = :height,
|
|
battery = :battery,
|
|
updateTime = :updateTime
|
|
WHERE id = :id
|
|
)");
|
|
} else {
|
|
// Вставка
|
|
query.prepare(R"(
|
|
INSERT INTO devices (
|
|
id, status, name, android, screen_width, screen_height, battery, updateTime
|
|
) VALUES (
|
|
:id, :status, :name, :android, :width, :height, :battery, :updateTime
|
|
)
|
|
)");
|
|
}
|
|
|
|
query.bindValue(":id", device.id);
|
|
query.bindValue(":status", device.status);
|
|
query.bindValue(":name", device.name);
|
|
query.bindValue(":android", device.android);
|
|
query.bindValue(":width", device.screenWidth);
|
|
query.bindValue(":height", device.screenHeight);
|
|
query.bindValue(":battery", device.battery);
|
|
query.bindValue(":updateTime", device.updateTime.toString(Qt::ISODate));
|
|
|
|
if (!query.exec()) {
|
|
qWarning() << "Ошибка при вставке/обновлении устройства:" << query.lastError().text();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool DeviceDAO::updateImage(const QString& deviceId, const QByteArray& imageData) {
|
|
QSqlQuery query(DatabaseManager::instance().database());
|
|
query.prepare("UPDATE devices SET image = :image WHERE id = :id");
|
|
query.bindValue(":image", imageData);
|
|
query.bindValue(":id", deviceId);
|
|
|
|
if (!query.exec()) {
|
|
qWarning() << "Ошибка при обновлении изображения:" << query.lastError().text();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|