void MainWindow::populateDevices() { Q_D(MainWindow); // TODO: This shouldn't be done in the GUI thread QString path(QString::fromStdString(d->pc->dataDirectory()) % QStringLiteral("/devices.json")); QFile file(path); if (file.open(QIODevice::ReadOnly)) { QByteArray contents = file.readAll(); file.close(); MbDeviceJsonError error; Device **devices = mb_device_new_list_from_json(contents.data(), &error); if (devices) { for (Device **iter = devices; *iter; ++iter) { if (mb_device_validate(*iter) == 0) { d->deviceSel->addItem(QStringLiteral("%1 - %2") .arg(QString::fromUtf8(mb_device_id(*iter))) .arg(QString::fromUtf8(mb_device_name(*iter)))); d->devices.emplace_back(*iter, mb_device_free); } else { // Clean up unusable devices mb_device_free(*iter); } } // No need for array anymore free(devices); } else { qWarning("Failed to load devices"); } } else { qWarning("%s: Failed to open file: %s", path.toUtf8().data(), file.errorString().toUtf8().data()); } }
ScopedDevices(const char *json) { devices = mb_device_new_list_from_json(json, &error); }