00001
00002 #include <unistd.h>
00003
00004
00005 #include <iostream>
00006 using namespace std;
00007
00008
00009 #include <QCoreApplication>
00010 #include <QEventLoop>
00011
00012
00013 #include "exitcodes.h"
00014 #include "mythcontext.h"
00015 #include "mythdb.h"
00016 #include "mythversion.h"
00017 #include "mythmiscutil.h"
00018 #include "jobqueue.h"
00019 #include "mythtranslation.h"
00020 #include "mythconfig.h"
00021 #include "commandlineparser.h"
00022 #include "mythlogging.h"
00023
00024 #include "lookup.h"
00025
00026 namespace
00027 {
00028 void cleanup()
00029 {
00030 delete gContext;
00031 gContext = NULL;
00032
00033 }
00034
00035 class CleanupGuard
00036 {
00037 public:
00038 typedef void (*CleanupFunc)();
00039
00040 public:
00041 CleanupGuard(CleanupFunc cleanFunction) :
00042 m_cleanFunction(cleanFunction) {}
00043
00044 ~CleanupGuard()
00045 {
00046 m_cleanFunction();
00047 }
00048
00049 private:
00050 CleanupFunc m_cleanFunction;
00051 };
00052 }
00053
00054 bool inJobQueue = false;
00055
00056 int main(int argc, char *argv[])
00057 {
00058 MythMetadataLookupCommandLineParser cmdline;
00059 if (!cmdline.Parse(argc, argv))
00060 {
00061 cmdline.PrintHelp();
00062 return GENERIC_EXIT_INVALID_CMDLINE;
00063 }
00064
00065 if (cmdline.toBool("showhelp"))
00066 {
00067 cmdline.PrintHelp();
00068 return GENERIC_EXIT_OK;
00069 }
00070
00071 if (cmdline.toBool("showversion"))
00072 {
00073 cmdline.PrintVersion();
00074 return GENERIC_EXIT_OK;
00075 }
00076
00077 QCoreApplication a(argc, argv);
00078 QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHMETADATALOOKUP);
00079
00080 int retval;
00081 if ((retval = cmdline.ConfigureLogging()) != GENERIC_EXIT_OK)
00082 return retval;
00083
00085
00086 close(0);
00087
00088 CleanupGuard callCleanup(cleanup);
00089
00090 gContext = new MythContext(MYTH_BINARY_VERSION);
00091 if (!gContext->Init(false))
00092 {
00093 LOG(VB_GENERAL, LOG_ERR, "Failed to init MythContext, exiting.");
00094 return GENERIC_EXIT_NO_MYTHCONTEXT;
00095 }
00096
00097 myth_nice(19);
00098
00099 MythTranslation::load("mythfrontend");
00100
00101 LookerUpper *lookup = new LookerUpper();
00102
00103 LOG(VB_GENERAL, LOG_INFO,
00104 "Testing grabbers and metadata sites for functionality...");
00105 if (!lookup->AllOK())
00106 {
00107 delete lookup;
00108 return GENERIC_EXIT_NOT_OK;
00109 }
00110 LOG(VB_GENERAL, LOG_INFO,
00111 "All grabbers tested and working. Continuing...");
00112
00113 if (cmdline.toBool("jobid"))
00114 {
00115 uint chanid;
00116 QDateTime starttime;
00117 int jobType = JOB_METADATA;
00118
00119 if (!JobQueue::GetJobInfoFromID(cmdline.toInt("jobid"), jobType,
00120 chanid, starttime))
00121 {
00122 LOG(VB_GENERAL, LOG_INFO,
00123 QString("No valid job found for jobid: %1")
00124 .arg(cmdline.toInt("jobid")));
00125 return GENERIC_EXIT_NOT_OK;
00126 }
00127
00128 lookup->HandleSingleRecording(chanid, starttime,
00129 cmdline.toBool("refresh-rules"));
00130 }
00131 else if (cmdline.toBool("chanid") && cmdline.toBool("starttime"))
00132 lookup->HandleSingleRecording(cmdline.toUInt("chanid"),
00133 cmdline.toDateTime("starttime"),
00134 cmdline.toBool("refresh-rules"));
00135 else if (cmdline.toBool("refresh-all-rules"))
00136 {
00137 lookup->HandleAllRecordingRules();
00138 lookup->CopyRuleInetrefsToRecordings();
00139 }
00140 else if (cmdline.toBool("refresh-all-artwork"))
00141 lookup->HandleAllArtwork(false);
00142 else if (cmdline.toBool("refresh-all-artwork-dangerously"))
00143 lookup->HandleAllArtwork(true);
00144 else
00145 {
00146
00147 lookup->CopyRuleInetrefsToRecordings();
00148 lookup->HandleAllRecordings(cmdline.toBool("refresh-rules"));
00149 }
00150
00151 while (lookup->StillWorking())
00152 {
00153 sleep(1);
00154 qApp->processEvents();
00155 }
00156
00157 delete lookup;
00158
00159 LOG(VB_GENERAL, LOG_NOTICE, "MythMetadataLookup run complete.");
00160
00161 return GENERIC_EXIT_OK;
00162 }