1
0
forked from BRT/arc
arc/database/dao/device_dao.cpp
trnsmkot b66f5c2851 Integrate device data management with database access
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.
2025-04-17 22:10:11 +07:00

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;
}