int handle_command(const MythBackendCommandLineParser &cmdline) { QString eventString; if (cmdline.toBool("event")) eventString = cmdline.toString("event"); else if (cmdline.toBool("systemevent")) eventString = "SYSTEM_EVENT " + cmdline.toString("systemevent") + QString(" SENDER %1").arg(gCoreContext->GetHostName()); if (!eventString.isEmpty()) { if (gCoreContext->ConnectToMasterServer()) { gCoreContext->SendMessage(eventString); return GENERIC_EXIT_OK; } return GENERIC_EXIT_NO_MYTHCONTEXT; } if (cmdline.toBool("setverbose")) { if (gCoreContext->ConnectToMasterServer()) { QString message = "SET_VERBOSE "; message += cmdline.toString("setverbose"); gCoreContext->SendMessage(message); LOG(VB_GENERAL, LOG_INFO, QString("Sent '%1' message").arg(message)); return GENERIC_EXIT_OK; } else { LOG(VB_GENERAL, LOG_ERR, "Unable to connect to backend, verbose mask unchanged "); return GENERIC_EXIT_CONNECT_ERROR; } } if (cmdline.toBool("setloglevel")) { if (gCoreContext->ConnectToMasterServer()) { QString message = "SET_LOG_LEVEL "; message += cmdline.toString("setloglevel"); gCoreContext->SendMessage(message); LOG(VB_GENERAL, LOG_INFO, QString("Sent '%1' message").arg(message)); return GENERIC_EXIT_OK; } else { LOG(VB_GENERAL, LOG_ERR, "Unable to connect to backend, log level unchanged "); return GENERIC_EXIT_CONNECT_ERROR; } } if (cmdline.toBool("clearcache")) { if (gCoreContext->ConnectToMasterServer()) { gCoreContext->SendMessage("CLEAR_SETTINGS_CACHE"); LOG(VB_GENERAL, LOG_INFO, "Sent CLEAR_SETTINGS_CACHE message"); return GENERIC_EXIT_OK; } else { LOG(VB_GENERAL, LOG_ERR, "Unable to connect to backend, settings " "cache will not be cleared."); return GENERIC_EXIT_CONNECT_ERROR; } } if (cmdline.toBool("printsched") || cmdline.toBool("testsched")) { Scheduler *sched = new Scheduler(false, &tvList); if (cmdline.toBool("printsched")) { if (!gCoreContext->ConnectToMasterServer()) { LOG(VB_GENERAL, LOG_ERR, "Cannot connect to master"); delete sched; return GENERIC_EXIT_CONNECT_ERROR; } cout << "Retrieving Schedule from Master backend.\n"; sched->FillRecordListFromMaster(); } else { cout << "Calculating Schedule from database.\n" << "Inputs, Card IDs, and Conflict info may be invalid " "if you have multiple tuners.\n"; ProgramInfo::CheckProgramIDAuthorities(); sched->FillRecordListFromDB(); } verboseMask |= VB_SCHEDULE; LogLevel_t oldLogLevel = logLevel; logLevel = LOG_DEBUG; sched->PrintList(true); logLevel = oldLogLevel; delete sched; return GENERIC_EXIT_OK; } if (cmdline.toBool("resched")) { bool ok = false; if (gCoreContext->ConnectToMasterServer()) { LOG(VB_GENERAL, LOG_INFO, "Connected to master for reschedule"); ScheduledRecording::RescheduleMatch(0, 0, 0, QDateTime(), "MythBackendCommand"); ok = true; } else LOG(VB_GENERAL, LOG_ERR, "Cannot connect to master for reschedule"); return (ok) ? GENERIC_EXIT_OK : GENERIC_EXIT_CONNECT_ERROR; } if (cmdline.toBool("scanvideos")) { bool ok = false; if (gCoreContext->ConnectToMasterServer()) { gCoreContext->SendReceiveStringList(QStringList() << "SCAN_VIDEOS"); LOG(VB_GENERAL, LOG_INFO, "Requested video scan"); ok = true; } else LOG(VB_GENERAL, LOG_ERR, "Cannot connect to master for video scan"); return (ok) ? GENERIC_EXIT_OK : GENERIC_EXIT_CONNECT_ERROR; } if (cmdline.toBool("printexpire")) { expirer = new AutoExpire(); expirer->PrintExpireList(cmdline.toString("printexpire")); return GENERIC_EXIT_OK; } // This should never actually be reached.. return GENERIC_EXIT_OK; }