Skip to content

Commit

Permalink
Lisp upload and read can be cancelled now
Browse files Browse the repository at this point in the history
  • Loading branch information
vedderb committed Sep 27, 2024
1 parent 9eafe88 commit a7480fe
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 6 deletions.
20 changes: 18 additions & 2 deletions codeloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
CodeLoader::CodeLoader(QObject *parent) : QObject(parent)
{
mVesc = nullptr;
mAbortDownloadUpload = false;
reloadPackageArchive();
}

Expand Down Expand Up @@ -345,7 +346,8 @@ bool CodeLoader::lispUpload(VByteArray vb)
auto sizeTotal = data.size();
quint32 offset = 0;
bool ok = true;
while (data.size() > 0) {
mAbortDownloadUpload = false;
while (data.size() > 0 && !mAbortDownloadUpload) {
const int chunkSize = 384;
int sz = data.size() > chunkSize ? chunkSize : data.size();

Expand All @@ -361,6 +363,10 @@ bool CodeLoader::lispUpload(VByteArray vb)
data.remove(0, sz);
}

if (mAbortDownloadUpload) {
ok = false;
}

emit lispUploadProgress(sizeTotal, sizeTotal);

return ok;
Expand Down Expand Up @@ -458,9 +464,10 @@ QString CodeLoader::lispRead(QWidget *parent, QString &lispPath)
};

QString res = "";
mAbortDownloadUpload = false;

if (getLispChunk(10, 0, 5, 1500)) {
while (lispData.size() < lenLispLast) {
while (lispData.size() < lenLispLast && !mAbortDownloadUpload) {
int dataLeft = lenLispLast - lispData.size();
if (!getLispChunk(dataLeft > 400 ? 400 : dataLeft, lispData.size(), 5, 1500)) {
break;
Expand All @@ -469,6 +476,10 @@ QString CodeLoader::lispRead(QWidget *parent, QString &lispPath)
emit lispUploadProgress(lispData.size(), lenLispLast);
}

if (mAbortDownloadUpload) {
return res;
}

if (lispData.size() == lenLispLast) {
auto unpacked = lispUnpackImports(lispData);

Expand Down Expand Up @@ -948,6 +959,11 @@ bool CodeLoader::downloadPackageArchive()
return res;
}

void CodeLoader::abortDownloadUpload()
{
mAbortDownloadUpload = true;
}

bool CodeLoader::getImportFromLine(QString line, QString &path, QString &tag, bool &isInvalid)
{
bool res = false;
Expand Down
3 changes: 3 additions & 0 deletions codeloader.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,15 @@ class CodeLoader : public QObject
Q_INVOKABLE QVariantList reloadPackageArchive();
Q_INVOKABLE bool downloadPackageArchive();

Q_INVOKABLE void abortDownloadUpload();

signals:
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void lispUploadProgress(qint64 bytes, qint64 bytesTotal);

private:
VescInterface *mVesc;
bool mAbortDownloadUpload;
bool getImportFromLine(QString line, QString &path, QString &tag, bool &isInvalid);

};
Expand Down
16 changes: 12 additions & 4 deletions pages/pagelisp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,7 @@ void PageLisp::on_stopButton_clicked()

void PageLisp::on_uploadButton_clicked()
{
QProgressDialog dialog(tr("Erasing..."), QString(), 0, 0, this);
QProgressDialog dialog(tr("Erasing..."), tr("Cancel"), 0, 0, this);
dialog.setWindowModality(Qt::WindowModal);
dialog.show();

Expand Down Expand Up @@ -658,10 +658,14 @@ void PageLisp::on_uploadButton_clicked()

QTimer closeStopTimer;
closeStopTimer.start(100);
auto conn1 = connect(&closeStopTimer, &QTimer::timeout, [&dialog]() {
auto conn1 = connect(&closeStopTimer, &QTimer::timeout, [&dialog, this]() {
if (!dialog.isVisible() && dialog.value() > 0) {
dialog.show();
}

if (dialog.wasCanceled()) {
mLoader.abortDownloadUpload();
}
});

if (!eraseCode(vb.size() + 100)) {
Expand All @@ -687,16 +691,20 @@ void PageLisp::on_uploadButton_clicked()

void PageLisp::on_readExistingButton_clicked()
{
QProgressDialog dialog(tr("Reading Code..."), QString(), 0, 0, this);
QProgressDialog dialog(tr("Reading Code..."), tr("Cancel"), 0, 0, this);
dialog.setWindowModality(Qt::WindowModal);
dialog.show();

QTimer closeStopTimer;
closeStopTimer.start(100);
auto conn1 = connect(&closeStopTimer, &QTimer::timeout, [&dialog]() {
auto conn1 = connect(&closeStopTimer, &QTimer::timeout, [&dialog, this]() {
if (!dialog.isVisible() && dialog.value() > 0) {
dialog.show();
}

if (dialog.wasCanceled()) {
mLoader.abortDownloadUpload();
}
});

auto conn2 = connect(&mLoader, &CodeLoader::lispUploadProgress, [&dialog](qint64 bytes, qint64 bytesTotal) {
Expand Down

0 comments on commit a7480fe

Please sign in to comment.