This repository was archived by the owner on Nov 25, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAlarmFileManager.cpp
More file actions
96 lines (93 loc) · 2.75 KB
/
AlarmFileManager.cpp
File metadata and controls
96 lines (93 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "AlarmFileManager.h"
#include <QXmlStreamWriter>
#include "AlarmModel.h"
#include "HeAlarm.h"
#include <format>
AlarmFileManager::AlarmFileManager(AlarmModel* model, QObject* parent) :
QObject {parent},
m_model {model}
{
m_file.setFileName(fileName);
m_fileReader.setDevice(&m_file);
m_fileWriter.setDevice(&m_file);
m_fileWriter.setAutoFormatting(true);
read();
connect(m_model, &AlarmModel::dataChanged, this, &AlarmFileManager::write);
connect(m_model, &AlarmModel::rowsInserted, this, &AlarmFileManager::write);
connect(m_model, &AlarmModel::rowsMoved, this, &AlarmFileManager::write);
connect(m_model, &AlarmModel::rowsRemoved, this, &AlarmFileManager::write);
}
void AlarmFileManager::write()
{
if (m_model == nullptr)
{
qWarning() << "Alarm data list not initialized, skipping instead.";
return;
}
m_file.open(QFile::WriteOnly);
m_fileWriter.writeStartDocument();
m_fileWriter.writeStartElement("AlarmData");
m_fileWriter.writeTextElement("FileVersion", std::format("{}", HeAlarm::alarmFileVersion));
for (const auto& alm : m_model->rawData())
{
m_fileWriter.writeStartElement("Alarm");
m_fileWriter.writeAttribute("hour", std::format("{}", alm.hour));
m_fileWriter.writeAttribute("minute", std::format("{}", alm.minute));
m_fileWriter.writeAttribute("isActive", std::format("{}", alm.isActive));
m_fileWriter.writeAttribute("activeDays", std::format("{}", alm.activeDays));
m_fileWriter.writeAttribute("title", alm.title);
m_fileWriter.writeEndElement();
}
m_fileWriter.writeEndElement();
m_fileWriter.writeEndDocument();
m_file.close();
}
void AlarmFileManager::read()
{
if (m_model == nullptr)
{
qWarning() << "Alarm data list not initialized, skipping instead.";
return;
}
m_model->clear();
m_file.open(QFile::ReadOnly);
while (!m_fileReader.atEnd())
{
auto tokenType = m_fileReader.readNext();
switch (tokenType)
{
case QXmlStreamReader::StartElement:
{
auto name = m_fileReader.name();
if (name == u"FileVersion")
{
m_fileReader.readNext();
auto ver = m_fileReader.text().toInt();
if (ver > HeAlarm::alarmFileVersion)
{
qWarning() << "Cannot read a file that has an unsupported version. Try to update your software.";
m_file.close();
return;
}
}
else if (name == u"Alarm")
{
auto almData = AlarmData();
auto attributes = m_fileReader.attributes();
almData.hour = attributes.value("hour").toInt();
almData.minute = attributes.value("minute").toInt();
almData.isActive = attributes.value("isActive") == u"true" ? true : false;
almData.activeDays = attributes.value("activeDays").toInt();
almData.title = attributes.value("title").toString();
m_model->append(almData);
}
break;
}
default:
{
break;
}
}
}
m_file.close();
}