svn path=/trunk/kdenlive/; revision=5582
#include <KTar>
#include <KDebug>
#include <KApplication>
#include <KTar>
#include <KDebug>
#include <KApplication>
+#include <kio/directorysizejob.h>
#include <QTreeWidget>
#include <QtConcurrentRun>
#include <QTreeWidget>
#include <QtConcurrentRun>
m_name(projectName.section('.', 0, -2)),
m_doc(doc),
m_abortArchive(false),
m_name(projectName.section('.', 0, -2)),
m_doc(doc),
m_abortArchive(false),
+ m_extractMode(false),
+ m_extractArchive(NULL)
{
setAttribute(Qt::WA_DeleteOnClose);
setupUi(this);
{
setAttribute(Qt::WA_DeleteOnClose);
setupUi(this);
m_extractUrl(url)
{
//setAttribute(Qt::WA_DeleteOnClose);
m_extractUrl(url)
{
//setAttribute(Qt::WA_DeleteOnClose);
- KTar archive(url.path());
- archive.open( QIODevice::ReadOnly );
+ m_extractArchive = new KTar(url.path());
+ m_extractArchive->open( QIODevice::ReadOnly );
// Check that it is a kdenlive project archive
bool isProjectArchive = false;
// Check that it is a kdenlive project archive
bool isProjectArchive = false;
- QStringList files = archive.directory()->entries();
+ QStringList files = m_extractArchive->directory()->entries();
for (int i = 0; i < files.count(); i++) {
if (files.at(i).endsWith(".kdenlive")) {
m_projectName = files.at(i);
for (int i = 0; i < files.count(); i++) {
if (files.at(i).endsWith(".kdenlive")) {
m_projectName = files.at(i);
if (!isProjectArchive) {
KMessageBox::sorry(kapp->activeWindow(), i18n("%1 is not an archived Kdenlive project", url.path(), i18n("Cannot open file")));
if (!isProjectArchive) {
KMessageBox::sorry(kapp->activeWindow(), i18n("%1 is not an archived Kdenlive project", url.path(), i18n("Cannot open file")));
+ m_extractArchive->close();
hide();
//HACK: find a better way to terminate the dialog
QTimer::singleShot(50, this, SLOT(reject()));
hide();
//HACK: find a better way to terminate the dialog
QTimer::singleShot(50, this, SLOT(reject()));
ArchiveWidget::~ArchiveWidget()
{
ArchiveWidget::~ArchiveWidget()
{
+ if (m_extractArchive) delete m_extractArchive;
}
void ArchiveWidget::done ( int r )
}
void ArchiveWidget::done ( int r )
//TODO: abort extracting
return;
}
//TODO: abort extracting
return;
}
+ QFileInfo f(m_extractUrl.path());
+ m_requestedSize = f.size();
KIO::NetAccess::mkdir(archive_url->url().path(KUrl::RemoveTrailingSlash), this);
icon_info->setPixmap(KIcon("system-run").pixmap(16, 16));
text_info->setText(i18n("Extracting..."));
buttonBox->button(QDialogButtonBox::Apply)->setText(i18n("Abort"));
KIO::NetAccess::mkdir(archive_url->url().path(KUrl::RemoveTrailingSlash), this);
icon_info->setPixmap(KIcon("system-run").pixmap(16, 16));
text_info->setText(i18n("Extracting..."));
buttonBox->button(QDialogButtonBox::Apply)->setText(i18n("Abort"));
+ m_progressTimer = new QTimer;
+ m_progressTimer->setInterval(800);
+ m_progressTimer->setSingleShot(false);
+ connect(m_progressTimer, SIGNAL(timeout()), this, SLOT(slotExtractProgress()));
m_archiveThread = QtConcurrent::run(this, &ArchiveWidget::doExtracting);
m_archiveThread = QtConcurrent::run(this, &ArchiveWidget::doExtracting);
+ m_progressTimer->start();
+}
+
+void ArchiveWidget::slotExtractProgress()
+{
+ KIO::DirectorySizeJob *job = KIO::directorySize(archive_url->url());
+ connect(job, SIGNAL(result(KJob*)), this, SLOT(slotGotProgress(KJob*)));
+}
+
+void ArchiveWidget::slotGotProgress(KJob* job)
+{
+ if (!job->error()) {
+ KIO::DirectorySizeJob *j = static_cast <KIO::DirectorySizeJob *>(job);
+ progressBar->setValue((int) 100 * j->totalSize() / m_requestedSize);
+ }
+ job->deleteLater();
}
void ArchiveWidget::doExtracting()
{
}
void ArchiveWidget::doExtracting()
{
- KTar archive(m_extractUrl.path());
- archive.open( QIODevice::ReadOnly );
- archive.directory()->copyTo(archive_url->url().path(KUrl::AddTrailingSlash));
- archive.close();
+ m_extractArchive->directory()->copyTo(archive_url->url().path(KUrl::AddTrailingSlash));
+ m_extractArchive->close();
emit extractingFinished();
}
emit extractingFinished();
}
void ArchiveWidget::slotExtractingFinished()
{
void ArchiveWidget::slotExtractingFinished()
{
+ m_progressTimer->stop();
+ delete m_progressTimer;
// Process project file
QFile file(extractedProjectFile());
bool error = false;
// Process project file
QFile file(extractedProjectFile());
bool error = false;
#include <QLabel>
#include <QDialog>
#include <QList>
#include <QLabel>
#include <QDialog>
#include <QList>
#include <KIO/CopyJob>
#include <KTemporaryFile>
class KJob;
#include <KIO/CopyJob>
#include <KTemporaryFile>
class KJob;
/**
* @class ArchiveWidget
/**
* @class ArchiveWidget
void slotStartExtracting();
void doExtracting();
void slotExtractingFinished();
void slotStartExtracting();
void doExtracting();
void slotExtractingFinished();
+ void slotExtractProgress();
+ void slotGotProgress(KJob*);
protected:
virtual void closeEvent ( QCloseEvent * e );
protected:
virtual void closeEvent ( QCloseEvent * e );
bool m_extractMode;
KUrl m_extractUrl;
QString m_projectName;
bool m_extractMode;
KUrl m_extractUrl;
QString m_projectName;
+ QTimer *m_progressTimer;
+ KTar *m_extractArchive;
/** @brief Generate tree widget subitems from a string list of urls. */
void generateItems(QTreeWidgetItem *parentItem, QStringList items);
/** @brief Generate tree widget subitems from a string list of urls. */
void generateItems(QTreeWidgetItem *parentItem, QStringList items);
void archivingFinished(bool);
void archiveProgress(int);
void extractingFinished();
void archivingFinished(bool);
void archiveProgress(int);
void extractingFinished();