From 96e825fb2e77dff3f3e6607815eee5284946f809 Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Thu, 31 Mar 2022 22:39:47 +0200 Subject: [PATCH] Allow more than one media file when importing from the web To import media files from the web, increas the size of the dialog box and allow several URLs separated by newlines. Signed-off-by: Robert C. Helling --- CHANGELOG.md | 2 +- desktop-widgets/divelistview.cpp | 73 +++++++++++++++++-------------- desktop-widgets/divelistview.h | 2 +- desktop-widgets/simplewidgets.cpp | 2 +- desktop-widgets/urldialog.ui | 32 +++++++------- 5 files changed, 59 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ba284890..d62abe272 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ - +- Desktop: Allow more than one media file to be imported from web --- * Always add new entries at the very top of this file above other existing entries and this note. * Use this layout for new entries: `[Area]: [Details about the change] [reference thread / issue]` diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index 39ec20de0..ca7d6ccba 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -905,46 +905,53 @@ void DiveListView::loadWebImages() URLDialog urlDialog(this); if (!urlDialog.exec()) return; - loadImageFromURL(QUrl::fromUserInput(urlDialog.url())); + loadImagesFromURLs(urlDialog.url()); } -void DiveListView::loadImageFromURL(QUrl url) +void DiveListView::loadImagesFromURLs(QString urls) { - if (url.isValid()) { - QEventLoop loop; - QNetworkRequest request(url); - QNetworkReply *reply = manager.get(request); - while (reply->isRunning()) { - loop.processEvents(); - sleep(1); - } - QByteArray imageData = reply->readAll(); + QStringList validUrls; + QStringList urlList = urls.split('\n'); + QStringList::ConstIterator userUrl; + for (userUrl = urlList.constBegin(); userUrl != urlList.constEnd(); ++userUrl) { + QUrl url = QUrl::fromUserInput(*userUrl); + if (url.isValid()) { + QEventLoop loop; + QNetworkRequest request(url); + QNetworkReply *reply = manager.get(request); + while (reply->isRunning()) { + loop.processEvents(); + sleep(1); + } + QByteArray imageData = reply->readAll(); - QImage image = QImage(); - image.loadFromData(imageData); - if (image.isNull()) { - // If this is not an image, maybe it's an html file and Miika can provide some xslr magic to extract images. - // In this case we would call the function recursively on the list of image source urls; - report_error(qPrintable(tr("%1 does not appear to be an image").arg(url.toString()))); - return; - } + QImage image = QImage(); + image.loadFromData(imageData); + if (image.isNull()) { + // If this is not an image, maybe it's an html file and Miika can provide some xslr magic to extract images. + // In this case we would call the function recursively on the list of image source urls; + report_error(qPrintable(tr("%1 does not appear to be an image").arg(url.toString()))); + return; + } - QCryptographicHash hash(QCryptographicHash::Sha1); - hash.addData(url.toString().toUtf8()); - QString path = QStandardPaths::standardLocations(QStandardPaths::CacheLocation).first(); - QDir dir(path); - if (!dir.exists()) - dir.mkpath(path); - QFile imageFile(path.append("/").append(hash.result().toHex())); - if (imageFile.open(QIODevice::WriteOnly)) { - QDataStream stream(&imageFile); - stream.writeRawData(imageData.data(), imageData.length()); - imageFile.waitForBytesWritten(-1); - imageFile.close(); - learnPictureFilename(url.toString(), imageFile.fileName()); - matchImagesToDives(QStringList(url.toString())); + QCryptographicHash hash(QCryptographicHash::Sha1); + hash.addData(url.toString().toUtf8()); + QString path = QStandardPaths::standardLocations(QStandardPaths::CacheLocation).first(); + QDir dir(path); + if (!dir.exists()) + dir.mkpath(path); + QFile imageFile(path.append("/").append(hash.result().toHex())); + if (imageFile.open(QIODevice::WriteOnly)) { + QDataStream stream(&imageFile); + stream.writeRawData(imageData.data(), imageData.length()); + imageFile.waitForBytesWritten(-1); + imageFile.close(); + learnPictureFilename(url.toString(), imageFile.fileName()); + validUrls << url.toString(); + } } } + matchImagesToDives(validUrls); } QString DiveListView::lastUsedImageDir() diff --git a/desktop-widgets/divelistview.h b/desktop-widgets/divelistview.h index 1853dab1d..5680f58de 100644 --- a/desktop-widgets/divelistview.h +++ b/desktop-widgets/divelistview.h @@ -82,7 +82,7 @@ private: int lastImageTimeOffset(); void addToTrip(int delta); void matchImagesToDives(QStringList fileNames); - void loadImageFromURL(QUrl url); + void loadImagesFromURLs(QString urls); bool eventFilter(QObject *, QEvent *) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void contextMenuEvent(QContextMenuEvent *event) override; diff --git a/desktop-widgets/simplewidgets.cpp b/desktop-widgets/simplewidgets.cpp index 44d22c595..4fc89ac21 100644 --- a/desktop-widgets/simplewidgets.cpp +++ b/desktop-widgets/simplewidgets.cpp @@ -279,7 +279,7 @@ URLDialog::URLDialog(QWidget *parent) : QDialog(parent) QString URLDialog::url() const { - return ui.urlField->text(); + return ui.urlField->toPlainText(); } bool isGnome3Session() diff --git a/desktop-widgets/urldialog.ui b/desktop-widgets/urldialog.ui index a136d1a9e..2727ed449 100644 --- a/desktop-widgets/urldialog.ui +++ b/desktop-widgets/urldialog.ui @@ -6,8 +6,8 @@ 0 0 - 397 - 103 + 806 + 320 @@ -16,8 +16,8 @@ - 40 - 60 + 460 + 280 341 32 @@ -29,27 +29,27 @@ QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - 10 - 30 - 371 - 21 - - - 10 10 - 151 + 281 16 - Enter URL for media files + Enter URLs for media files, one URL per line + + + + + + 10 + 30 + 781 + 251 +