From 2504f50f0abcbdb5fb92f97d29a21bab19dfebd2 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Tue, 9 Dec 2008 21:23:26 +0000 Subject: [PATCH] Display some more info on rendering progress (remaining time, ...) svn path=/branches/KDE4/; revision=2771 --- renderer/renderjob.cpp | 75 ++++++++++++++++++------------------------ renderer/renderjob.h | 2 ++ 2 files changed, 34 insertions(+), 43 deletions(-) diff --git a/renderer/renderjob.cpp b/renderer/renderjob.cpp index 9a4a228e..8215389b 100644 --- a/renderer/renderjob.cpp +++ b/renderer/renderjob.cpp @@ -19,7 +19,6 @@ #include #include -#include #include #include "renderjob.h" @@ -61,7 +60,7 @@ RenderJob::~RenderJob() { void RenderJob::slotAbort() { qDebug() << "Kdenlive-render: JOB ABORTED BY USER..."; m_renderProcess->kill(); - if (m_jobUiserver) QDBusReply reply = m_jobUiserver->call("terminate", ""); + if (m_jobUiserver) m_jobUiserver->call("terminate", QString()); if (m_erase) { QFile f(m_scenelist); f.remove(); @@ -77,7 +76,10 @@ void RenderJob::receivedStderr() { int pro = result.toInt(); if (pro > m_progress) { m_progress = pro; - if (m_jobUiserver) QDBusReply reply = m_jobUiserver->call("setPercent", (uint) m_progress); + m_jobUiserver->call("setPercent", (uint) m_progress); + int seconds = m_startTime.secsTo(QTime::currentTime()); + seconds = seconds * (100 - m_progress) / m_progress; + m_jobUiserver->call("setDescriptionField", (uint) 1, tr("Remaining time"), QTime(0, 0, seconds).toString("hh:mm:ss")); } } @@ -104,8 +106,14 @@ void RenderJob::start() { QDBusReply objectPath = kuiserver.call("requestView", "kdenlive", "kdenlive", 1); QString reply = ((QDBusObjectPath) objectPath).path(); m_jobUiserver = new QDBusInterface("org.kde.JobViewServer", reply, "org.kde.JobView"); - QDBusConnection::sessionBus().connect("org.kde.JobViewServer", reply, "org.kde.JobView", "cancelRequested", this, SLOT(slotAbort())); - connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr())); + if (m_jobUiserver) { + m_startTime = QTime::currentTime(); + m_jobUiserver->call("setPercent", (uint) 0); + QDBusReply reply = m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(QFileInfo(m_dest).fileName())); + m_jobUiserver->call("setDescriptionField", (uint) 0, tr("Rendering to"), m_dest); + QDBusConnection::sessionBus().connect("org.kde.JobViewServer", reply, "org.kde.JobView", "cancelRequested", this, SLOT(slotAbort())); + connect(m_renderProcess, SIGNAL(readyReadStandardError()), this, SLOT(receivedStderr())); + } } } m_renderProcess->start(m_prog, m_args); @@ -113,7 +121,7 @@ void RenderJob::start() { void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { - if (m_jobUiserver) QDBusReply reply = m_jobUiserver->call("terminate", ""); + if (m_jobUiserver) m_jobUiserver->call("terminate", QString()); if (m_erase) { QFile f(m_scenelist); f.remove(); @@ -124,46 +132,27 @@ void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { args << "--error" << tr("Rendering of %1 aborted, resulting video will probably be corrupted.").arg(m_dest); QProcess::startDetached("kdialog", args); } else { - QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); - if (interface && interface->isServiceRegistered("org.kde.knotify")) { - QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify", + QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); + if (interface && interface->isServiceRegistered("org.kde.knotify")) { + QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify", "/Notify", "org.kde.KNotify", "event"); - - QList args; - args.append(QString("RenderFinished")); // action name - args.append(QString("kdenlive")); // app name - args.append(QVariantList()); // contexts - args.append(tr("Rendering of %1 is over").arg(m_dest)); // body - args.append(QByteArray()); // app icon - QStringList actionList; - args.append(actionList); // actions - qlonglong wid; - args.append(wid); // win id - - /* - uint id = 0; - int timeout = 5000; - QDBusMessage m = QDBusMessage::createMethodCall("org.kde.VisualNotifications", - "/VisualNotifications", - "org.kde.VisualNotifications", - "Notify"); - - args.append( QString("kdenlive") ); // app_name - args.append( id ); // replaces_id - args.append( QString("kdenlive") ); // app_icon - args.append( tr("Rendering finished")); // summary - args.append( tr("Rendering of %1 is over").arg(m_dest) ); // body - QStringList actionList; - args.append( actionList ); // actions - args.append( QVariantMap() ); // hints - unused atm - args.append( timeout ); // expire timout - */ - - m.setArguments(args); - QDBusMessage replyMsg = QDBusConnection::sessionBus().call(m); - } + int seconds = m_startTime.secsTo(QTime::currentTime()); + QList args; + args.append(QString("RenderFinished")); // action name + args.append(QString("kdenlive")); // app name + args.append(QVariantList()); // contexts + args.append(tr("Rendering of %1 finished in %2").arg(m_dest, QTime(0, 0, seconds).toString("hh:mm:ss"))); // body + args.append(QByteArray()); // app icon + QStringList actionList; + args.append(actionList); // actions + qlonglong wid; + args.append(wid); // win id + + m.setArguments(args); + QDBusMessage replyMsg = QDBusConnection::sessionBus().call(m); + } if (m_player != "-") { QStringList args; diff --git a/renderer/renderjob.h b/renderer/renderjob.h index 3fd75476..be809d45 100644 --- a/renderer/renderjob.h +++ b/renderer/renderjob.h @@ -24,6 +24,7 @@ #include #include #include +#include class RenderJob : public QObject { Q_OBJECT @@ -47,6 +48,7 @@ private: QStringList m_args; bool m_erase; QDBusInterface *m_jobUiserver; + QTime m_startTime; }; #endif -- 2.39.2