int main(int argc, char *argv[]) { int result = GENERIC_EXIT_OK; // QString allStart = "19700101000000"; // QString allEnd = MythDate::current().toString("yyyyMMddhhmmss"); int jobType = JOB_NONE; if (!cmdline.Parse(argc, argv)) { cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } if (cmdline.toBool("showhelp")) { cmdline.PrintHelp(); return GENERIC_EXIT_OK; } if (cmdline.toBool("showversion")) { cmdline.PrintVersion(); return GENERIC_EXIT_OK; } QCoreApplication a(argc, argv); QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHCOMMFLAG); int retval = cmdline.ConfigureLogging("general", !cmdline.toBool("noprogress")); if (retval != GENERIC_EXIT_OK) return retval; CleanupGuard callCleanup(cleanup); #ifndef _WIN32 QList<int> signallist; signallist << SIGINT << SIGTERM << SIGSEGV << SIGABRT << SIGBUS << SIGFPE << SIGILL; #if ! CONFIG_DARWIN signallist << SIGRTMIN; #endif SignalHandler::Init(signallist); signal(SIGHUP, SIG_IGN); #endif gContext = new MythContext(MYTH_BINARY_VERSION); if (!gContext->Init( false, /*use gui*/ false, /*prompt for backend*/ false, /*bypass auto discovery*/ cmdline.toBool("skipdb"))) /*ignoreDB*/ { LOG(VB_GENERAL, LOG_EMERG, "Failed to init MythContext, exiting."); return GENERIC_EXIT_NO_MYTHCONTEXT; } cmdline.ApplySettingsOverride(); MythTranslation::load("mythfrontend"); if (cmdline.toBool("outputmethod")) { QString om = cmdline.toString("outputmethod"); if (outputTypes->contains(om)) outputMethod = outputTypes->value(om); } if (cmdline.toBool("chanid") && cmdline.toBool("starttime")) { // operate on a recording in the database uint chanid = cmdline.toUInt("chanid"); QDateTime starttime = cmdline.toDateTime("starttime"); if (cmdline.toBool("clearskiplist")) return ClearSkipList(chanid, starttime); if (cmdline.toBool("gencutlist")) return CopySkipListToCutList(chanid, starttime); if (cmdline.toBool("clearcutlist")) return SetCutList(chanid, starttime, ""); if (cmdline.toBool("setcutlist")) return SetCutList(chanid, starttime, cmdline.toString("setcutlist")); if (cmdline.toBool("getcutlist")) return GetMarkupList("cutlist", chanid, starttime); if (cmdline.toBool("getskiplist")) return GetMarkupList("commflag", chanid, starttime); // TODO: check for matching jobid // create temporary id to operate off of if not if (cmdline.toBool("queue")) QueueCommFlagJob(chanid, starttime, cmdline.toBool("rebuild")); else if (cmdline.toBool("rebuild")) result = RebuildSeekTable(chanid, starttime, -1); else result = FlagCommercials(chanid, starttime, -1, cmdline.toString("outputfile"), true); } else if (cmdline.toBool("jobid")) { jobID = cmdline.toInt("jobid"); uint chanid; QDateTime starttime; if (!JobQueue::GetJobInfoFromID(jobID, jobType, chanid, starttime)) { cerr << "mythcommflag: ERROR: Unable to find DB info for " << "JobQueue ID# " << jobID << endl; return GENERIC_EXIT_NO_RECORDING_DATA; } force = true; int jobQueueCPU = gCoreContext->GetNumSetting("JobQueueCPU", 0); if (jobQueueCPU < 2) { myth_nice(17); myth_ioprio((0 == jobQueueCPU) ? 8 : 7); } progress = false; int ret = 0; if (JobQueue::GetJobFlags(jobID) & JOB_REBUILD) RebuildSeekTable(chanid, starttime, jobID); else ret = FlagCommercials(chanid, starttime, jobID, "", jobQueueCPU != 0); if (ret > GENERIC_EXIT_NOT_OK) JobQueue::ChangeJobStatus(jobID, JOB_ERRORED, QCoreApplication::translate("(mythcommflag)", "Failed with exit status %1", "Job status").arg(ret)); else JobQueue::ChangeJobStatus(jobID, JOB_FINISHED, QCoreApplication::translate("(mythcommflag)", "%n commercial break(s)", "Job status", QCoreApplication::UnicodeUTF8, ret)); } else if (cmdline.toBool("video")) { // build skiplist for video file return RebuildSeekTable(cmdline.toString("video"), -1); } else if (cmdline.toBool("file")) { if (cmdline.toBool("skipdb")) { if (cmdline.toBool("rebuild")) { cerr << "The --rebuild parameter builds the seektable for " "internal MythTV use only. It cannot be used in " "combination with --skipdb." << endl; return GENERIC_EXIT_INVALID_CMDLINE; } if (!cmdline.toBool("outputfile")) cmdline.SetValue("outputfile", "-"); // perform commercial flagging on file outside the database FlagCommercials(cmdline.toString("file"), -1, cmdline.toString("outputfile"), !cmdline.toBool("skipdb"), true); } else { ProgramInfo pginfo(cmdline.toString("file")); // pass chanid and starttime // inefficient, but it lets the other function // handle sanity checking if (cmdline.toBool("rebuild")) result = RebuildSeekTable(pginfo.GetChanID(), pginfo.GetRecordingStartTime(), -1); else result = FlagCommercials(pginfo.GetChanID(), pginfo.GetRecordingStartTime(), -1, cmdline.toString("outputfile"), true); } } else if (cmdline.toBool("queue")) { // run flagging for all recordings with no skiplist MSqlQuery query(MSqlQuery::InitCon()); query.prepare("SELECT r.chanid, r.starttime, c.commmethod " "FROM recorded AS r " "LEFT JOIN channel AS c ON r.chanid=c.chanid " // "WHERE startime >= :STARTTIME AND endtime <= :ENDTIME " "ORDER BY starttime;"); //query.bindValue(":STARTTIME", allStart); //query.bindValue(":ENDTIME", allEnd); if (query.exec() && query.isActive() && query.size() > 0) { QDateTime starttime; uint chanid; while (query.next()) { starttime = MythDate::fromString(query.value(1).toString()); chanid = query.value(0).toUInt(); if (!cmdline.toBool("force") && !cmdline.toBool("rebuild")) { // recording is already flagged if (IsMarked(chanid, starttime)) continue; // channel is marked as commercial free if (query.value(2).toInt() == COMM_DETECT_COMMFREE) continue; // recording rule did not enable commflagging #if 0 RecordingInfo recinfo(chanid, starttime); if (!(recinfo.GetAutoRunJobs() & JOB_COMMFLAG)) continue; #endif } QueueCommFlagJob(chanid, starttime, cmdline.toBool("rebuild")); } } } else { LOG(VB_GENERAL, LOG_ERR, "No valid combination of command inputs received."); cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } return result; }
int main(int argc, char *argv[]) { int result = GENERIC_EXIT_OK; // QString allStart = "19700101000000"; // QString allEnd = MythDate::current().toString("yyyyMMddhhmmss"); int jobType = JOB_NONE; if (!cmdline.Parse(argc, argv)) { cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } if (cmdline.toBool("showhelp")) { cmdline.PrintHelp(); return GENERIC_EXIT_OK; } if (cmdline.toBool("showversion")) { cmdline.PrintVersion(); return GENERIC_EXIT_OK; } QCoreApplication a(argc, argv); QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHCOMMFLAG); int retval = cmdline.ConfigureLogging("general", !cmdline.toBool("noprogress")); if (retval != GENERIC_EXIT_OK) return retval; CleanupGuard callCleanup(cleanup); #ifndef _WIN32 QList<int> signallist; signallist << SIGINT << SIGTERM << SIGSEGV << SIGABRT << SIGBUS << SIGFPE << SIGILL; #if ! CONFIG_DARWIN signallist << SIGRTMIN; #endif SignalHandler::Init(signallist); signal(SIGHUP, SIG_IGN); #endif gContext = new MythContext(MYTH_BINARY_VERSION); if (!gContext->Init( false, /*use gui*/ false, /*prompt for backend*/ false, /*bypass auto discovery*/ cmdline.toBool("skipdb"))) /*ignoreDB*/ { LOG(VB_GENERAL, LOG_EMERG, "Failed to init MythContext, exiting."); return GENERIC_EXIT_NO_MYTHCONTEXT; } cmdline.ApplySettingsOverride(); MythTranslation::load("mythfrontend"); if (cmdline.toBool("outputmethod")) { QString om = cmdline.toString("outputmethod"); if (outputTypes->contains(om)) outputMethod = outputTypes->value(om); } if (cmdline.toBool("chanid") && cmdline.toBool("starttime")) { // operate on a recording in the database uint chanid = cmdline.toUInt("chanid"); QDateTime starttime = cmdline.toDateTime("starttime"); if (cmdline.toBool("clearskiplist")) return ClearSkipList(chanid, starttime); if (cmdline.toBool("gencutlist")) return CopySkipListToCutList(chanid, starttime); if (cmdline.toBool("clearcutlist")) return SetCutList(chanid, starttime, ""); if (cmdline.toBool("setcutlist")) return SetCutList(chanid, starttime, cmdline.toString("setcutlist")); if (cmdline.toBool("getcutlist")) return GetMarkupList("cutlist", chanid, starttime); if (cmdline.toBool("getskiplist")) return GetMarkupList("commflag", chanid, starttime); // TODO: check for matching jobid // create temporary id to operate off of if not if (cmdline.toBool("queue")) QueueCommFlagJob(chanid, starttime, cmdline.toBool("rebuild")); else if (cmdline.toBool("rebuild")) result = RebuildSeekTable(chanid, starttime, -1); else result = FlagCommercials(chanid, starttime, -1, cmdline.toString("outputfile"), true); } else if (cmdline.toBool("jobid")) { jobID = cmdline.toInt("jobid"); uint chanid; QDateTime starttime; if (!JobQueue::GetJobInfoFromID(jobID, jobType, chanid, starttime)) { cerr << "mythcommflag: ERROR: Unable to find DB info for " << "JobQueue ID# " << jobID << endl; return GENERIC_EXIT_NO_RECORDING_DATA; } force = true; int jobQueueCPU = gCoreContext->GetNumSetting("JobQueueCPU", 0); if (jobQueueCPU < 2) { myth_nice(17); myth_ioprio((0 == jobQueueCPU) ? 8 : 7); } progress = false; int ret = 0; if (JobQueue::GetJobFlags(jobID) & JOB_REBUILD) RebuildSeekTable(chanid, starttime, jobID); else ret = FlagCommercials(chanid, starttime, jobID, "", jobQueueCPU != 0); if (ret > GENERIC_EXIT_NOT_OK) JobQueue::ChangeJobStatus(jobID, JOB_ERRORED, QCoreApplication::translate("(mythcommflag)", "Failed with exit status %1", "Job status").arg(ret)); else JobQueue::ChangeJobStatus(jobID, JOB_FINISHED, #if QT_VERSION < 0x050000 QCoreApplication::translate("(mythcommflag)", "%n commercial break(s)", "Job status", QCoreApplication::UnicodeUTF8, ret)); #else QCoreApplication::translate("(mythcommflag)", "%n commercial break(s)", "Job status", ret)); #endif }
int main(int argc, char *argv[]) { bool isVideo = false; int result = GENERIC_EXIT_OK; QString filename; QString outputfilename = QString::null; QDateTime starttime; QString allStart = "19700101000000"; QString allEnd = QDateTime::currentDateTime().toString("yyyyMMddhhmmss"); int jobType = JOB_NONE; QDir fullfile; QString newCutList = QString::null; if (!cmdline.Parse(argc, argv)) { cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } if (cmdline.toBool("showhelp")) { cmdline.PrintHelp(); return GENERIC_EXIT_OK; } if (cmdline.toBool("showversion")) { cmdline.PrintVersion(); return GENERIC_EXIT_OK; } QCoreApplication a(argc, argv); QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHCOMMFLAG); int retval; if ((retval = cmdline.ConfigureLogging( "important general", !cmdline.toBool("noprogress"))) != GENERIC_EXIT_OK) return retval; CleanupGuard callCleanup(cleanup); gContext = new MythContext(MYTH_BINARY_VERSION); if (!gContext->Init( false, /*use gui*/ false, /*prompt for backend*/ false, /*bypass auto discovery*/ cmdline.toBool("skipdb"))) /*ignoreDB*/ { LOG(VB_GENERAL, LOG_EMERG, "Failed to init MythContext, exiting."); return GENERIC_EXIT_NO_MYTHCONTEXT; } cmdline.ApplySettingsOverride(); MythTranslation::load("mythfrontend"); if (cmdline.toBool("chanid") && cmdline.toBool("starttime")) { // operate on a recording in the database uint chanid = cmdline.toUInt("chanid"); QDateTime starttime = cmdline.toDateTime("starttime"); if (cmdline.toBool("clearskiplist")) return ClearSkipList(chanid, starttime); if (cmdline.toBool("gencutlist")) return CopySkipListToCutList(chanid, starttime); if (cmdline.toBool("clearcutlist")) return SetCutList(chanid, starttime, ""); if (cmdline.toBool("setcutlist")) return SetCutList(chanid, starttime, cmdline.toString("setcutlist")); if (cmdline.toBool("getcutlist")) return GetMarkupList("cutlist", chanid, starttime); if (cmdline.toBool("getskiplist")) return GetMarkupList("commflag", chanid, starttime); // TODO: check for matching jobid // create temporary id to operate off of if not if (cmdline.toBool("queue")) QueueCommFlagJob(chanid, starttime, cmdline.toBool("rebuild")); else if (cmdline.toBool("rebuild")) result = RebuildSeekTable(chanid, starttime, -1); else result = FlagCommercials(chanid, starttime, -1, ""); } else if (cmdline.toBool("jobid")) { jobID = cmdline.toInt("jobid"); uint chanid; QDateTime starttime; if (!JobQueue::GetJobInfoFromID(jobID, jobType, chanid, starttime)) { cerr << "mythcommflag: ERROR: Unable to find DB info for " << "JobQueue ID# " << jobID << endl; return GENERIC_EXIT_NO_RECORDING_DATA; } inJobQueue = true; force = true; int jobQueueCPU = gCoreContext->GetNumSetting("JobQueueCPU", 0); if (jobQueueCPU < 2) { myth_nice(17); myth_ioprio((0 == jobQueueCPU) ? 8 : 7); } fullSpeed = jobQueueCPU != 0; progress = false; isVideo = false; int ret = 0; if (JobQueue::GetJobFlags(jobID) && JOB_REBUILD) RebuildSeekTable(chanid, starttime, jobID); else ret = FlagCommercials(chanid, starttime, jobID, ""); if (ret > GENERIC_EXIT_NOT_OK) JobQueue::ChangeJobStatus(jobID, JOB_ERRORED, QString("Failed with exit status %1").arg(ret)); else JobQueue::ChangeJobStatus(jobID, JOB_FINISHED, QString("%1 commercial breaks").arg(ret)); } else if (cmdline.toBool("video")) { // build skiplist for video file return RebuildSeekTable(cmdline.toString(filename), -1); } else if (cmdline.toBool("file")) { // TODO: add back handling of recording defined by the basename // perform commercial flagging on file outside the database FlagCommercials(cmdline.toString("file"), -1, cmdline.toString("outputfile"), !cmdline.toBool("skipdb")); } else if (cmdline.toBool("queue")) { // run flagging for all recordings with no skiplist MSqlQuery query(MSqlQuery::InitCon()); query.prepare("SELECT r.chanid, r.starttime, c.commmethod " "FROM recorded AS r " "LEFT JOIN channel AS c ON r.chanid=c.chanid " // "WHERE startime >= :STARTTIME AND endtime <= :ENDTIME " "ORDER BY starttime;"); //query.bindValue(":STARTTIME", allStart); //query.bindValue(":ENDTIME", allEnd); if (query.exec() && query.isActive() && query.size() > 0) { QDateTime starttime; uint chanid; while (query.next()) { starttime = QDateTime::fromString(query.value(1).toString(), Qt::ISODate); chanid = query.value(0).toUInt(); if (!cmdline.toBool("force") && !cmdline.toBool("rebuild")) { // recording is already flagged if (IsMarked(chanid, starttime)) continue; // channel is marked as commercial free if (query.value(2).toInt() == COMM_DETECT_COMMFREE) continue; // recording rule did not enable commflagging // RecordingInfo recinfo(chanid, starttime); // if (!(recinfo.GetAutoRunJobs() & JOB_COMMFLAG)) // continue; } QueueCommFlagJob(chanid, starttime, cmdline.toBool("rebuild")); } } } else { VERBOSE(VB_IMPORTANT, "No valid combination of command inputs received."); cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } return result; }