5
5
6
6
#include " chip_db.h"
7
7
#include < cstring>
8
- #include < QFile>
9
8
#include < QDebug>
10
9
#include < QStandardPaths>
11
10
#include < QDir>
@@ -31,8 +30,7 @@ QString ChipDb::findFile()
31
30
return fileName;
32
31
}
33
32
34
- int ChipDb::stringToChipInfo (const QString &file, const QString &s,
35
- ChipInfo &ci)
33
+ int ChipDb::stringToChipInfo (const QString &s, ChipInfo &ci)
36
34
{
37
35
int paramNum;
38
36
QStringList paramsList;
@@ -42,8 +40,8 @@ int ChipDb::stringToChipInfo(const QString &file, const QString &s,
42
40
if (paramNum != CHIP_PARAM_NUM)
43
41
{
44
42
QMessageBox::critical (nullptr , tr (" Error" ),
45
- tr (" Failed to read chip DB entry from %1 . Expected %2 parameters, "
46
- " but read %3" ).arg (file). arg ( CHIP_PARAM_NUM).arg (paramNum));
43
+ tr (" Failed to read chip DB entry. Expected %2 parameters, "
44
+ " but read %3" ).arg (CHIP_PARAM_NUM).arg (paramNum));
47
45
return -1 ;
48
46
}
49
47
@@ -56,14 +54,27 @@ int ChipDb::stringToChipInfo(const QString &file, const QString &s,
56
54
if (!ok)
57
55
{
58
56
QMessageBox::critical (nullptr , tr (" Error" ), tr (" Failed to parse"
59
- " parameter %1 in %2 " ).arg (paramsList[i]). arg (file ));
57
+ " parameter %1" ).arg (paramsList[i]));
60
58
return -1 ;
61
59
}
62
60
}
63
61
64
62
return 0 ;
65
63
}
66
64
65
+ int ChipDb::chipInfoToString (const ChipInfo &ci, QString &s)
66
+ {
67
+ QStringList paramsList;
68
+
69
+ paramsList.append (ci.name );
70
+ for (int i = CHIP_PARAM_NAME + 1 ; i < CHIP_PARAM_NUM; i++)
71
+ paramsList.append (QString (" %1" ).arg (ci.params [i]));
72
+
73
+ s = paramsList.join (' ,' );
74
+
75
+ return 0 ;
76
+ }
77
+
67
78
void ChipDb::readFromCvs (void )
68
79
{
69
80
ChipInfo chipInfo;
@@ -89,46 +100,124 @@ void ChipDb::readFromCvs(void)
89
100
continue ;
90
101
if (*line.data () == ' #' )
91
102
continue ;
92
- if (stringToChipInfo (fileName, line, chipInfo))
93
- return ;
103
+ if (stringToChipInfo (line, chipInfo))
104
+ break ;
94
105
chipInfoVector.append (chipInfo);
95
106
}
107
+ dbFile.close ();
108
+ }
109
+
110
+ int ChipDb::readCommentsFromCsv (QFile &dbFile, QString &comments)
111
+ {
112
+ if (!dbFile.open (QIODevice::ReadOnly | QIODevice::Text))
113
+ {
114
+ QMessageBox::critical (nullptr , tr (" Error" ), tr (" Failed to open chip DB "
115
+ " file: %1, error: %2" ).arg (dbFile.fileName ()).
116
+ arg (dbFile.errorString ()));
117
+ return -1 ;
118
+ }
119
+
120
+ QTextStream in (&dbFile);
121
+ while (!in.atEnd ())
122
+ {
123
+ QString l = in.readLine ();
124
+ if (l.isEmpty ())
125
+ continue ;
126
+ if (*l.data () == ' #' )
127
+ {
128
+ comments.append (l);
129
+ comments.append (' \n ' );
130
+ }
131
+ }
132
+ dbFile.close ();
133
+
134
+ return 0 ;
135
+ }
136
+
137
+ void ChipDb::writeToCvs (void )
138
+ {
139
+ QString line;
140
+ QFile dbFile;
141
+ QString fileName = findFile ();
142
+
143
+ if (fileName.isNull ())
144
+ return ;
145
+
146
+ dbFile.setFileName (fileName);
147
+
148
+ if (readCommentsFromCsv (dbFile, line))
149
+ return ;
150
+
151
+ if (!dbFile.open (QIODevice::WriteOnly | QIODevice::Truncate |
152
+ QIODevice::Text))
153
+ {
154
+ QMessageBox::critical (nullptr , tr (" Error" ), tr (" Failed to open chip DB "
155
+ " file: %1, error: %2" ).arg (fileName).arg (dbFile.errorString ()));
156
+ return ;
157
+ }
158
+
159
+ QTextStream out (&dbFile);
160
+ out << line;
161
+ for (int i = 0 ; i < chipInfoVector.size (); i++)
162
+ {
163
+ chipInfoToString (chipInfoVector[i], line);
164
+ out << line << ' \n ' ;
165
+ }
166
+ dbFile.close ();
96
167
}
97
168
98
169
ChipDb::ChipDb (QObject *parent) : QObject(parent)
99
170
{
100
171
readFromCvs ();
101
172
}
102
173
103
- QStringList * ChipDb::getNames ()
174
+ QStringList ChipDb::getNames ()
104
175
{
105
- QStringList * namesList = new QStringList ;
176
+ QStringList namesList;
106
177
107
178
for (int i = 0 ; i < chipInfoVector.size (); i++)
108
- namesList-> append (chipInfoVector[i].name );
179
+ namesList. append (chipInfoVector[i].name );
109
180
110
181
return namesList;
111
182
}
112
183
113
- ChipInfo *ChipDb::chipInfoGetByName ( const QString &name )
184
+ ChipInfo *ChipDb::chipInfoGetById ( int id )
114
185
{
115
- for (int i = 0 ; i < chipInfoVector.size (); i++)
116
- {
117
- if (!chipInfoVector[i].name .compare (name))
118
- return &chipInfoVector[i];
119
- }
186
+ if (id >= chipInfoVector.size () || id < 0 )
187
+ return nullptr ;
120
188
121
- return nullptr ;
189
+ return &chipInfoVector[id] ;
122
190
}
123
191
124
- uint32_t ChipDb::pageSizeGetByName ( const QString &name )
192
+ uint32_t ChipDb::pageSizeGetById ( int id )
125
193
{
126
- ChipInfo *info = chipInfoGetByName (name );
194
+ ChipInfo *info = chipInfoGetById (id );
127
195
128
196
return info ? info->params [CHIP_PARAM_PAGE_SIZE] : 0 ;
129
197
}
130
198
199
+ void ChipDb::addChip (ChipInfo &chipInfo)
200
+ {
201
+ chipInfoVector.append (chipInfo);
202
+ }
203
+
204
+ void ChipDb::delChip (int index)
205
+ {
206
+ chipInfoVector.remove (index);
207
+ }
208
+
131
209
int ChipDb::size ()
132
210
{
133
211
return chipInfoVector.size ();
134
212
}
213
+
214
+ void ChipDb::commit ()
215
+ {
216
+ writeToCvs ();
217
+ }
218
+
219
+ void ChipDb::reset ()
220
+ {
221
+ chipInfoVector.clear ();
222
+ readFromCvs ();
223
+ }
0 commit comments