00001 #include "mythuiimage.h"
00002 #include "mythuitext.h"
00003 #include "mythuistatetype.h"
00004 #include "mythmainwindow.h"
00005 #include "mythdialogbox.h"
00006 #include "mythdirs.h"
00007
00008 #include "mythuimetadataresults.h"
00009
00010 MetadataResultsDialog::MetadataResultsDialog(
00011 MythScreenStack *lparent,
00012 const MetadataLookupList results) :
00013
00014 MythScreenType(lparent, "metadataresultspopup"),
00015 m_results(results),
00016 m_resultsList(0)
00017 {
00018 m_imageDownload = new MetadataImageDownload(this);
00019 }
00020
00021 MetadataResultsDialog::~MetadataResultsDialog()
00022 {
00023 cleanCacheDir();
00024
00025 if (m_imageDownload)
00026 {
00027 delete m_imageDownload;
00028 m_imageDownload = NULL;
00029 }
00030 }
00031
00032 bool MetadataResultsDialog::Create()
00033 {
00034 if (!LoadWindowFromXML("base.xml", "MythMetadataResults", this))
00035 return false;
00036
00037 bool err = false;
00038 UIUtilE::Assign(this, m_resultsList, "results", &err);
00039 if (err)
00040 {
00041 LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'MythMetadataResults'");
00042 return false;
00043 }
00044
00045 for (int i = 0;
00046 i != m_results.count(); ++i)
00047 {
00048 MythUIButtonListItem *button =
00049 new MythUIButtonListItem(m_resultsList,
00050 m_results[i]->GetTitle());
00051 MetadataMap metadataMap;
00052 m_results[i]->toMap(metadataMap);
00053
00054 QString coverartfile;
00055 ArtworkList art = m_results[i]->GetArtwork(kArtworkCoverart);
00056 if (art.count() > 0)
00057 coverartfile = art.takeFirst().thumbnail;
00058
00059 if (coverartfile.isEmpty())
00060 {
00061 art = m_results[i]->GetArtwork(kArtworkBanner);
00062 if (art.count() > 0)
00063 coverartfile = art.takeFirst().thumbnail;
00064 }
00065
00066 if (coverartfile.isEmpty())
00067 {
00068 art = m_results[i]->GetArtwork(kArtworkScreenshot);
00069 if (art.count() > 0)
00070 coverartfile = art.takeFirst().thumbnail;
00071 }
00072
00073 QString dlfile = getDownloadFilename(m_results[i]->GetTitle(),
00074 coverartfile);
00075
00076 if (!coverartfile.isEmpty())
00077 {
00078 int pos = m_resultsList->GetItemPos(button);
00079
00080 if (QFile::exists(dlfile))
00081 button->SetImage(dlfile);
00082 else
00083 m_imageDownload->addThumb(m_results[i]->GetTitle(),
00084 coverartfile,
00085 qVariantFromValue<uint>(pos));
00086 }
00087
00088 button->SetTextFromMap(metadataMap);
00089 button->SetData(qVariantFromValue<uint>(i));
00090 }
00091
00092 connect(m_resultsList, SIGNAL(itemClicked(MythUIButtonListItem *)),
00093 SLOT(sendResult(MythUIButtonListItem *)));
00094
00095 BuildFocusList();
00096
00097 return true;
00098 }
00099
00100 void MetadataResultsDialog::cleanCacheDir()
00101 {
00102 QString cache = QString("%1/thumbcache")
00103 .arg(GetConfDir());
00104 QDir cacheDir(cache);
00105 QStringList thumbs = cacheDir.entryList(QDir::Files);
00106
00107 for (QStringList::const_iterator i = thumbs.end() - 1;
00108 i != thumbs.begin() - 1; --i)
00109 {
00110 QString filename = QString("%1/%2").arg(cache).arg(*i);
00111 QFileInfo fi(filename);
00112 QDateTime lastmod = fi.lastModified();
00113 if (lastmod.addDays(2) < QDateTime::currentDateTime())
00114 {
00115 LOG(VB_GENERAL, LOG_DEBUG, QString("Deleting old cache file %1")
00116 .arg(filename));
00117 QFile::remove(filename);
00118 }
00119 }
00120 }
00121
00122 void MetadataResultsDialog::customEvent(QEvent *event)
00123 {
00124 if (event->type() == ThumbnailDLEvent::kEventType)
00125 {
00126 ThumbnailDLEvent *tde = (ThumbnailDLEvent *)event;
00127
00128 ThumbnailData *data = tde->thumb;
00129
00130 QString file = data->url;
00131 uint pos = qVariantValue<uint>(data->data);
00132
00133 if (file.isEmpty())
00134 return;
00135
00136 if (!((uint)m_resultsList->GetCount() >= pos))
00137 return;
00138
00139 MythUIButtonListItem *item =
00140 m_resultsList->GetItemAt(pos);
00141
00142 if (item)
00143 {
00144 item->SetImage(file);
00145 }
00146 delete data;
00147 data = NULL;
00148 }
00149 }
00150
00151 void MetadataResultsDialog::sendResult(MythUIButtonListItem* item)
00152 {
00153 MetadataLookup *lookup = m_results.takeAt(qVariantValue<uint>(item->GetData()));
00154 qDeleteAll(m_results);
00155 emit haveResult(lookup);
00156 Close();
00157 }
00158