X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fdownloadmanager.cpp;h=4ea5d8c7b0a0f789eb137dd738286f1bdac46c7c;hb=HEAD;hp=ee597d899f3ba46ed44f510d17081edaf6a0590e;hpb=42994a9540d8eeee1eebf4513a92f942f7040f10;p=minitube diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp index ee597d8..4ea5d8c 100644 --- a/src/downloadmanager.cpp +++ b/src/downloadmanager.cpp @@ -1,9 +1,37 @@ +/* $BEGIN_LICENSE + +This file is part of Minitube. +Copyright 2009, Flavio Tordini + +Minitube is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Minitube is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Minitube. If not, see . + +$END_LICENSE */ + #include "downloadmanager.h" #include "downloaditem.h" #include "downloadmodel.h" #include "video.h" #include "constants.h" -#include "MainWindow.h" +#include "mainwindow.h" +#ifdef APP_ACTIVATION +#include "activation.h" +#endif +#ifdef APP_EXTRA +#include "extra.h" +#endif +#include "datautils.h" +#include "iconutils.h" static DownloadManager *downloadManagerInstance = 0; @@ -25,15 +53,15 @@ void DownloadManager::clear() { int DownloadManager::activeItems() { int num = 0; - foreach (DownloadItem *item, items) { + for (DownloadItem *item : items) { if (item->status() == Downloading || item->status() == Starting) num++; } return num; } DownloadItem* DownloadManager::itemForVideo(Video* video) { - foreach (DownloadItem *item, items) { - if (item->getVideo()->id() == video->id()) return item; + for (DownloadItem *item : items) { + if (item->getVideo()->getId() == video->getId()) return item; } return 0; } @@ -41,38 +69,13 @@ DownloadItem* DownloadManager::itemForVideo(Video* video) { void DownloadManager::addItem(Video *video) { // qDebug() << __FUNCTION__ << video->title(); -#ifdef APP_DEMO - if (video->duration() >= 60*4) { - QMessageBox msgBox(MainWindow::instance()); - msgBox.setIconPixmap(QPixmap(":/images/app.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation)); - msgBox.setText(tr("This is just the demo version of %1.").arg(Constants::NAME)); - msgBox.setInformativeText( - tr("It can only download videos shorter than %1 minutes so you can test the download functionality.") - .arg(4)); - msgBox.setModal(true); - // make it a "sheet" on the Mac - msgBox.setWindowModality(Qt::WindowModal); - - msgBox.addButton(tr("Continue"), QMessageBox::RejectRole); - QPushButton *buyButton = msgBox.addButton(tr("Get the full version"), QMessageBox::ActionRole); - - msgBox.exec(); - - if (msgBox.clickedButton() == buyButton) { - QDesktopServices::openUrl(QUrl(QString(Constants::WEBSITE) + "#download")); - } - - return; - } -#endif - DownloadItem *item = itemForVideo(video); if (item != 0) { if (item->status() == Failed || item->status() == Idle) { - qDebug() << "Restarting download" << video->title(); + qDebug() << "Restarting download" << video->getTitle(); item->tryAgain(); } else { - qDebug() << "Already downloading video" << video->title(); + qDebug() << "Already downloading video" << video->getTitle(); } return; } @@ -95,24 +98,10 @@ void DownloadManager::gotStreamUrl(QUrl url) { video->disconnect(this); - QString path = currentDownloadFolder(); - - // TODO ensure all chars are filename compatible - QString basename = video->title(); - basename.replace('(', '['); - basename.replace(')', ']'); - basename.replace('/', ' '); - basename.replace('\\', ' '); - basename.replace('<', ' '); - basename.replace('>', ' '); - basename.replace(':', ' '); - basename.replace('"', ' '); - basename.replace('|', ' '); - basename.replace('?', ' '); - basename.replace('*', ' '); - basename = basename.simplified(); - - QString filename = path + "/" + basename + ".mp4"; + QString basename = DataUtils::stringToFilename(video->getTitle()); + if (basename.isEmpty()) basename = video->getId(); + + QString filename = currentDownloadFolder() + "/" + basename + ".mp4"; Video *videoCopy = video->clone(); DownloadItem *item = new DownloadItem(videoCopy, url, filename, this); @@ -130,40 +119,39 @@ void DownloadManager::gotStreamUrl(QUrl url) { void DownloadManager::itemFinished() { if (activeItems() == 0) emit finished(); -#ifdef Q_WS_MAC - if (mac::canNotify()) { - DownloadItem *item = static_cast(sender()); - if (!item) { - qDebug() << "Cannot get item in" << __FUNCTION__; - return; - } - Video *video = item->getVideo(); - if (!video) return; - QString stats = tr("%1 downloaded in %2").arg( - DownloadItem::formattedFilesize(item->bytesTotal()), - DownloadItem::formattedTime(item->totalTime(), false)); - mac::notify(tr("Download finished"), video->title(), stats); +#ifdef APP_EXTRA + DownloadItem *item = static_cast(sender()); + if (!item) { + qDebug() << "Cannot get item in" << __FUNCTION__; + return; } + Video *video = item->getVideo(); + if (!video) return; + QString stats = tr("%1 downloaded in %2").arg( + DownloadItem::formattedFilesize(item->bytesTotal()), + DownloadItem::formattedTime(item->totalTime(), false)); + Extra::notify(tr("Download finished"), video->getTitle(), stats); #endif } void DownloadManager::updateStatusMessage() { - QString message = tr("%n Download(s)", "", items.size()); + QString message = tr("%n Download(s)", "", activeItems()); emit statusMessageChanged(message); } QString DownloadManager::defaultDownloadFolder() { // download in the Movies system folder - QString path = QDesktopServices::storageLocation(QDesktopServices::MoviesLocation); - QDir moviesDir(path); + QString path = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); + + const QDir moviesDir(path); if (!moviesDir.exists()) { // fallback to Desktop - path = QDesktopServices::storageLocation(QDesktopServices::DesktopLocation); + path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); - QDir desktopDir(path); + const QDir desktopDir(path); if (!desktopDir.exists()) { // fallback to Home - path = QDesktopServices::storageLocation(QDesktopServices::HomeLocation); + path = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); } } return path;