static int SendMessage(const MythUtilCommandLineParser &cmdline) { QHostAddress address = QHostAddress::Broadcast; unsigned short port = 6948; QString message = kMessage; if (cmdline.toBool("udpport")) port = (unsigned short)cmdline.toUInt("udpport"); if (cmdline.toBool("bcastaddr")) address.setAddress(cmdline.toString("bcastaddr")); QMap<QString,QString>::const_iterator i; QMap<QString,QString> extras = cmdline.GetExtra(); for (i = extras.begin(); i != extras.end(); ++i) { QString name = i.key(); QString value = i.value(); name.replace("--", ""); cerr << "name: " << name.toLocal8Bit().constData() << " -- value: " << value.toLocal8Bit().constData() << endl; name.append("%"); name.prepend("%"); message.replace(name, value); } cout << "output:\n" << message.toLocal8Bit().constData() << endl; QUdpSocket *sock = new QUdpSocket(); QByteArray utf8 = message.toUtf8(); int result = GENERIC_EXIT_OK; if (sock->writeDatagram(utf8, address, port) < 0) { cout << "Failed to send UDP/XML packet" << endl; result = GENERIC_EXIT_NOT_OK; } else { cout << "Sent UDP/XML packet to IP " << address.toString().toLocal8Bit().constData() << " and port: " << port << endl; } sock->deleteLater(); return result; }
bool GetProgramInfo(const MythUtilCommandLineParser &cmdline, ProgramInfo &pginfo) { if (cmdline.toBool("video")) { QString video = cmdline.toString("video"); pginfo = ProgramInfo(video); return true; } if (!cmdline.toBool("chanid")) { LOG(VB_GENERAL, LOG_ERR, "No chanid specified"); return false; } if (!cmdline.toBool("starttime")) { LOG(VB_GENERAL, LOG_ERR, "No start time specified"); return false; } uint chanid = cmdline.toUInt("chanid"); QDateTime starttime = cmdline.toDateTime("starttime"); QString startstring = starttime.toString("yyyyMMddhhmmss"); const ProgramInfo tmpInfo(chanid, starttime); if (!tmpInfo.GetChanID()) { LOG(VB_GENERAL, LOG_ERR, QString("No program data exists for channel %1 at %2") .arg(chanid).arg(startstring)); return false; } pginfo = tmpInfo; return true; }
int main(int argc, char *argv[]) { MythUtilCommandLineParser cmdline; if (!cmdline.Parse(argc, argv)) { cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } // default to quiet operation for pidcounter and pidfilter QString defaultVerbose = "general"; LogLevel_t defaultLevel = LOG_INFO; if (cmdline.toBool("pidcounter") || cmdline.toBool("pidfilter")) { if (!cmdline.toBool("verbose")) { verboseString = defaultVerbose = ""; verboseMask = 0; } if (!cmdline.toBool("loglevel")) logLevel = defaultLevel = LOG_ERR; } if (cmdline.toBool("showhelp")) { cmdline.PrintHelp(); return GENERIC_EXIT_OK; } if (cmdline.toBool("showversion")) { cmdline.PrintVersion(); return GENERIC_EXIT_OK; } #ifndef _WIN32 QCoreApplication a(argc, argv); #else // MINGW application needs a window to receive messages // such as socket notifications :[ QApplication a(argc, argv); #endif QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHUTIL); int retval; if ((retval = cmdline.ConfigureLogging(defaultVerbose)) != GENERIC_EXIT_OK) return retval; if (!cmdline.toBool("loglevel")) logLevel = defaultLevel; #ifndef _WIN32 QList<int> signallist; signallist << SIGINT << SIGTERM << SIGSEGV << SIGABRT; SignalHandler handler(signallist); signal(SIGHUP, SIG_IGN); #endif gContext = new MythContext(MYTH_BINARY_VERSION); if (!gContext->Init(false)) { LOG(VB_GENERAL, LOG_ERR, "Failed to init MythContext, exiting."); return GENERIC_EXIT_NO_MYTHCONTEXT; } cmdline.ApplySettingsOverride(); UtilMap utilMap; registerBackendUtils(utilMap); registerFileUtils(utilMap); registerMPEGUtils(utilMap); registerJobUtils(utilMap); registerMarkupUtils(utilMap); registerMessageUtils(utilMap); bool cmdFound = false; int cmdResult = GENERIC_EXIT_OK; UtilMap::iterator i; for (i = utilMap.begin(); i != utilMap.end(); ++i) { if (cmdline.toBool(i.key())) { cmdResult = (i.value())(cmdline); cmdFound = true; break; } } if(!cmdFound) { cmdline.PrintHelp(); cmdResult = GENERIC_EXIT_INVALID_CMDLINE; } delete gContext; return cmdResult; }