bool DownloadManager::allowQuit() { if (activeDownloads() >= 1) { int choice = QMessageBox::warning(this, QString(), tr("There are %1 downloads in progress\n" "Do you want to quit anyway?").arg(activeDownloads()), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (choice == QMessageBox::No) { show(); return false; } } return true; }
void DownloadManager::load() { QSettings settings; settings.beginGroup(QLatin1String("downloadmanager")); QSize size = settings.value(QLatin1String("size")).toSize(); if (size.isValid()) resize(size); QByteArray value = settings.value(QLatin1String("removeDownloadsPolicy"), QLatin1String("Never")).toByteArray(); QMetaEnum removePolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("RemovePolicy")); m_removePolicy = removePolicyEnum.keyToValue(value) == -1 ? Never : static_cast<RemovePolicy>(removePolicyEnum.keyToValue(value)); int i = 0; QString key = QString(QLatin1String("download_%1_")).arg(i); while (settings.contains(key + QLatin1String("url"))) { QUrl url = settings.value(key + QLatin1String("url")).toUrl(); QString fileName = settings.value(key + QLatin1String("location")).toString(); bool done = settings.value(key + QLatin1String("done"), true).toBool(); if (!url.isEmpty() && !fileName.isEmpty()) { DownloadItem *item = new DownloadItem(0, this); item->m_output.setFileName(fileName); item->fileNameLabel->setText(QFileInfo(item->m_output.fileName()).fileName()); item->m_url = url; item->stopButton->setVisible(false); item->stopButton->setEnabled(false); item->tryAgainButton->setVisible(!done); item->tryAgainButton->setEnabled(!done); item->progressBar->setVisible(!done); addItem(item); } key = QString(QLatin1String("download_%1_")).arg(++i); } cleanupButton->setEnabled(m_downloads.count() - activeDownloads() > 0); }
void DownloadManager::updateRow() { DownloadItem *item = qobject_cast<DownloadItem*>(sender()); int row = m_downloads.indexOf(item); if (-1 == row) return; if (!m_iconProvider) m_iconProvider = new QFileIconProvider(); QIcon icon = m_iconProvider->icon(item->m_output.fileName()); if (icon.isNull()) icon = style()->standardIcon(QStyle::SP_FileIcon); item->fileIcon->setPixmap(icon.pixmap(48, 48)); downloadsView->setRowHeight(row, item->minimumSizeHint().height()); bool remove = false; #if defined(QTWEBENGINE_PRIVATEBROWSING) QWebEngineSettings *globalSettings = QWebEngineSettings::globalSettings(); if (!item->downloading() && globalSettings->testAttribute(QWebEngineSettings::PrivateBrowsingEnabled)) remove = true; #endif if (item->downloadedSuccessfully() && removePolicy() == DownloadManager::SuccessFullDownload) { remove = true; } if (remove) m_model->removeRow(row); cleanupButton->setEnabled(m_downloads.count() - activeDownloads() > 0); }
void DownloadManager::load() { //m_downloads.clear(); QSettings settings; settings.beginGroup(QLatin1String("downloadmanager")); QSize size = settings.value(QLatin1String("size")).toSize(); if (size.isValid()) resize(size); QByteArray value = settings.value(QLatin1String("removeDownloadsPolicy"), QLatin1String("Never")).toByteArray(); QMetaEnum removePolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("RemovePolicy")); m_removePolicy = removePolicyEnum.keyToValue(value) == -1 ? Never : static_cast<RemovePolicy>(removePolicyEnum.keyToValue(value)); if (!m_iconProvider) m_iconProvider = new QFileIconProvider(); int i = 0; QString key = QString(QLatin1String("download_%1_")).arg(i); while (settings.contains(key + QLatin1String("url"))) { QUrl url = settings.value(key + QLatin1String("url")).toUrl(); QString fileName = settings.value(key + QLatin1String("location")).toString(); bool done = settings.value(key + QLatin1String("done"), true).toBool(); if (!url.isEmpty() && !fileName.isEmpty()) { addItem( url, fileName, done ); } key = QString(QLatin1String("download_%1_")).arg(++i); } cleanupButton->setEnabled(m_downloads.count() - activeDownloads() > 0); }
void DownloadManager::addItem(const QUrl& url, QString filename, bool done) { DownloadItem *item = new DownloadItem(0, false, this); item->m_output.setFileName(filename); item->setOutputTitle(); item->m_url = url; item->stopButton->setVisible(false); item->stopButton->setEnabled(false); item->tryAgainButton->setVisible(!done); item->tryAgainButton->setEnabled(!done); item->progressBar->setVisible(!done); if (QFile::exists(filename)) { QFile f(filename); if (f.open(QIODevice::ReadOnly )) { QFileInfo fi( f ); item->setSizeDate(f.size(), fi.lastModified()); f.close(); } } addItem(item); if (!m_iconProvider) m_iconProvider = new QFileIconProvider(); QIcon icon = m_iconProvider->icon(QDir::toNativeSeparators(item->m_output.fileName())); if (icon.isNull()) icon = style()->standardIcon(QStyle::SP_FileIcon); item->fileIcon->setPixmap(icon.pixmap(48, 48)); cleanupButton->setEnabled(m_downloads.count() - activeDownloads() > 0); }
bool DownloadManager::allowQuit() { if (BrowserApplication::instance()->mainWindows().count() <= 1 && activeDownloads() >= 1) { int choice = QMessageBox::warning(this, QString(), tr("There are %1 downloads in progress\n" "Do you want to quit anyway?").arg(activeDownloads()), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (choice == QMessageBox::No) { show(); return false; } } return true; }
void DownloadManager::updateRow() { DownloadWidget *widget = qobject_cast<DownloadWidget*>(sender()); int row = m_downloads.indexOf(widget); if (-1 == row) return; if (!m_iconProvider) m_iconProvider = new QFileIconProvider(); QIcon icon = m_iconProvider->icon(widget->m_file); if (icon.isNull()) icon = style()->standardIcon(QStyle::SP_FileIcon); widget->fileIcon->setPixmap(icon.pixmap(48, 48)); downloadsView->setRowHeight(row, widget->minimumSizeHint().height()); bool remove = false; if (!widget->downloading() && BrowserApplication::instance()->privateBrowsing()) remove = true; if (widget->downloadedSuccessfully() && removePolicy() == DownloadManager::SuccessFullDownload) { remove = true; } if (remove) m_model->removeRow(row); cleanupButton->setEnabled(m_downloads.count() - activeDownloads() > 0); }
Node Importer::applySceneImports(std::shared_ptr<Platform> platform) { Url sceneUrl = m_scene->url(); Url nextUrlToImport; if (!m_scene->yaml().empty()) { // Load scene from yaml string. addSceneString(sceneUrl, m_scene->yaml()); } else { // Load scene from yaml file. m_sceneQueue.push_back(sceneUrl); } std::atomic_uint activeDownloads(0); std::mutex sceneMutex; std::condition_variable condition; while (true) { { std::unique_lock<std::mutex> lock(sceneMutex); if (m_sceneQueue.empty()) { if (activeDownloads == 0) { break; } condition.wait(lock); } if (!m_sceneQueue.empty()) { nextUrlToImport = m_sceneQueue.back(); m_sceneQueue.pop_back(); } else { continue; } if (m_importedScenes.find(nextUrlToImport) != m_importedScenes.end()) { // This scene URL has already been imported, we're done! continue; } } activeDownloads++; m_scene->startUrlRequest(platform, nextUrlToImport, [&, nextUrlToImport](UrlResponse response) { if (response.error) { LOGE("Unable to retrieve '%s': %s", nextUrlToImport.string().c_str(), response.error); } else { std::unique_lock<std::mutex> lock(sceneMutex); addSceneData(nextUrlToImport, response.content); } activeDownloads--; condition.notify_all(); }); } Node root = Node(); LOGD("Processing scene import Stack:"); std::vector<Url> sceneStack; importScenesRecursive(root, sceneUrl, sceneStack); return root; }