+void RenderJob::initKdenliveDbusInterface()
+{
+ QString kdenliveId;
+ QDBusConnection connection = QDBusConnection::sessionBus();
+ QDBusConnectionInterface* ibus = connection.interface();
+ kdenliveId = QString("org.kde.kdenlive-%1").arg(m_pid);
+ if (!ibus->isServiceRegistered(kdenliveId))
+ {
+ kdenliveId.clear();
+ const QStringList services = ibus->registeredServiceNames();
+ foreach(const QString & service, services) {
+ if (!service.startsWith("org.kde.kdenlive"))
+ continue;
+ kdenliveId = service;
+ break;
+ }
+ }
+ m_dbusargs.clear();
+ if (kdenliveId.isEmpty()) return;
+ m_kdenliveinterface = new QDBusInterface(kdenliveId,
+ "/MainWindow",
+ "org.kdenlive.MainWindow",
+ connection,
+ this);
+
+ if (m_kdenliveinterface) {
+ m_dbusargs.append(m_dest);
+ m_dbusargs.append((int) 0);
+ if (!m_args.contains("pass=2"))
+ m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingProgress", m_dbusargs);
+ connect(m_kdenliveinterface, SIGNAL(abortRenderJob(QString)),
+ this, SLOT(slotAbort(QString)));
+ }
+}
+
+
+void RenderJob::slotCheckProcess(QProcess::ProcessState state)
+{
+ if (state == QProcess::NotRunning) slotIsOver(m_renderProcess->exitStatus());
+}
+
+
+
+void RenderJob::slotIsOver(QProcess::ExitStatus status, bool isWritable)
+{
+ if (m_jobUiserver) m_jobUiserver->call("terminate", QString());
+ if (!isWritable) {
+ QString error = tr("Cannot write to %1, check the permissions.").arg(m_dest);
+ if (m_kdenliveinterface) {
+ m_dbusargs[1] = (int) - 2;
+ m_dbusargs.append(error);
+ m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingFinished", m_dbusargs);
+ }
+ QStringList args;
+ args << "--error" << error;
+ if (m_enablelog) m_logstream << error << endl;
+ qDebug() << error;
+ QProcess::startDetached("kdialog", args);
+ qApp->quit();
+ }
+ if (m_erase) {
+ QFile f(m_scenelist);
+ f.remove();
+ }
+ if (status == QProcess::CrashExit || m_renderProcess->error() != QProcess::UnknownError) {
+ // rendering crashed
+ if (m_kdenliveinterface) {
+ m_dbusargs[1] = (int) - 2;
+ m_dbusargs.append(m_errorMessage);
+ m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingFinished", m_dbusargs);
+ }
+ QStringList args;
+ QString error = tr("Rendering of %1 aborted, resulting video will probably be corrupted.").arg(m_dest);
+ args << "--error" << error;
+ if (m_enablelog) m_logstream << error << endl;
+ qDebug() << error;
+ QProcess::startDetached("kdialog", args);
+ qApp->quit();
+ } else {
+ if (!m_dualpass && m_kdenliveinterface) {
+ m_dbusargs[1] = (int) - 1;
+ m_dbusargs.append(QString());
+ m_kdenliveinterface->callWithArgumentList(QDBus::NoBlock, "setRenderingFinished", m_dbusargs);
+ }
+ QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
+ if (!m_dualpass && interface && interface->isServiceRegistered("org.kde.knotify")) {
+ QDBusMessage m = QDBusMessage::createMethodCall("org.kde.knotify",
+ "/Notify",
+ "org.kde.KNotify",
+ "event");
+ int seconds = m_startTime.secsTo(QTime::currentTime());
+ QList<QVariant> 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 = 0;
+ args.append(wid); // win id
+
+ m.setArguments(args);
+ QDBusMessage replyMsg = QDBusConnection::sessionBus().call(m);
+ }
+ if (m_enablelog) m_logstream << "Rendering of " << m_dest << " finished" << endl;
+ qDebug() << "Rendering of " << m_dest << " finished";
+ if (!m_dualpass && m_player != "-") {
+ if (m_enablelog) m_logstream << "Starting player" << endl;
+ QStringList args;
+ args << m_dest;
+ QProcess::startDetached(m_player, args);
+ }
+ if (m_dualpass) {
+ emit renderingFinished();
+ deleteLater();
+ } else qApp->quit();