Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ set(HEADERS config.h imagewriter.h networkaccessmanagerfactory.h nan.h drivelist
oslistmodel.h
disk_formatter.h file_operations.h platformquirks.h
iconimageprovider.h
imageadvancedoptions.h

systemmemorymanager.h
urlfmt.h
)
Expand Down Expand Up @@ -426,7 +426,6 @@ if(NOT BUILD_CLI_ONLY)
wizard/OSSelectionStep.qml
wizard/StorageSelectionStep.qml
wizard/HostnameCustomizationStep.qml
wizard/IfAndFeaturesCustomizationStep.qml
wizard/LocaleCustomizationStep.qml
wizard/UserCustomizationStep.qml
wizard/WifiCustomizationStep.qml
Expand Down
5 changes: 2 additions & 3 deletions src/cli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include <QFileInfo>
#include "drivelistmodel.h"
#include "dependencies/drivelist/src/drivelist.hpp"
#include "imageadvancedoptions.h"

/* Message handler to discard qDebug() output if using cli (unless --debug is set) */
static void devnullMsgHandler(QtMsgType, const QMessageLogContext &, const QString &)
Expand Down Expand Up @@ -201,7 +200,7 @@ int Cli::run()
return 1;
}

_imageWriter->setImageCustomization("", "", "", userData, networkConfig, ImageOptions::NoAdvancedOptions);
_imageWriter->setImageCustomization("", "", "", userData, networkConfig);
}
else if (!parser.value("first-run-script").isEmpty())
{
Expand All @@ -223,7 +222,7 @@ int Cli::run()
return 1;
}

_imageWriter->setImageCustomization("", "", firstRunScript, "", "", ImageOptions::UserDefinedFirstRun);
_imageWriter->setImageCustomization("", "", firstRunScript, "", "");
}

_imageWriter->setDst(args[1]);
Expand Down
5 changes: 1 addition & 4 deletions src/downloadthread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@
#include "windows/diskpart_util.h"
#endif

#include "imageadvancedoptions.h"

#ifdef Q_OS_LINUX
#include <sys/ioctl.h>
#include <linux/fs.h>
Expand Down Expand Up @@ -1133,15 +1131,14 @@ qint64 DownloadThread::_sectorsWritten()
return -1;
}

void DownloadThread::setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudInitNetwork, const QByteArray &initFormat, const ImageOptions::AdvancedOptions opts)
void DownloadThread::setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudInitNetwork, const QByteArray &initFormat)
{
_config = config;
_cmdline = cmdline;
_firstrun = firstrun;
_cloudinit = cloudinit;
_cloudinitNetwork = cloudInitNetwork;
_initFormat = initFormat;
_advancedOptions = opts;
}

bool DownloadThread::_customizeImage()
Expand Down
4 changes: 1 addition & 3 deletions src/downloadthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
#include <time.h>
#include <curl/curl.h>
#include "acceleratedcryptographichash.h"
#include "imageadvancedoptions.h"
#include "systemmemorymanager.h"
#include "file_operations.h"

Expand Down Expand Up @@ -111,7 +110,7 @@ class DownloadThread : public QThread
/*
* Enable image customization
*/
void setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudinitNetwork, const QByteArray &initFormat, const ImageOptions::AdvancedOptions opts);
void setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudinitNetwork, const QByteArray &initFormat);

