void ExportNative::runScript() { QString tempDir = getTempDirectory(); QString logDir = tempDir + "logs"; QString configDir = tempDir + "config"; QString commandline; // remove existing progress.log if present if (QFile::exists(logDir + "/progress.log")) QFile::remove(logDir + "/progress.log"); // remove cancel flag file if present if (QFile::exists(logDir + "/mythburncancel.lck")) QFile::remove(logDir + "/mythburncancel.lck"); createConfigFile(configDir + "/mydata.xml"); commandline = "mytharchivehelper --nativearchive --outfile " + configDir + "/mydata.xml"; // job file commandline += logPropagateArgs; if (!logPropagateQuiet()) commandline += " --quiet"; commandline += " > " + logDir + "/progress.log 2>&1 &"; // Logs uint flags = kMSRunBackground | kMSDontBlockInputDevs | kMSDontDisableDrawing; uint retval = myth_system(commandline, flags); if (retval != GENERIC_EXIT_RUNNING && retval != GENERIC_EXIT_OK) { ShowOkPopup(QObject::tr("It was not possible to create the DVD. " "An error occured when running the scripts") ); return; } showLogViewer(); }
/** \fn MythSystemLegacy::setCommand(const QString &command, const QStringList &args) * \brief Resets an existing MythSystemLegacy object to a new command */ void MythSystemLegacy::SetCommand(const QString &command, const QStringList &args, uint flags) { m_status = GENERIC_EXIT_START; m_command = QString(command).trimmed(); m_args = QStringList(args); ProcessFlags(flags); // add logging arguments if (GetSetting("PropagateLogs")) { if (GetSetting("UseShell") && m_args.isEmpty()) { m_command += logPropagateArgs; if (logPropagateQuiet()) m_command += " --quiet"; if (logPropagateNoServer()) m_command += " --nologserver"; } else { m_args << logPropagateArgList; if (logPropagateQuiet()) m_args << "--quiet"; if (logPropagateNoServer()) m_args << "--nologserver"; } } // check for execute rights if (!GetSetting("UseShell") && access(command.toUtf8().constData(), X_OK)) { LOG(VB_GENERAL, LOG_ERR, QString("MythSystemLegacy(%1) command not executable, ") .arg(command) + ENO); m_status = GENERIC_EXIT_CMD_NOT_FOUND; } m_logcmd = (m_command + " " + m_args.join(" ")).trimmed(); if (GetSetting("AnonLog")) { m_logcmd.truncate(m_logcmd.indexOf(" ")); m_logcmd.append(" (anonymized)"); } }
void ImportNative::finishedPressed() { if (m_details.chanID != "N/A" && m_localChanID_text->GetText() == "") { ShowOkPopup(tr("You need to select a valid chanID!")); return; } QString commandline; QString tempDir = gCoreContext->GetSetting("MythArchiveTempDir", ""); QString chanID = m_localChanID_text->GetText(); if (chanID == "") chanID = m_details.chanID; if (tempDir == "") return; if (!tempDir.endsWith("/")) tempDir += "/"; QString logDir = tempDir + "logs"; // remove existing progress.log if prescent if (QFile::exists(logDir + "/progress.log")) QFile::remove(logDir + "/progress.log"); commandline = "mytharchivehelper --importnative --infile \"" + m_xmlFile + "\" --chanid " + chanID; commandline += logPropagateArgs; if (!logPropagateQuiet()) commandline += " --quiet"; commandline += " > " + logDir + "/progress.log 2>&1 &"; uint flags = kMSRunBackground | kMSDontBlockInputDevs | kMSDontDisableDrawing; uint retval = myth_system(commandline, flags); if (retval != GENERIC_EXIT_RUNNING && retval != GENERIC_EXIT_OK) { ShowOkPopup(tr("It was not possible to import the Archive. " " An error occured when running 'mytharchivehelper'") ); return; } showLogViewer(); m_previousScreen->Close(); Close(); }
bool PreviewGenerator::Run(void) { QString msg; QDateTime dtm = QDateTime::currentDateTime(); QTime tm = QTime::currentTime(); bool ok = false; QString command = GetInstallPrefix() + "/bin/mythpreviewgen"; bool local_ok = ((IsLocal() || !!(mode & kForceLocal)) && (!!(mode & kLocal)) && QFileInfo(command).isExecutable()); if (!local_ok) { if (!!(mode & kRemote)) { ok = RemotePreviewRun(); if (ok) { msg = QString("Generated remotely in %1 seconds, starting at %2") .arg(tm.elapsed()*0.001) .arg(tm.toString(Qt::ISODate)); } } else { LOG(VB_GENERAL, LOG_ERR, LOC + QString("Run() cannot generate preview locally for: '%1'") .arg(pathname)); msg = "Failed, local preview requested for remote file."; } } else { // This is where we fork and run mythpreviewgen to actually make preview command += QString(" --size %1x%2") .arg(outSize.width()).arg(outSize.height()); if (captureTime >= 0) { if (timeInSeconds) command += QString(" --seconds %1").arg(captureTime); else command += QString(" --frame %1").arg(captureTime); } command += QString(" --chanid %1").arg(programInfo.GetChanID()); command += QString(" --starttime %1") .arg(programInfo.GetRecordingStartTime(MythDate)); if (!outFileName.isEmpty()) command += QString(" --outfile \"%1\"").arg(outFileName); command += logPropagateArgs; if (!logPropagateQuiet()) command += " --quiet"; // Timeout in 30s uint ret = myth_system(command, kMSDontBlockInputDevs | kMSDontDisableDrawing | kMSProcessEvents, 30); if (ret != GENERIC_EXIT_OK) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("Encountered problems running '%1' (%2)") .arg(command) .arg(ret)); } else { LOG(VB_PLAYBACK, LOG_INFO, LOC + "Preview process returned 0."); QString outname = (!outFileName.isEmpty()) ? outFileName : (pathname + ".png"); QString lpath = QFileInfo(outname).fileName(); if (lpath == outname) { StorageGroup sgroup; QString tmpFile = sgroup.FindFile(lpath); outname = (tmpFile.isEmpty()) ? outname : tmpFile; } QFileInfo fi(outname); ok = (fi.exists() && fi.isReadable() && fi.size()); if (ok) { LOG(VB_PLAYBACK, LOG_INFO, LOC + "Preview process ran ok."); msg = QString("Generated on %1 in %2 seconds, starting at %3") .arg(gCoreContext->GetHostName()) .arg(tm.elapsed()*0.001) .arg(tm.toString(Qt::ISODate)); } else { LOG(VB_GENERAL, LOG_ERR, LOC + "Preview process not ok." + QString("\n\t\t\tfileinfo(%1)").arg(outname) + QString(" exists: %1").arg(fi.exists()) + QString(" readable: %1").arg(fi.isReadable()) + QString(" size: %1").arg(fi.size())); LOG(VB_GENERAL, LOG_ERR, LOC + QString("Despite command '%1' returning success") .arg(command)); msg = QString("Failed to read preview image despite " "preview process returning success."); } } } QMutexLocker locker(&previewLock); // Backdate file to start of preview time in case a bookmark was made // while we were generating the preview. QString output_fn = outFileName.isEmpty() ? (programInfo.GetPathname()+".png") : outFileName; QDateTime dt; if (ok) { QFileInfo fi(output_fn); if (fi.exists()) dt = fi.lastModified(); } QString message = (ok) ? "PREVIEW_SUCCESS" : "PREVIEW_FAILED"; if (listener) { QStringList list; list.push_back(programInfo.MakeUniqueKey()); list.push_back(outFileName.isEmpty() ? (programInfo.GetPathname()+".png") : outFileName); list.push_back(msg); list.push_back(dt.isValid()?dt.toString(Qt::ISODate):""); list.push_back(token); QCoreApplication::postEvent(listener, new MythEvent(message, list)); } return ok; }