MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / openAndLoad

Method openAndLoad

app/src/Sessions/PlayerLoaderWorker.cpp:158–242  ·  view source on GitHub ↗

* @brief Opens the file, fetches column order + project JSON + timestamp index, ships it back. */

Source from the content-addressed store, hash-verified

156 * @brief Opens the file, fetches column order + project JSON + timestamp index, ships it back.
157 */
158void Sessions::PlayerLoaderWorker::openAndLoad(const QString& filePath, int sessionId)
159{
160 m_cancelRequested.store(false, std::memory_order_release);
161
162 auto payload = std::make_shared<PlayerSessionPayload>();
163 payload->ok = false;
164 payload->filePath = filePath;
165 payload->sessionId = sessionId;
166
167 if (filePath.isEmpty()) {
168 payload->error = tr("Empty file path");
169 Q_EMIT loaded(payload);
170 return;
171 }
172
173 const QString connName =
174 QStringLiteral("ss_player_loader_%1").arg(QDateTime::currentMSecsSinceEpoch());
175
176 auto closeAndEmit = [&](QSqlDatabase& db) {
177 if (db.isOpen())
178 db.close();
179
180 db = QSqlDatabase();
181 QSqlDatabase::removeDatabase(connName);
182 Q_EMIT loaded(payload);
183 };
184
185 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connName);
186 db.setDatabaseName(filePath);
187
188 if (!db.open()) {
189 payload->error = db.lastError().text();
190 closeAndEmit(db);
191 return;
192 }
193
194 QSqlQuery pragma(db);
195 pragma.exec("PRAGMA journal_mode=WAL");
196 pragma.exec("PRAGMA busy_timeout=5000");
197
198 if (!resolveSessionId(db, sessionId, payload->error)) {
199 closeAndEmit(db);
200 return;
201 }
202 payload->sessionId = sessionId;
203
204 if (m_cancelRequested.load(std::memory_order_acquire)) {
205 payload->error = tr("Cancelled");
206 closeAndEmit(db);
207 return;
208 }
209
210 loadProjectJson(db, sessionId, *payload);
211
212 if (!loadColumnOrder(db, sessionId, *payload, payload->error)) {
213 closeAndEmit(db);
214 return;
215 }

Callers

nothing calls this directly

Calls 10

isEmptyMethod · 0.80
execMethod · 0.80
emptyMethod · 0.80
QSqlDatabaseClass · 0.70
isOpenMethod · 0.45
closeMethod · 0.45
openMethod · 0.45
textMethod · 0.45
lastErrorMethod · 0.45
loadMethod · 0.45

Tested by

no test coverage detected