/*
* Thread safe download progress query functions
Expand Down Expand Up @@ -168,7 +167,6 @@ class DownloadThread : public QThread
std::uint64_t _lastFailureOffset;
qint64 _sectorsStart;
QByteArray _url, _useragent, _buf, _filename, _lastError, _expectedHash, _config, _cmdline, _firstrun, _cloudinit, _cloudinitNetwork, _initFormat;
ImageOptions::AdvancedOptions _advancedOptions;
char *_firstBlock;
size_t _firstBlockSize;
static QByteArray _proxy;
Expand Down
1 change: 0 additions & 1 deletion src/hwlistmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,6 @@ void HWListModel::setCurrentIndex(int index) {
const HardwareDevice &device = _hwDevices.at(index);

_imageWriter.setHWFilterList(device.tags, device.isInclusive());
_imageWriter.setHWCapabilitiesList(device.capabilities);
_imageWriter.setSrc({});

_currentIndex = index;
Expand Down
20 changes: 0 additions & 20 deletions src/imageadvancedoptions.h

This file was deleted.

108 changes: 8 additions & 100 deletions src/imagewriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
#include <stdlib.h>
#include <QLocale>
#include <QMetaType>
#include "imageadvancedoptions.h"

#ifdef Q_OS_WIN
#include <windows.h>
Expand All @@ -62,8 +61,6 @@
#include "linux/stpanalyzer.h"
#endif

using namespace ImageOptions;

namespace {
constexpr uint MAX_SUBITEMS_DEPTH = 16;
} // namespace anonymous
Expand Down Expand Up @@ -608,7 +605,7 @@ void ImageWriter::startWrite()

_thread->setVerifyEnabled(_verifyEnabled);
_thread->setUserAgent(QString("Mozilla/5.0 rpi-imager/%1").arg(constantVersion()).toUtf8());
_thread->setImageCustomization(_config, _cmdline, _firstrun, _cloudinit, _cloudinitNetwork, _initFormat, _advancedOptions);
_thread->setImageCustomization(_config, _cmdline, _firstrun, _cloudinit, _cloudinitNetwork, _initFormat);

// Only set up cache operations for remote downloads, not when using cached files as source
if (!_expectedHash.isEmpty() && !QUrl(urlstr).isLocalFile())
Expand Down Expand Up @@ -918,29 +915,6 @@ void ImageWriter::setHWFilterList(const QJsonArray &tags, const bool &inclusive)
_deviceFilterIsInclusive = inclusive;
}

void ImageWriter::setHWCapabilitiesList(const QJsonArray &json) {
// TODO: maybe also clear the sw capabilities as in the UI the OS is unselected when this changes
_hwCapabilities = json;
}

static inline void pushLower(QStringList &dst, const QString &s) {
const QString t = s.trimmed().toLower();
if (!t.isEmpty()) dst.push_back(t);
}

void ImageWriter::setSWCapabilitiesList(const QString &json) {
_swCapabilities = QJsonArray{};
QJsonParseError err{};
const auto doc = QJsonDocument::fromJson(json.toUtf8(), &err);
if (err.error == QJsonParseError::NoError && doc.isArray()) {
_swCapabilities = doc.array();
} else {
// optional CSV fallback ("a,b,c")
for (const auto &p : json.split(',', Qt::SkipEmptyParts))
_swCapabilities.append(p.trimmed().toLower());
}
}

QJsonArray ImageWriter::getHWFilterList() {
return _deviceFilter;
}
Expand All @@ -949,21 +923,6 @@ bool ImageWriter::getHWFilterListInclusive() {
return _deviceFilterIsInclusive;
}

bool ImageWriter::checkHWAndSWCapability(const QString &cap, const QString &differentSWCap) {
return this->checkHWCapability(cap) && this->checkSWCapability(differentSWCap.isEmpty() ? cap : differentSWCap);
}

bool ImageWriter::checkHWCapability(const QString &cap) {
return _hwCapabilities.contains(cap.trimmed().toLower());
}

bool ImageWriter::checkSWCapability(const QString &cap) {
const auto needle = cap.trimmed().toLower();
for (const auto &v : _swCapabilities)
if (v.toString() == needle) return true;
return false;
}

void ImageWriter::handleNetworkRequestFinished(QNetworkReply *data) {
// Defer deletion
data->deleteLater();
Expand Down Expand Up @@ -1775,20 +1734,18 @@ void ImageWriter::setSetting(const QString &key, const QVariant &value)
_settings.sync();
}

void ImageWriter::setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudinitNetwork, const ImageOptions::AdvancedOptions opts)
void ImageWriter::setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudinitNetwork)
{
_config = config;
_cmdline = cmdline;
_firstrun = firstrun;
_cloudinit = cloudinit;
_cloudinitNetwork = cloudinitNetwork;
_advancedOptions = opts;

qDebug() << "Custom config.txt entries:" << config;
qDebug() << "Custom cmdline.txt entries:" << cmdline;
qDebug() << "Custom firstrun.sh:" << firstrun;
qDebug() << "Cloudinit:" << cloudinit;
qDebug() << "Advanced options:" << opts;
}

void ImageWriter::applyCustomizationFromSavedSettings()
Expand All @@ -1798,7 +1755,7 @@ void ImageWriter::applyCustomizationFromSavedSettings()

// If the selected image does not support customization, ensure nothing is staged
if (_initFormat.isEmpty()) {
setImageCustomization(QByteArray(), QByteArray(), QByteArray(), QByteArray(), QByteArray(), NoAdvancedOptions);
setImageCustomization(QByteArray(), QByteArray(), QByteArray(), QByteArray(), QByteArray());
return;
}

Expand Down Expand Up @@ -1997,7 +1954,7 @@ void ImageWriter::_applySystemdCustomizationFromSettings(const QVariantMap &s)
line(QStringLiteral("sed -i 's| systemd.run.*||g' /boot/cmdline.txt"), script);
line(QStringLiteral("exit 0"), script);

setImageCustomization(QByteArray(), cmdlineAppend, script, QByteArray(), QByteArray(), NoAdvancedOptions);
setImageCustomization(QByteArray(), cmdlineAppend, script, QByteArray(), QByteArray());
}

void ImageWriter::_applyCloudInitCustomizationFromSettings(const QVariantMap &s)
Expand Down Expand Up @@ -2044,8 +2001,6 @@ void ImageWriter::_applyCloudInitCustomizationFromSettings(const QVariantMap &s)
const QString sshAuthorizedKeys = s.value("sshAuthorizedKeys").toString().trimmed();

if (sshEnabled) {
push(QStringLiteral("enable_ssh: true"), cloud);

if (!userName.isEmpty()) {
push(QStringLiteral("users:"), cloud);
// Parity: legacy QML used the typed username even when not renaming the user.
Expand Down Expand Up @@ -2081,53 +2036,6 @@ void ImageWriter::_applyCloudInitCustomizationFromSettings(const QVariantMap &s)
}
}

const bool isRpiosCloudInit = checkSWCapability("rpios_cloudinit");
const bool enableI2C = s.value("enableI2C").toBool();
const bool enableSPI = s.value("enableSPI").toBool();
const QString enableSerial = s.value("enableSerial").toString();
const bool armInterfaceEnabled = enableI2C || enableSPI || enableSerial != "Disabled";
const bool isUsbGadgetEnabled = s.value("enableUsbGadget").toBool();

// cc_raspberry_pi config for rpios_cloudinit capable OSs
if (isRpiosCloudInit && (isUsbGadgetEnabled || armInterfaceEnabled)) {
push(QStringLiteral("rpi:"), cloud);

if (isUsbGadgetEnabled) {
push(QStringLiteral(" enable_usb_gadget: true"), cloud);
}

// configure arm interfaces
if (armInterfaceEnabled) {
push(QStringLiteral(" interfaces:"), cloud);

if (enableI2C) {
push(QStringLiteral(" i2c: true"), cloud);
}
if (enableSPI) {
push(QStringLiteral(" spi: true"), cloud);
}
if (enableSerial != "Disabled") {
if (enableSerial == "" || enableSerial == "Default") {
push(QStringLiteral(" serial: true"), cloud);
} else {
push(QStringLiteral(" serial:"), cloud);
if (enableSerial == "Console & Hardware") {
push(QStringLiteral(" console: true"), cloud);
push(QStringLiteral(" hardware: true"), cloud);
} else if (enableSerial == "Console") {
push(QStringLiteral(" console: true"), cloud);
push(QStringLiteral(" hardware: false"), cloud);
} else if (enableSerial == "Hardware") {
push(QStringLiteral(" console: false"), cloud);
push(QStringLiteral(" hardware: true"), cloud);
} else {
qDebug() << "Invalid serial mode: " << enableSerial;
}
}
}
}
}

const QString ssid = s.value("wifiSSID").toString();
const QString cryptedPskFromSettings = s.value("wifiPasswordCrypt").toString();
const bool hidden = s.value("wifiHidden").toBool();
Expand All @@ -2141,8 +2049,8 @@ void ImageWriter::_applyCloudInitCustomizationFromSettings(const QVariantMap &s)
push(QStringLiteral(" version: 2"), netcfg);
push(QStringLiteral(" wifis:"), netcfg);
push(QStringLiteral(" renderer: %1")
.arg(isRpiosCloudInit ? QStringLiteral("NetworkManager")
: QStringLiteral("networkd")),
// TODO: maybe default to QStringLiteral("NetworkManager") for rpios based distros
.arg(QStringLiteral("networkd")),
netcfg);
push(QStringLiteral(" wlan0:"), netcfg);
push(QStringLiteral(" dhcp4: true"), netcfg);
Expand Down Expand Up @@ -2192,7 +2100,7 @@ void ImageWriter::_applyCloudInitCustomizationFromSettings(const QVariantMap &s)
push(QStringLiteral(" - [ bash, -lc, \"install -o ") + effectiveUser + QStringLiteral(" -m 700 -d /home/") + effectiveUser + QStringLiteral("/com.raspberrypi.connect\" ]"), cloud);
}

setImageCustomization(QByteArray(), cmdlineAppend, QByteArray(), cloud, netcfg, NoAdvancedOptions);
setImageCustomization(QByteArray(), cmdlineAppend, QByteArray(), cloud, netcfg);
}

QString ImageWriter::crypt(const QByteArray &password)
Expand Down Expand Up @@ -2587,7 +2495,7 @@ void ImageWriter::_continueStartWriteAfterCacheVerification(bool cacheIsValid)

_thread->setVerifyEnabled(_verifyEnabled);
_thread->setUserAgent(QString("Mozilla/5.0 rpi-imager/%1").arg(constantVersion()).toUtf8());
_thread->setImageCustomization(_config, _cmdline, _firstrun, _cloudinit, _cloudinitNetwork, _initFormat, _advancedOptions);
_thread->setImageCustomization(_config, _cmdline, _firstrun, _cloudinit, _cloudinitNetwork, _initFormat);

// Handle caching setup for downloads using CacheManager
// Only set up caching when we're downloading (not using cached file as source)
Expand Down
21 changes: 2 additions & 19 deletions src/imagewriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
#include "cachemanager.h"
#include "device_info.h"
#include "nativefiledialog.h"
#include "imageadvancedoptions.h"

class QQmlApplicationEngine;
class DownloadThread;
Expand Down Expand Up @@ -144,27 +143,12 @@ class ImageWriter : public QObject
/** Set the HW filter, for a filtered view of the OS list */
Q_INVOKABLE void setHWFilterList(const QJsonArray &tags, const bool &inclusive);

