mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-19 18:26:34 +01:00
WIP: New DownloadManager
This commit is contained in:
parent
3f4dd627be
commit
6cc7385611
@ -340,3 +340,139 @@ DownloadItem::~DownloadItem()
|
|||||||
delete ui;
|
delete ui;
|
||||||
delete m_item;
|
delete m_item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DownloadItem2::DownloadItem2(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DownloadItem2::Flags DownloadItem2::flags() const
|
||||||
|
{
|
||||||
|
return m_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
DownloadItem2::State DownloadItem2::state() const
|
||||||
|
{
|
||||||
|
return m_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
DownloadItem2::Error DownloadItem2::error() const
|
||||||
|
{
|
||||||
|
return m_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DownloadItem2::isError() const
|
||||||
|
{
|
||||||
|
return m_state == DownloadError;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DownloadItem2::isPaused() const
|
||||||
|
{
|
||||||
|
return m_state == DownloadPaused;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DownloadItem2::isFinished() const
|
||||||
|
{
|
||||||
|
return m_state == DownloadFinished;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DownloadItem2::isCanceled() const
|
||||||
|
{
|
||||||
|
return m_state == DownloadCanceled;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl DownloadItem2::url() const
|
||||||
|
{
|
||||||
|
return m_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DownloadItem2::path() const
|
||||||
|
{
|
||||||
|
return m_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DownloadItem2::progress() const
|
||||||
|
{
|
||||||
|
if (m_bytesReceived >= 0 && m_bytesTotal > 0) {
|
||||||
|
return (m_bytesReceived / double(m_bytesTotal)) * 100;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 DownloadItem2::bytesReceived() const
|
||||||
|
{
|
||||||
|
return m_bytesReceived;
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 DownloadItem2::bytesTotal() const
|
||||||
|
{
|
||||||
|
return m_bytesTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 DownloadItem2::currentSpeed() const
|
||||||
|
{
|
||||||
|
return m_currentSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::cancel()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::pause()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::resume()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::setFlags(Flags flags)
|
||||||
|
{
|
||||||
|
m_flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::setState(State state)
|
||||||
|
{
|
||||||
|
m_state = state;
|
||||||
|
emit stateChanged(m_state);
|
||||||
|
if (m_state == DownloadFinished) {
|
||||||
|
emit finished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::setError(Error error)
|
||||||
|
{
|
||||||
|
m_error = error;
|
||||||
|
setState(DownloadError);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::setUrl(const QUrl &url)
|
||||||
|
{
|
||||||
|
m_url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::setPath(const QString &path)
|
||||||
|
{
|
||||||
|
m_path = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::updateProgress(qint64 received, qint64 total)
|
||||||
|
{
|
||||||
|
m_currentSpeed = (received - m_bytesReceived) / (m_speedTimer.elapsed() / 1000.0);
|
||||||
|
m_speedTimer.restart();
|
||||||
|
|
||||||
|
m_bytesReceived = received;
|
||||||
|
m_bytesTotal = total;
|
||||||
|
|
||||||
|
emit downloadProgress(m_bytesReceived, m_bytesTotal);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadItem2::resetSpeedTimer()
|
||||||
|
{
|
||||||
|
m_speedTimer.restart();
|
||||||
|
}
|
||||||
|
@ -94,4 +94,80 @@ private:
|
|||||||
qint64 m_total;
|
qint64 m_total;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class FALKON_EXPORT DownloadItem2 : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Flag {
|
||||||
|
CanPause = 1,
|
||||||
|
ActiveDownload = 2, // inactive download = eg. download from history
|
||||||
|
};
|
||||||
|
Q_DECLARE_FLAGS(Flags, Flag)
|
||||||
|
|
||||||
|
enum State {
|
||||||
|
DownloadStarting = 0,
|
||||||
|
DownloadInProgress,
|
||||||
|
DownloadPaused,
|
||||||
|
DownloadFinished,
|
||||||
|
DownloadCanceled,
|
||||||
|
DownloadError
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Error {
|
||||||
|
NoError = 0,
|
||||||
|
UnknownError
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit DownloadItem2(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
Flags flags() const;
|
||||||
|
State state() const;
|
||||||
|
Error error() const;
|
||||||
|
bool isError() const;
|
||||||
|
bool isPaused() const;
|
||||||
|
bool isFinished() const;
|
||||||
|
bool isCanceled() const;
|
||||||
|
|
||||||
|
QUrl url() const;
|
||||||
|
QString path() const;
|
||||||
|
|
||||||
|
int progress() const;
|
||||||
|
qint64 bytesReceived() const;
|
||||||
|
qint64 bytesTotal() const;
|
||||||
|
qint64 currentSpeed() const;
|
||||||
|
|
||||||
|
virtual void cancel();
|
||||||
|
virtual void pause();
|
||||||
|
virtual void resume();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void finished();
|
||||||
|
void stateChanged(State state);
|
||||||
|
void downloadProgress(qint64 received, qint64 total);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void setFlags(Flags flags);
|
||||||
|
void setState(State state);
|
||||||
|
void setError(Error error);
|
||||||
|
void setUrl(const QUrl &url);
|
||||||
|
void setPath(const QString &path);
|
||||||
|
void updateProgress(qint64 received, qint64 total);
|
||||||
|
|
||||||
|
void resetSpeedTimer();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Flags m_flags;
|
||||||
|
State m_state = DownloadStarting;
|
||||||
|
Error m_error = NoError;
|
||||||
|
QUrl m_url;
|
||||||
|
QString m_path;
|
||||||
|
qint64 m_bytesReceived = 0;
|
||||||
|
qint64 m_bytesTotal = 0;
|
||||||
|
qint64 m_currentSpeed = 0;
|
||||||
|
QTime m_speedTimer;
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_OPERATORS_FOR_FLAGS(DownloadItem2::Flags)
|
||||||
|
|
||||||
#endif // DOWNLOADITEM_H
|
#endif // DOWNLOADITEM_H
|
||||||
|
@ -514,3 +514,71 @@ DownloadManager::~DownloadManager()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DownloadManager2::DownloadManager2(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{
|
||||||
|
loadSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DownloadManager2::defaultDownloadPath() const
|
||||||
|
{
|
||||||
|
return m_downloadPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DownloadManager2::lastDownloadPath() const
|
||||||
|
{
|
||||||
|
return m_lastDownloadPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadManager2::setLastDownloadPath(const QString &path)
|
||||||
|
{
|
||||||
|
m_lastDownloadPath = path;
|
||||||
|
Settings().setValue(QSL("DownloadManager/lastDownloadPath"), m_lastDownloadPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadManager2::loadSettings()
|
||||||
|
{
|
||||||
|
Settings settings;
|
||||||
|
settings.beginGroup(QSL("DownloadManager"));
|
||||||
|
m_downloadPath = settings.value(QSL("defaultDownloadPath"), QString()).toString();
|
||||||
|
m_lastDownloadPath = settings.value(QSL("lastDownloadPath"), QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)).toString();
|
||||||
|
|
||||||
|
m_useExternalManager = settings.value(QSL("UseExternalManager"), false).toBool();
|
||||||
|
m_externalExecutable = settings.value(QSL("ExternalManagerExecutable"), QString()).toString();
|
||||||
|
m_externalArguments = settings.value(QSL("ExternalManagerArguments"), QString()).toString();
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
if (!m_externalArguments.contains(QLatin1String("%d"))) {
|
||||||
|
m_externalArguments.append(QLatin1String(" %d"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<DownloadItem2*> DownloadManager2::downloads() const
|
||||||
|
{
|
||||||
|
return m_downloads;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadManager2::addDownload(DownloadItem2 *item)
|
||||||
|
{
|
||||||
|
m_downloads.append(item);
|
||||||
|
emit downloadAdded(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadManager2::removeDownload(DownloadItem2 *item)
|
||||||
|
{
|
||||||
|
if (m_downloads.removeOne(item)) {
|
||||||
|
item->deleteLater();
|
||||||
|
emit downloadRemoved(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadManager2::startExternalManager(const QUrl &url)
|
||||||
|
{
|
||||||
|
QString arguments = m_externalArguments;
|
||||||
|
arguments.replace(QLatin1String("%d"), url.toEncoded());
|
||||||
|
QzTools::startExternalProcess(m_externalExecutable, arguments);
|
||||||
|
}
|
||||||
|
@ -117,4 +117,41 @@ private:
|
|||||||
QPointer<QWinTaskbarButton> m_taskbarButton;
|
QPointer<QWinTaskbarButton> m_taskbarButton;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class DownloadItem2;
|
||||||
|
|
||||||
|
class FALKON_EXPORT DownloadManager2 : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit DownloadManager2(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
QString defaultDownloadPath() const;
|
||||||
|
|
||||||
|
QString lastDownloadPath() const;
|
||||||
|
void setLastDownloadPath(const QString &path);
|
||||||
|
|
||||||
|
void loadSettings();
|
||||||
|
|
||||||
|
QVector<DownloadItem2*> downloads() const;
|
||||||
|
|
||||||
|
void addDownload(DownloadItem2 *item);
|
||||||
|
void removeDownload(DownloadItem2 *item);
|
||||||
|
|
||||||
|
void startExternalManager(const QUrl &url);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void downloadAdded(DownloadItem2 *item);
|
||||||
|
void downloadRemoved(DownloadItem2 *item);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QVector<DownloadItem2*> m_downloads;
|
||||||
|
QString m_downloadPath;
|
||||||
|
QString m_lastDownloadPath;
|
||||||
|
|
||||||
|
bool m_useExternalManager = false;
|
||||||
|
QString m_externalExecutable;
|
||||||
|
QString m_externalArguments;
|
||||||
|
};
|
||||||
|
|
||||||
#endif // DOWNLOADMANAGER_H
|
#endif // DOWNLOADMANAGER_H
|
||||||
|
Loading…
Reference in New Issue
Block a user