Exemple #1
0
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);
}
Exemple #6
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);
}
Exemple #8
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;
}