/* Set the capabilities supported by the hardware, for a filtered view of options that require the hardware to have certain capabilities. */
Q_INVOKABLE void setHWCapabilitiesList(const QJsonArray &json);

/* Set the capabilities supported by the hardware, for a filtered view of options that require the software to have certain capabilities. */
Q_INVOKABLE void setSWCapabilitiesList(const QString &json);

/* Get the HW filter list */
Q_INVOKABLE QJsonArray getHWFilterList();

/* Get if the HW filter is in inclusive mode */
Q_INVOKABLE bool getHWFilterListInclusive();

/* Get if both hard and software support a certain feature. If no differentSWCap is provided it will check for cap support in SW and HW lists. */
Q_INVOKABLE bool checkHWAndSWCapability(const QString &cap, const QString &differentSWCap = "");

/* Check if the hardware supports a certain feature. */
Q_INVOKABLE bool checkHWCapability(const QString &cap);

/* Check if the software supports a certain feature. */
Q_INVOKABLE bool checkSWCapability(const QString &cap);

/* Utility function to open OS file dialog */
Q_INVOKABLE void openFileDialog(const QString &title, const QString &filter);

Expand Down Expand Up @@ -220,7 +204,7 @@ class ImageWriter : public QObject

Q_INVOKABLE bool getBoolSetting(const QString &key);
Q_INVOKABLE void setSetting(const QString &key, const QVariant &value);
Q_INVOKABLE void setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudinitNetwork, const ImageOptions::AdvancedOptions opts = {});
Q_INVOKABLE void setImageCustomization(const QByteArray &config, const QByteArray &cmdline, const QByteArray &firstrun, const QByteArray &cloudinit, const QByteArray &cloudinitNetwork);
Q_INVOKABLE void applyCustomizationFromSavedSettings();
Q_INVOKABLE void setSavedCustomizationSettings(const QVariantMap &map);
Q_INVOKABLE QVariantMap getSavedCustomizationSettings();
Expand Down Expand Up @@ -311,15 +295,14 @@ protected slots:
void fillSubLists(QJsonArray &topLevel);
QNetworkAccessManager _networkManager;
QJsonDocument _completeOsList;
QJsonArray _deviceFilter, _hwCapabilities, _swCapabilities;
QJsonArray _deviceFilter;
bool _deviceFilterIsInclusive;
std::shared_ptr<DeviceInfo> _device_info;

protected:
QUrl _src, _repo;
QString _dst, _parentCategory, _osName, _currentLang, _currentLangcode, _currentKeyboard;
QByteArray _expectedHash, _cmdline, _config, _firstrun, _cloudinit, _cloudinitNetwork, _initFormat;
ImageOptions::AdvancedOptions _advancedOptions;
quint64 _downloadLen, _extrLen, _devLen, _dlnow, _verifynow;
DriveListModel _drivelist;
bool _selectedDeviceValid;
Expand Down
Loading