55
66#include " chip_db.h"
77#include < cstring>
8- #include < QFile>
98#include < QDebug>
109#include < QStandardPaths>
1110#include < QDir>
@@ -31,8 +30,7 @@ QString ChipDb::findFile()
3130 return fileName;
3231}
3332
34- int ChipDb::stringToChipInfo (const QString &file, const QString &s,
35- ChipInfo &ci)
33+ int ChipDb::stringToChipInfo (const QString &s, ChipInfo &ci)
3634{
3735 int paramNum;
3836 QStringList paramsList;
@@ -42,8 +40,8 @@ int ChipDb::stringToChipInfo(const QString &file, const QString &s,
4240 if (paramNum != CHIP_PARAM_NUM)
4341 {
4442 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));
4745 return -1 ;
4846 }
4947
@@ -56,14 +54,27 @@ int ChipDb::stringToChipInfo(const QString &file, const QString &s,
5654 if (!ok)
5755 {
5856 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]));
6058 return -1 ;
6159 }
6260 }
6361
6462 return 0 ;
6563}
6664
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+
6778void ChipDb::readFromCvs (void )
6879{
6980 ChipInfo chipInfo;
@@ -89,46 +100,124 @@ void ChipDb::readFromCvs(void)
89100 continue ;
90101 if (*line.data () == ' #' )
91102 continue ;
92- if (stringToChipInfo (fileName, line, chipInfo))
93- return ;
103+ if (stringToChipInfo (line, chipInfo))
104+ break ;
94105 chipInfoVector.append (chipInfo);
95106 }
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 ();
96167}
97168
98169ChipDb::ChipDb (QObject *parent) : QObject(parent)
99170{
100171 readFromCvs ();
101172}
102173
103- QStringList * ChipDb::getNames ()
174+ QStringList ChipDb::getNames ()
104175{
105- QStringList * namesList = new QStringList ;
176+ QStringList namesList;
106177
107178 for (int i = 0 ; i < chipInfoVector.size (); i++)
108- namesList-> append (chipInfoVector[i].name );
179+ namesList. append (chipInfoVector[i].name );
109180
110181 return namesList;
111182}
112183
113- ChipInfo *ChipDb::chipInfoGetByName ( const QString &name )
184+ ChipInfo *ChipDb::chipInfoGetById ( int id )
114185{
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 ;
120188
121- return nullptr ;
189+ return &chipInfoVector[id] ;
122190}
123191
124- uint32_t ChipDb::pageSizeGetByName ( const QString &name )
192+ uint32_t ChipDb::pageSizeGetById ( int id )
125193{
126- ChipInfo *info = chipInfoGetByName (name );
194+ ChipInfo *info = chipInfoGetById (id );
127195
128196 return info ? info->params [CHIP_PARAM_PAGE_SIZE] : 0 ;
129197}
130198
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+
131209int ChipDb::size ()
132210{
133211 return chipInfoVector.size ();
134212}
213+
214+ void ChipDb::commit ()
215+ {
216+ writeToCvs ();
217+ }
218+
219+ void ChipDb::reset ()
220+ {
221+ chipInfoVector.clear ();
222+ readFromCvs ();
223+ }
0 commit comments