retro-imager/imagewriter.h
Floris Bos 123542a66b Linux embedded: misc improvements
- Allow static build
- Use .svg icons
- Linux Embedded lacks normal "open file dialog". So simply scan
  files in root folder of USB stick and return list.
- Change QProcess::execute(command) calls to
  QProcess::execute(command, args) calls to silence Qt 5.15.0
  depreciation warning.
2020-06-01 17:45:41 +02:00

129 lines
3.7 KiB
C++

#ifndef IMAGEWRITER_H
#define IMAGEWRITER_H
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright (C) 2020 Raspberry Pi (Trading) Limited
*/
#include <QObject>
#include <QTimer>
#include <QUrl>
#include <QSettings>
#include <QVariant>
#include "config.h"
#include "powersaveblocker.h"
#include "drivelistmodel.h"
class QQmlApplicationEngine;
class DownloadThread;
class QNetworkReply;
class ImageWriter : public QObject
{
Q_OBJECT
public:
explicit ImageWriter(QObject *parent = nullptr);
virtual ~ImageWriter();
void setEngine(QQmlApplicationEngine *engine);
/* Set URL to download from, and if known download length and uncompressed length */
Q_INVOKABLE void setSrc(const QUrl &url, quint64 downloadLen = 0, quint64 extrLen = 0, QByteArray expectedHash = "", bool multifilesinzip = false);
/* Set device to write to */
Q_INVOKABLE void setDst(const QString &device, quint64 deviceSize = 0);
/* Enable/disable verification */
Q_INVOKABLE void setVerifyEnabled(bool verify);
/* Returns true if src and dst are set */
Q_INVOKABLE bool readyToWrite();
/* Start writing */
Q_INVOKABLE void startWrite();
/* Cancel write */
Q_INVOKABLE void cancelWrite();
/* Return true if url is in our local disk cache */
Q_INVOKABLE bool isCached(const QUrl &url, const QByteArray &sha256);
/* Refresh the list of available drives */
Q_INVOKABLE void refreshDriveList();
/* Return list of available drives. Call refreshDriveList() first */
DriveListModel *getDriveList();
/* Utility function to return filename part from URL */
Q_INVOKABLE QString fileNameFromUrl(const QUrl &url);
/* Function to return OS list URL */
Q_INVOKABLE QUrl constantOsListUrl() const;
/* Function to return version */
Q_INVOKABLE QString constantVersion() const;
/* Set custom repository */
Q_INVOKABLE void setCustomOsListUrl(const QUrl &url);
/* Utility function to open OS file dialog */
Q_INVOKABLE void openFileDialog();
/* Return filename part of URL set */
Q_INVOKABLE QString srcFileName();
/* Returns true if online */
Q_INVOKABLE bool isOnline();
/* Returns true if run on embedded Linux platform */
Q_INVOKABLE bool isEmbeddedMode();
/* Mount any USB sticks that can contain source images under /media
Returns true if at least one device was mounted */
Q_INVOKABLE bool mountUsbSourceMedia();
/* Returns a json formatted list of the OS images found on USB stick */
Q_INVOKABLE QByteArray getUsbSourceOSlist();
signals:
/* We are emiting signals with QVariant as parameters because QML likes it that way */
void downloadProgress(QVariant dlnow, QVariant dltotal);
void verifyProgress(QVariant now, QVariant total);
void error(QVariant msg);
void success();
void fileSelected(QVariant filename);
void cancelled();
void finalizing();
void networkOnline();
protected slots:
void pollProgress();
void pollNetwork();
void syncTime();
void onSuccess();
void onError(QString msg);
void onFileSelected(QString filename);
void onCancelled();
void onCacheFileUpdated(QByteArray sha256);
void onFinalizing();
void onTimeSyncReply(QNetworkReply *reply);
protected:
QUrl _src, _repo;
QString _dst, _cacheFileName;
QByteArray _expectedHash, _cachedFileHash;
quint64 _downloadLen, _extrLen, _devLen, _dlnow, _verifynow;
DriveListModel _drivelist;
QQmlApplicationEngine *_engine;
QTimer _polltimer, _networkchecktimer;
PowerSaveBlocker _powersave;
DownloadThread *_thread;
bool _verifyEnabled, _multipleFilesInZip, _cachingEnabled, _embeddedMode, _online;
QSettings _settings;
void _parseCompressedFile();
};
#endif // IMAGEWRITER_H