From 17d6db93ce144d1804ce984edf6b336916135514 Mon Sep 17 00:00:00 2001 From: Kjell Morgenstern Date: Wed, 11 Aug 2021 19:37:15 +0200 Subject: [PATCH] Added Fritzing Fab links to recent file list in welcome view. --- phoenixresources.qrc | 1 + .../icons/aisler_donut-cloud_logo_icon.png | Bin 0 -> 3944 bytes src/dialogs/fabuploadprogress.cpp | 33 +++++++++++------- src/sketch/welcomeview.cpp | 28 ++++++++++++++- src/sketch/welcomeview.h | 1 + 5 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 resources/images/icons/aisler_donut-cloud_logo_icon.png diff --git a/phoenixresources.qrc b/phoenixresources.qrc index 4abbaaeeb..3893dedda 100644 --- a/phoenixresources.qrc +++ b/phoenixresources.qrc @@ -374,5 +374,6 @@ resources/images/icons/toolbarSaveCodeDisabled_icon.png resources/images/icons/toolbarSaveCodeEnabled_icon.png resources/images/icons/toolbarSaveCodePressed_icon.png + resources/images/icons/aisler_donut-cloud_logo_icon.png diff --git a/resources/images/icons/aisler_donut-cloud_logo_icon.png b/resources/images/icons/aisler_donut-cloud_logo_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa5d79a47cf04ea2173e121bb0db19fb8f29e6f GIT binary patch literal 3944 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 literal 0 HcmV?d00001 diff --git a/src/dialogs/fabuploadprogress.cpp b/src/dialogs/fabuploadprogress.cpp index bfe9ecf45..43cb457a9 100644 --- a/src/dialogs/fabuploadprogress.cpp +++ b/src/dialogs/fabuploadprogress.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include @@ -50,6 +51,12 @@ void FabUploadProgress::init(QNetworkAccessManager *manager, QString filename) void FabUploadProgress::doUpload() { + QSettings settings; + QString upload_url_str = settings.value("aisler/" + mFilepath, "").toString(); + if (!upload_url_str.isEmpty()) { + uploadMultipart(QUrl(upload_url_str), mFilepath); + return; + } QUrl new_url("https://fritzing.org/fab/upload"); QNetworkRequest request(new_url); QNetworkReply *reply = mManager->get(request); @@ -69,20 +76,22 @@ void FabUploadProgress::onRequestUploadFinished() int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if(statusCode == 301 || statusCode==302) { QUrl redirectUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); - qDebug() << redirectUrl.toString(); +// qDebug() << redirectUrl.toString(); QNetworkRequest request(redirectUrl); QNetworkReply *r = mManager->get(request); connect(r, SIGNAL(finished()), this, SLOT(onRequestUploadFinished())); connect(r, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError))); } else { - qDebug() << statusCode << Qt::endl; +// qDebug() << statusCode << Qt::endl; auto d = reply->readAll(); - qDebug() << d << Qt::endl << Qt::flush; +// qDebug() << d << Qt::endl << Qt::flush; auto j = NetworkHelper::string_to_hash(d); - qDebug() << j["upload_url"].toString() << Qt::endl << Qt::flush; +// qDebug() << j["upload_url"].toString() << Qt::endl << Qt::flush; QUrl upload_url(QUrl::fromUserInput(j["upload_url"].toString())); QUrl project_url(j["project_url"].toString()); uploadMultipart(upload_url, mFilepath); + QSettings settings; + settings.setValue("aisler/" + mFilepath, j["upload_url"].toString()); } } else { httpError(reply); @@ -93,14 +102,14 @@ void FabUploadProgress::onRequestUploadFinished() void FabUploadProgress::uploadMultipart(const QUrl &url, const QString &file_path) { - qDebug() << url.toString() << Qt::endl << Qt::flush; +// qDebug() << url.toString() << Qt::endl << Qt::flush; QHttpMultiPart *httpMultiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QFile *file = new QFile(file_path); QHttpPart imagePart; imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"upload[file]\"; filename=\"" + QFileInfo(*file).fileName() + "\"")); imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream")); - qDebug() << httpMultiPart->boundary(); +// qDebug() << httpMultiPart->boundary(); file->open(QIODevice::ReadOnly); imagePart.setBodyDevice(file); @@ -117,7 +126,7 @@ void FabUploadProgress::uploadMultipart(const QUrl &url, const QString &file_pat connect(reply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT (uploadProgress(qint64, qint64))); auto r = reply->request(); - qDebug() << NetworkHelper::debugRequest(r); +// qDebug() << NetworkHelper::debugRequest(r); } void FabUploadProgress::uploadProgress(qint64 bytesSent, qint64 bytesTotal) { @@ -159,9 +168,9 @@ void FabUploadProgress::uploadDone() { qDebug() << "----------Finished--------------" << Qt::endl; if (reply->error() == QNetworkReply::NoError) { auto d = reply->readAll(); - qDebug() << d << Qt::endl << Qt::flush; +// qDebug() << d << Qt::endl << Qt::flush; auto j = NetworkHelper::string_to_hash(d); - qDebug() << j["upload_url"].toString() << Qt::endl << Qt::flush; +// qDebug() << j["upload_url"].toString() << Qt::endl << Qt::flush; QUrl callback_url(QUrl::fromUserInput(j["callback"].toString())); mRedirect_url = j["redirect"].toString(); mActivity = 0; @@ -174,7 +183,7 @@ void FabUploadProgress::uploadDone() { void FabUploadProgress::checkProcessingStatus(QUrl url) { - qDebug() << url.toString() << Qt::endl << Qt::flush; +// qDebug() << url.toString() << Qt::endl << Qt::flush; QNetworkRequest request(url); QNetworkReply *reply = mManager->get(request); connect(reply, SIGNAL(finished()), this, SLOT(updateProcessingStatus())); @@ -187,13 +196,13 @@ void FabUploadProgress::updateProcessingStatus() if (reply->error() == QNetworkReply::NoError) { auto d = reply->readAll(); - qDebug() << d << Qt::endl << Qt::flush; +// qDebug() << d << Qt::endl << Qt::flush; auto j = NetworkHelper::string_to_hash(d); // Produce a funny number which is growing most of the time, // and somewhat related to what is really happening. It should // change on every signal, so if it stops, there is a problem. int progress = j["progress"].toInt(); - qDebug() << progress; +// qDebug() << progress; QString message(j["message"].toString()); if (progress < 0) { apiError(message); diff --git a/src/sketch/welcomeview.cpp b/src/sketch/welcomeview.cpp index 90c4c0604..f388d0294 100644 --- a/src/sketch/welcomeview.cpp +++ b/src/sketch/welcomeview.cpp @@ -377,12 +377,22 @@ QWidget * WelcomeView::initRecent() { frameLayout->addWidget(titleFrame); m_recentListWidget = new QListWidget(); + m_recentLinksListWidget = new QListWidget(); m_recentListWidget->setObjectName("recentList"); + m_recentLinksListWidget->setObjectName("recentList"); m_recentListWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + m_recentLinksListWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(m_recentListWidget, SIGNAL(itemClicked (QListWidgetItem *)), this, SLOT(recentItemClicked(QListWidgetItem *))); + connect(m_recentLinksListWidget, SIGNAL(itemClicked (QListWidgetItem *)), this, SLOT(blogItemClicked(QListWidgetItem *))); - frameLayout->addWidget(m_recentListWidget); + QFrame * listsFrame = new QFrame; + QHBoxLayout * listsFrameLayout = new QHBoxLayout; + zeroMargin(listsFrameLayout); + listsFrameLayout->addWidget(m_recentListWidget); + listsFrameLayout->addWidget(m_recentLinksListWidget); + listsFrame ->setLayout(listsFrameLayout); + frameLayout->addWidget(listsFrame); QStringList names; names << "recentSpace" << "recentNewSketch" << "recentOpenSketch"; @@ -653,23 +663,39 @@ void WelcomeView::showEvent(QShowEvent * event) { void WelcomeView::updateRecent() { if (!m_recentListWidget) return; + if (!m_recentLinksListWidget) return; QSettings settings; auto files = settings.value("recentFileList").toStringList(); m_recentListWidget->clear(); + m_recentLinksListWidget->clear(); auto gotOne = false; QIcon icon(":/resources/images/icons/WS-fzz-icon.png"); + QIcon icon2(":/resources/images/icons/aisler_donut-cloud_logo_icon.png"); + for (int i = 0; i < files.size(); ++i) { QFileInfo finfo(files[i]); if (!finfo.exists()) continue; gotOne = true; auto item = new QListWidgetItem(icon, finfo.fileName()); + QListWidgetItem * itemLinks = nullptr; item->setData(Qt::UserRole, finfo.absoluteFilePath()); item->setToolTip(finfo.absoluteFilePath()); + QString link = settings.value("aisler/" + finfo.absoluteFilePath(), "").toString(); + if (!link.isEmpty()) { + int pos = link.lastIndexOf(QChar('/')); + link = link.left(pos); + itemLinks = new QListWidgetItem(icon2, "Fritzing Fab"); + itemLinks->setData(RefRole, link); + itemLinks->setToolTip(link); + } else { + itemLinks = new QListWidgetItem(QString("")); + } m_recentListWidget->addItem(item); + m_recentLinksListWidget->addItem(itemLinks); } if (!gotOne) { diff --git a/src/sketch/welcomeview.h b/src/sketch/welcomeview.h index 4062b2819..2c52e341d 100644 --- a/src/sketch/welcomeview.h +++ b/src/sketch/welcomeview.h @@ -153,6 +153,7 @@ protected slots: QWidget * m_projectsUberFrame = nullptr; QLabel * m_tip = nullptr; QListWidget * m_recentListWidget = nullptr; + QListWidget * m_recentLinksListWidget = nullptr; QWidget * m_fabUberFrame = nullptr; QWidget * m_shopUberFrame = nullptr; QLabel * m_projectsLabel = nullptr;