kde-extraapps/kget/transfer-plugins/contentfetch/contentfetch.cpp
2014-11-19 17:18:01 +00:00

116 lines
3.5 KiB
C++

/* This file is part of the KDE project
Copyright (C) 2008 Ningyu Shi <shiningyu@gmail.com>
This program 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 2 of the License, or (at your option) any later version.
*/
#include "contentfetch.h"
#include "core/kget.h"
#include "core/transfergroup.h"
#include "script.h"
#include <kiconloader.h>
#include <klocale.h>
#include <KDebug>
#include <KMessageBox>
#include <KUrl>
#include <kross/core/manager.h>
#include <kross/core/action.h>
#include <QDomElement>
#include <QFile>
#include <QString>
ContentFetch::ContentFetch(TransferGroup* parent, TransferFactory* factory,
Scheduler* scheduler, const KUrl& source,
const KUrl& dest, const QString &scriptFile,
const QDomElement* e)
: Transfer(parent, factory, scheduler, source, dest, e),
m_p_group(parent), m_scriptFile(scriptFile), m_destDir(dest.directory(KUrl::AppendTrailingSlash))
{
m_p_script = new Script(this, source);
connect(m_p_script, SIGNAL(newTransfer(QString,QString)),
this, SLOT(slotAddTransfer(QString,QString)));
connect(m_p_script, SIGNAL(finished()), this, SLOT(slotFinish()));
connect(m_p_script, SIGNAL(aborted(QString)), this, SLOT(slotAbort(QString)));
connect(m_p_script, SIGNAL(percentUpdated(int)), this, SLOT(setPercent(int)));
connect(m_p_script, SIGNAL(textStatusUpdated(QString)), this, SLOT(slotSetTextStatus(QString)));
}
void ContentFetch::deinit()
{
return;
}
void ContentFetch::start()
{
kDebug(5001) << "ContentFetch::start";
setStatus(Job::Running, i18nc("Transfer state: processing script", "Processing script...."), SmallIcon("media-playback-start"));
setTransferChange(Tc_Status, true);
m_p_script->setFile(m_scriptFile);
m_p_script->start();
kDebug(5001) << "ContentFetch::start() finished!";
}
void ContentFetch::stop()
{
if(status() == Stopped)
{
return;
}
kDebug(5001) << "ContentFetch::stop";
// kill -9 the script
m_p_script->terminate();
// delete m_p_script to avoid crash?
setStatus(Job::Stopped, i18nc("transfer state: stopped", "Stopped"), SmallIcon("process-stop"));
setTransferChange(Tc_Status, true);
}
void ContentFetch::slotAddTransfer(const QString &url, const QString &filename)
{
// even if filename is empty it's still ok
kDebug() << "The whole filename is " << m_destDir + filename;
KGet::addTransfer(KUrl(url), m_destDir + filename, m_p_group->name(), true);
}
void ContentFetch::slotFinish()
{
m_percent = 100;
setStatus(Job::Finished, i18nc("Transfer State: Finished", "Finished"), SmallIcon("dialog-ok"));
setTransferChange(Tc_Status|Tc_Percent, true);
//delete m_p_script;
}
void ContentFetch::slotAbort(const QString &error)
{
if (error.isEmpty())
{
setStatus(Job::Aborted, i18nc("Transfer State: Aborted", "Aborted"), SmallIcon("process-stop"));
}
else
{
setStatus(Job::Aborted, error, SmallIcon("process-stop"));
}
setTransferChange(Tc_Status, true);
}
void ContentFetch::slotSetTextStatus(const QString& text)
{
setStatus(Job::Running, text, SmallIcon("media-playback-start"));
setTransferChange(Tc_Status, true);
}
bool ContentFetch::isResumable() const
{
return false;
}
void ContentFetch::setPercent(int percent)
{
m_percent = percent;
setTransferChange( Transfer::Tc_Percent, true );
}