X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=renderer%2Frenderjob.cpp;h=0c8d402f5d793d3dad547b091920a590b2e575a5;hb=c83a8d90341daba2bc688ad1232dc4b836272235;hp=08d4ed08051b577e8871375a68fe93093812dab3;hpb=082c0c36bfe1f878a1c77e2c7d9b35f2cf6ce9ff;p=kdenlive diff --git a/renderer/renderjob.cpp b/renderer/renderjob.cpp index 08d4ed08..0c8d402f 100644 --- a/renderer/renderjob.cpp +++ b/renderer/renderjob.cpp @@ -19,12 +19,13 @@ #include +#include #include "renderjob.h" static QDBusConnection connection(QLatin1String("")); -RenderJob::RenderJob(bool erase, QString renderer, QString player, QString scenelist, QString dest, QStringList args, int in, int out) : QObject() { +RenderJob::RenderJob(bool erase, const QString &renderer, const QString &profile, const QString &rendermodule, const QString &player, const QString &scenelist, const QString &dest, const QStringList &preargs, const QStringList &args, int in, int out) : QObject(), m_jobUiserver(NULL) { m_scenelist = scenelist; m_dest = dest; m_player = player; @@ -35,7 +36,10 @@ RenderJob::RenderJob(bool erase, QString renderer, QString player, QString scene m_args << scenelist; if (in != -1) m_args << "in=" + QString::number(in); if (out != -1) m_args << "out=" + QString::number(out); - m_args << "-consumer" << "avformat:" + m_dest << "progress=1" << args; + m_args << preargs; + //qDebug()<<"PRE ARGS: "<setReadChannel(QProcess::StandardError); @@ -43,7 +47,20 @@ RenderJob::RenderJob(bool erase, QString renderer, QString player, QString scene RenderJob::~RenderJob() { - delete m_renderProcess; + if (m_renderProcess) delete m_renderProcess; +} + +void RenderJob::slotAbort() { + qDebug() << "Kdenlive-render: JOB ABORTED BY USER..."; + m_renderProcess->kill(); + if (m_jobUiserver) QDBusReply reply = m_jobUiserver->call("terminate", ""); + if (m_erase) { + QFile f(m_scenelist); + f.remove(); + } + QFile f(m_dest); + f.remove(); + qApp->quit(); } void RenderJob::receivedStderr() { @@ -53,32 +70,86 @@ void RenderJob::receivedStderr() { int pro = result.toInt(); if (pro > m_progress) { m_progress = pro; - QDBusReply reply = m_jobUiserver->call("setPercent", (uint) m_progress); + if (m_jobUiserver) QDBusReply reply = m_jobUiserver->call("setPercent", (uint) m_progress); } } void RenderJob::start() { - QDBusInterface kuiserver("org.kde.JobViewServer", "/JobViewServer", "org.kde.JobViewServer"); - QDBusReply objectPath = kuiserver.call("requestView", "kdenlive", "kdenlive", 1); - QString reply = ((QDBusObjectPath) objectPath).path(); - m_jobUiserver = new QDBusInterface("org.kde.JobViewServer", reply, "org.kde.JobView"); - m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(m_dest)); + QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface(); + if (interface && interface->isServiceRegistered("org.kde.JobViewServer")) { + QDBusInterface kuiserver("org.kde.JobViewServer", "/JobViewServer", "org.kde.JobViewServer"); + QDBusReply objectPath = kuiserver.call("requestView", "kdenlive", "kdenlive", 1); + QString reply = ((QDBusObjectPath) objectPath).path(); + m_jobUiserver = new QDBusInterface("org.kde.JobViewServer", reply, "org.kde.JobView"); + m_jobUiserver->call("setInfoMessage", tr("Rendering %1").arg(m_dest.section('/', -1))); + + QDBusConnection::sessionBus().connect("org.kde.JobViewServer", reply, "org.kde.JobView", + "cancelRequested", this, SLOT(slotAbort())); + } m_renderProcess->start(m_prog, m_args); } void RenderJob::slotIsOver(int exitcode, QProcess::ExitStatus status) { - QDBusReply reply = m_jobUiserver->call("terminate", ""); + if (m_jobUiserver) QDBusReply reply = m_jobUiserver->call("terminate", ""); if (m_erase) { QFile f(m_scenelist); f.remove(); } - if (m_player != "-") { + if (status == QProcess::CrashExit) { + // rendering crashed QStringList args; - args << m_dest; - QProcess::startDetached(m_player, args); + 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", + "/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); + } + + if (m_player != "-") { + QStringList args; + args << m_dest; + QProcess::startDetached(m_player, args); + } } - exit(1); + qApp->quit(); } #include "renderjob.moc"