00001 #include <iostream>
00002
00003
00004 #include <QString>
00005 #include <QString>
00006 #include <QStringList>
00007
00008
00009 #include "mythcorecontext.h"
00010 #include "mythdbcon.h"
00011 #include "mythdirs.h"
00012
00013 #include "mythprogressdialog.h"
00014 #include "metadatacommon.h"
00015 #include "grabbersettings.h"
00016
00017 using namespace std;
00018
00019
00020
00021 GrabberSettings::GrabberSettings(MythScreenStack *parent, const char *name)
00022 : MythScreenType(parent, name),
00023 m_movieGrabberButtonList(NULL), m_tvGrabberButtonList(NULL),
00024 m_gameGrabberButtonList(NULL), m_dailyUpdatesCheck(NULL),
00025 m_okButton(NULL), m_cancelButton(NULL)
00026 {
00027 }
00028
00029 bool GrabberSettings::Create()
00030 {
00031 bool foundtheme = false;
00032
00033
00034 foundtheme = LoadWindowFromXML("config-ui.xml", "grabbersettings", this);
00035
00036 if (!foundtheme)
00037 return false;
00038
00039 m_movieGrabberButtonList = dynamic_cast<MythUIButtonList *> (GetChild("moviegrabber"));
00040 m_tvGrabberButtonList = dynamic_cast<MythUIButtonList *> (GetChild("tvgrabber"));
00041 m_gameGrabberButtonList = dynamic_cast<MythUIButtonList *> (GetChild("gamegrabber"));
00042
00043 m_dailyUpdatesCheck = dynamic_cast<MythUICheckBox *> (GetChild("dailyupdates"));
00044
00045 m_okButton = dynamic_cast<MythUIButton *> (GetChild("ok"));
00046 m_cancelButton = dynamic_cast<MythUIButton *> (GetChild("cancel"));
00047
00048 if (!m_movieGrabberButtonList || !m_tvGrabberButtonList ||
00049 !m_gameGrabberButtonList || !m_dailyUpdatesCheck || !m_okButton || !m_cancelButton)
00050 {
00051 LOG(VB_GENERAL, LOG_ERR, "Theme is missing critical theme elements.");
00052 return false;
00053 }
00054
00055 m_movieGrabberButtonList->SetHelpText(tr("Select a source to use when searching for "
00056 "information and artwork about movies."));
00057 m_tvGrabberButtonList->SetHelpText(tr("Select a source to use when searching for "
00058 "information and artwork about television."));
00059 m_gameGrabberButtonList->SetHelpText(tr("Select a source to use when searching for "
00060 "information and artwork about video games."));
00061 m_okButton->SetHelpText(tr("Save your changes and close this window."));
00062 m_cancelButton->SetHelpText(tr("Discard your changes and close this window."));
00063
00064 m_dailyUpdatesCheck->SetHelpText(tr("If set, the backend will attempt to "
00065 "perform artwork updates for recordings daily. When "
00066 "new seasons begin to record, this will attempt to "
00067 "provide you with fresh, relevant artwork while "
00068 "preserving the artwork assigned to old recordings."));
00069
00070 connect(m_okButton, SIGNAL(Clicked()), this, SLOT(slotSave()));
00071 connect(m_cancelButton, SIGNAL(Clicked()), this, SLOT(Close()));
00072
00073 BuildFocusList();
00074
00075 QString message = tr("Searching for data sources...");
00076 LoadInBackground(message);
00077
00078 return true;
00079 }
00080
00081 GrabberSettings::~GrabberSettings()
00082 {
00083 }
00084
00085 void GrabberSettings::Load(void)
00086 {
00087 QString busymessage = tr("Searching for data sources...");
00088 MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack");
00089 MythUIBusyDialog *busyPopup = new MythUIBusyDialog(busymessage, popupStack,
00090 "grabberbusydialog");
00091
00092 if (busyPopup->Create())
00093 {
00094 popupStack->AddScreen(busyPopup, false);
00095 }
00096 else
00097 {
00098 delete busyPopup;
00099 busyPopup = NULL;
00100 }
00101
00102 QDir TVScriptPath = QString("%1metadata/Television/").arg(GetShareDir());
00103 QStringList TVScripts = TVScriptPath.entryList(QDir::Files);
00104 QDir MovieScriptPath = QString("%1metadata/Movie/").arg(GetShareDir());
00105 QStringList MovieScripts = MovieScriptPath.entryList(QDir::Files);
00106 QDir GameScriptPath = QString("%1metadata/Game/").arg(GetShareDir());
00107 QStringList GameScripts = GameScriptPath.entryList(QDir::Files);
00108
00109 if (MovieScripts.count())
00110 {
00111 for (QStringList::const_iterator i = MovieScripts.begin();
00112 i != MovieScripts.end(); ++i)
00113 {
00114 QString commandline = QString("%1/%2")
00115 .arg(MovieScriptPath.path()).arg(*i);
00116 MythSystem grabber(commandline, QStringList() << "-v", kMSRunShell | kMSStdOut | kMSBuffered);
00117 grabber.Run();
00118 grabber.Wait();
00119 QByteArray result = grabber.ReadAll();
00120
00121 if (!result.isEmpty())
00122 {
00123 QDomDocument doc;
00124 doc.setContent(result, true);
00125 QDomElement root = doc.documentElement();
00126 if (!root.isNull())
00127 {
00128 MetaGrabberScript *script = ParseGrabberVersion(root);
00129 if (!script->GetName().isEmpty())
00130 m_movieGrabberList.append(script);
00131 }
00132 }
00133 }
00134 }
00135
00136 if (TVScripts.count())
00137 {
00138 for (QStringList::const_iterator i = TVScripts.end() - 1;
00139 i != TVScripts.begin() - 1; --i)
00140 {
00141 QString commandline = QString("%1/%2")
00142 .arg(TVScriptPath.path()).arg(*i);
00143 MythSystem grabber(commandline, QStringList() << "-v", kMSRunShell | kMSStdOut | kMSBuffered);
00144 grabber.Run();
00145 grabber.Wait();
00146 QByteArray result = grabber.ReadAll();
00147
00148 if (!result.isEmpty())
00149 {
00150 QDomDocument doc;
00151 doc.setContent(result, true);
00152 QDomElement root = doc.documentElement();
00153 if (!root.isNull())
00154 {
00155 MetaGrabberScript *script = ParseGrabberVersion(root);
00156 if (!script->GetName().isEmpty())
00157 m_tvGrabberList.append(script);
00158
00159 }
00160 }
00161 }
00162 }
00163
00164 if (GameScripts.count())
00165 {
00166 for (QStringList::const_iterator i = GameScripts.end() - 1;
00167 i != GameScripts.begin() - 1; --i)
00168 {
00169 QString commandline = QString("%1/%2")
00170 .arg(GameScriptPath.path()).arg(*i);
00171 MythSystem grabber(commandline, QStringList() << "-v", kMSRunShell | kMSStdOut | kMSBuffered);
00172 grabber.Run();
00173 grabber.Wait();
00174 QByteArray result = grabber.ReadAll();
00175
00176 if (!result.isEmpty())
00177 {
00178 QDomDocument doc;
00179 doc.setContent(result, true);
00180 QDomElement root = doc.documentElement();
00181 if (!root.isNull())
00182 {
00183 MetaGrabberScript *script = ParseGrabberVersion(root);
00184 if (!script->GetName().isEmpty())
00185 m_gameGrabberList.append(script);
00186 }
00187 }
00188 }
00189 }
00190
00191 if (busyPopup)
00192 {
00193 busyPopup->Close();
00194 busyPopup = NULL;
00195 }
00196 }
00197
00198 void GrabberSettings::Init(void)
00199 {
00200 for (QList<MetaGrabberScript*>::const_iterator it =
00201 m_movieGrabberList.begin();
00202 it != m_movieGrabberList.end(); ++it)
00203 {
00204 QString commandline = QString("metadata/Movie/%1")
00205 .arg((*it)->GetCommand());
00206 MetadataMap map;
00207 (*it)->toMap(map);
00208 MythUIButtonListItem *item =
00209 new MythUIButtonListItem(m_movieGrabberButtonList, (*it)->GetName());
00210 item->SetData(commandline);
00211 item->SetTextFromMap(map);
00212 }
00213
00214 m_movieGrabberList.clear();
00215
00216 for (QList<MetaGrabberScript*>::const_iterator it = m_tvGrabberList.begin();
00217 it != m_tvGrabberList.end(); ++it)
00218 {
00219 QString commandline = QString("metadata/Television/%1")
00220 .arg((*it)->GetCommand());
00221 MetadataMap map;
00222 (*it)->toMap(map);
00223 MythUIButtonListItem *item =
00224 new MythUIButtonListItem(m_tvGrabberButtonList, (*it)->GetName());
00225 item->SetData(commandline);
00226 item->SetTextFromMap(map);
00227 }
00228
00229 m_tvGrabberList.clear();
00230
00231 for (QList<MetaGrabberScript*>::const_iterator it =
00232 m_gameGrabberList.begin();
00233 it != m_gameGrabberList.end(); ++it)
00234 {
00235 QString commandline = QString("metadata/Game/%1")
00236 .arg((*it)->GetCommand());
00237 MetadataMap map;
00238 (*it)->toMap(map);
00239 MythUIButtonListItem *item =
00240 new MythUIButtonListItem(m_gameGrabberButtonList, (*it)->GetName());
00241 item->SetData(commandline);
00242 item->SetTextFromMap(map);
00243 }
00244
00245 m_gameGrabberList.clear();
00246
00247 QString currentTVGrabber = gCoreContext->GetSetting("TelevisionGrabber",
00248 "metadata/Television/ttvdb.py");
00249 QString currentMovieGrabber = gCoreContext->GetSetting("MovieGrabber",
00250 "metadata/Movie/tmdb.py");
00251 QString currentGameGrabber = gCoreContext->GetSetting("mythgame.MetadataGrabber",
00252 "metadata/Game/giantbomb.py");
00253
00254 m_movieGrabberButtonList->SetValueByData(qVariantFromValue(currentMovieGrabber));
00255 m_tvGrabberButtonList->SetValueByData(qVariantFromValue(currentTVGrabber));
00256 m_gameGrabberButtonList->SetValueByData(qVariantFromValue(currentGameGrabber));
00257
00258 int updates =
00259 gCoreContext->GetNumSetting("DailyArtworkUpdates", 0);
00260 if (updates == 1)
00261 m_dailyUpdatesCheck->SetCheckState(MythUIStateType::Full);
00262 }
00263
00264 void GrabberSettings::slotSave(void)
00265 {
00266 gCoreContext->SaveSettingOnHost("TelevisionGrabber", m_tvGrabberButtonList->GetDataValue().toString(), "");
00267 gCoreContext->SaveSettingOnHost("MovieGrabber", m_movieGrabberButtonList->GetDataValue().toString(), "");
00268 gCoreContext->SaveSetting("mythgame.MetadataGrabber", m_gameGrabberButtonList->GetDataValue().toString());
00269
00270 int dailyupdatestate = 0;
00271 if (m_dailyUpdatesCheck->GetCheckState() == MythUIStateType::Full)
00272 dailyupdatestate = 1;
00273 gCoreContext->SaveSetting("DailyArtworkUpdates", dailyupdatestate);
00274
00275 Close();
00276 }
00277
00278 bool GrabberSettings::keyPressEvent(QKeyEvent *event)
00279 {
00280 if (GetFocusWidget()->keyPressEvent(event))
00281 return true;
00282
00283 bool handled = false;
00284
00285 if (!handled && MythScreenType::keyPressEvent(event))
00286 handled = true;
00287
00288 return handled;
00289 }