MythTV master
mythutil.cpp
Go to the documentation of this file.
1// Qt includes
2#include <QtGlobal>
3#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
4#include <QtSystemDetection>
5#endif
6#ifndef Q_OS_WINDOWS
7#include <QCoreApplication>
8#else
9#include <QApplication>
10#endif
11#include <QDateTime>
12#include <QString>
13
14// libmyth* includes
15#include "libmyth/mythcontext.h"
19#include "libmythbase/mythversion.h"
20
21// Local includes
22#include "backendutils.h"
23#include "eitutils.h"
24#include "fileutils.h"
25#include "jobutils.h"
26#include "markuputils.h"
27#include "messageutils.h"
28#include "mpegutils.h"
29#include "musicmetautils.h"
30#include "mythutil.h"
32#include "recordingutils.h"
33
35 ProgramInfo &pginfo)
36{
37 if (cmdline.toBool("video"))
38 {
39 QString video = cmdline.toString("video");
40 pginfo = ProgramInfo(video);
41 return true;
42 }
43 if (!cmdline.toBool("chanid"))
44 {
45 LOG(VB_GENERAL, LOG_ERR, "No chanid specified");
46 return false;
47 }
48
49 if (!cmdline.toBool("starttime"))
50 {
51 LOG(VB_GENERAL, LOG_ERR, "No start time specified");
52 return false;
53 }
54
55 uint chanid = cmdline.toUInt("chanid");
56 QDateTime starttime = cmdline.toDateTime("starttime");
57 QString startstring = starttime.toString("yyyyMMddhhmmss");
58
59 const ProgramInfo tmpInfo(chanid, starttime);
60
61 if (!tmpInfo.GetChanID())
62 {
63 LOG(VB_GENERAL, LOG_ERR,
64 QString("No program data exists for channel %1 at %2")
65 .arg(chanid).arg(startstring));
66 return false;
67 }
68
69 pginfo = tmpInfo;
70
71 return true;
72}
73
74int main(int argc, char *argv[])
75{
77 if (!cmdline.Parse(argc, argv))
78 {
81 }
82
83 // default to quiet operation for pidcounter and pidfilter
84 QString defaultVerbose = "general";
85 LogLevel_t defaultLevel = LOG_INFO;
86 if (cmdline.toBool("pidcounter") || cmdline.toBool("pidfilter"))
87 {
88 if (!cmdline.toBool("verbose"))
89 {
90 verboseString = defaultVerbose = "";
91 verboseMask = 0;
92 }
93 if (!cmdline.toBool("loglevel"))
94 logLevel = defaultLevel = LOG_ERR;
95 }
96
97
98 if (cmdline.toBool("showhelp"))
99 {
101 return GENERIC_EXIT_OK;
102 }
103
104 if (cmdline.toBool("showversion"))
105 {
107 return GENERIC_EXIT_OK;
108 }
109
110#ifndef Q_OS_WINDOWS
111 QCoreApplication a(argc, argv);
112#else
113 // MINGW application needs a window to receive messages
114 // such as socket notifications :[
115 QApplication a(argc, argv);
116#endif
117
118 QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHUTIL);
119
120 int retval = cmdline.ConfigureLogging(defaultVerbose);
121 if (retval != GENERIC_EXIT_OK)
122 return retval;
123
124 if (!cmdline.toBool("loglevel"))
125 logLevel = defaultLevel;
126
127 MythContext context {MYTH_BINARY_VERSION};
128 if (!context.Init(false))
129 {
130 LOG(VB_GENERAL, LOG_ERR, "Failed to init MythContext, exiting.");
132 }
133
135
136 UtilMap utilMap;
137
138 registerBackendUtils(utilMap);
139 registerEITUtils(utilMap);
140 registerFileUtils(utilMap);
141 registerMPEGUtils(utilMap);
142 registerJobUtils(utilMap);
143 registerMarkupUtils(utilMap);
144 registerMessageUtils(utilMap);
145 registerMusicUtils(utilMap);
146 registerRecordingUtils(utilMap);
147
148 bool cmdFound = false;
149 int cmdResult = GENERIC_EXIT_OK;
150 UtilMap::iterator i;
151 for (i = utilMap.begin(); i != utilMap.end(); ++i)
152 {
153 if (cmdline.toBool(i.key()))
154 {
155 cmdResult = (i.value())(cmdline);
156 cmdFound = true;
157 break;
158 }
159 }
160
161 if(!cmdFound)
162 {
165 }
166
167 return cmdResult;
168}
169
170/* vim: set expandtab tabstop=4 shiftwidth=4: */
void registerBackendUtils(UtilMap &utilMap)
bool toBool(const QString &key) const
Returns stored QVariant as a boolean.
virtual bool Parse(int argc, const char *const *argv)
Loop through argv and populate arguments with values.
void ApplySettingsOverride(void)
Apply all overrides to the global context.
int ConfigureLogging(const QString &mask="general", bool progress=false)
Read in logging options and initialize the logging interface.
QString toString(const QString &key) const
Returns stored QVariant as a QString, falling to default if not provided.
static void PrintVersion(void)
Print application version information.
QDateTime toDateTime(const QString &key) const
Returns stored QVariant as a QDateTime, falling to default if not provided.
uint toUInt(const QString &key) const
Returns stored QVariant as an unsigned integer, falling to default if not provided.
void PrintHelp(void) const
Print command line option help.
Startup context for MythTV.
Definition: mythcontext.h:20
Holds information on recordings and videos.
Definition: programinfo.h:74
uint GetChanID(void) const
This is the unique key used in the database to locate tuning information.
Definition: programinfo.h:380
unsigned int uint
Definition: compat.h:60
void registerEITUtils(UtilMap &utilMap)
Definition: eitutils.cpp:137
@ GENERIC_EXIT_NO_MYTHCONTEXT
No MythContext available.
Definition: exitcodes.h:16
@ GENERIC_EXIT_OK
Exited with no error.
Definition: exitcodes.h:13
@ GENERIC_EXIT_INVALID_CMDLINE
Command line parse error.
Definition: exitcodes.h:18
void registerFileUtils(UtilMap &utilMap)
Definition: fileutils.cpp:148
void registerJobUtils(UtilMap &utilMap)
Definition: jobutils.cpp:83
uint64_t verboseMask
Definition: logging.cpp:101
LogLevel_t logLevel
Definition: logging.cpp:89
QString verboseString
Definition: logging.cpp:102
void registerMarkupUtils(UtilMap &utilMap)
void registerMessageUtils(UtilMap &utilMap)
void registerMPEGUtils(UtilMap &utilMap)
Definition: mpegutils.cpp:844
void registerMusicUtils(UtilMap &utilMap)
static constexpr const char * MYTH_APPNAME_MYTHUTIL
Definition: mythappname.h:19
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
int main(int argc, char *argv[])
Definition: mythutil.cpp:74
bool GetProgramInfo(const MythUtilCommandLineParser &cmdline, ProgramInfo &pginfo)
Definition: mythutil.cpp:34
QMap< QString, UtilFunc > UtilMap
Definition: mythutil.h:15
MythCommFlagCommandLineParser cmdline
void registerRecordingUtils(UtilMap &utilMap)