MythTV master
mythuiimageresults.cpp
Go to the documentation of this file.
1
3
4#include <QDir>
5#include <QFile>
6
11
13
15 MythScreenStack *lparent,
16 ArtworkList list,
17 const VideoArtworkType type) :
18
19 MythScreenType(lparent, "videosearchresultspopup"),
20 m_list(std::move(list)),
21 m_type(type),
22 m_imageDownload(new MetadataImageDownload(this))
23{
24}
25
27{
29
31 {
32 delete m_imageDownload;
33 m_imageDownload = nullptr;
34 }
35}
36
38{
39 if (!LoadWindowFromXML("base.xml", "MythArtworkResults", this))
40 return false;
41
42 bool err = false;
43 UIUtilE::Assign(this, m_resultsList, "results", &err);
44 if (err)
45 {
46 LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'MythArtworkResults'");
47 return false;
48 }
49
50 for (const auto & info : std::as_const(m_list))
51 {
52 auto *button = new MythUIButtonListItem(m_resultsList, QString());
53 button->SetText(info.label, "label");
54 button->SetText(info.thumbnail, "thumbnail");
55 button->SetText(info.url, "url");
56 QString width = QString::number(info.width);
57 QString height = QString::number(info.height);
58 button->SetText(width, "width");
59 button->SetText(height, "height");
60 if (info.width > 0 && info.height > 0)
61 button->SetText(QString("%1x%2").arg(width, height),
62 "resolution");
63
64 QString artfile = info.thumbnail;
65
66 if (artfile.isEmpty())
67 artfile = info.url;
68
69 QString dlfile = getDownloadFilename(info.label,
70 artfile);
71
72 if (!artfile.isEmpty())
73 {
74 int pos = m_resultsList->GetItemPos(button);
75
76 if (QFile::exists(dlfile))
77 button->SetImage(dlfile);
78 else
79 {
81 artfile,
82 QVariant::fromValue<uint>(pos));
83 }
84 }
85
86 button->SetData(QVariant::fromValue<ArtworkInfo>(info));
87 }
88
91
93
94 return true;
95}
96
98{
99 QString cache = QString("%1/cache/metadata-thumbcache")
100 .arg(GetConfDir());
101 QDir cacheDir(cache);
102 QStringList thumbs = cacheDir.entryList(QDir::Files);
103
104 for (auto i = thumbs.crbegin(); i != thumbs.crend(); ++i)
105 {
106 QString filename = QString("%1/%2").arg(cache, *i);
107 QFileInfo fi(filename);
108 QDateTime lastmod = fi.lastModified();
109 if (lastmod.addDays(2) < MythDate::current())
110 {
111 LOG(VB_GENERAL, LOG_DEBUG, QString("Deleting file %1")
112 .arg(filename));
113 QFile::remove(filename);
114 }
115 }
116}
117
119{
120 if (event->type() == ThumbnailDLEvent::kEventType)
121 {
122 auto *tde = dynamic_cast<ThumbnailDLEvent *>(event);
123 if (tde == nullptr)
124 return;
125
126 ThumbnailData *data = tde->m_thumb;
127
128 QString file = data->url;
129 uint pos = data->data.value<uint>();
130
131 if (file.isEmpty())
132 return;
133
134 if (!((uint)m_resultsList->GetCount() >= pos))
135 return;
136
139
140 if (item)
141 {
142 item->SetImage(file);
143 }
144 }
145}
146
148{
149 emit haveResult(item->GetData().value<ArtworkInfo>(),
150 m_type);
151 Close();
152}
153
MythUIButtonList * m_resultsList
void haveResult(ArtworkInfo, VideoArtworkType)
MetadataImageDownload * m_imageDownload
ImageSearchResultsDialog(MythScreenStack *lparent, ArtworkList list, VideoArtworkType type)
void sendResult(MythUIButtonListItem *item)
void customEvent(QEvent *event) override
void addThumb(QString title, QString url, QVariant data)
Screen in which all other widgets are contained and rendered.
void BuildFocusList(void)
virtual void Close()
void SetImage(MythImage *image, const QString &name="")
Sets an image directly, should only be used in special circumstances since it bypasses the cache.
int GetItemPos(MythUIButtonListItem *item) const
void itemClicked(MythUIButtonListItem *item)
MythUIButtonListItem * GetItemAt(int pos) const
static const Type kEventType
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
unsigned int uint
Definition: freesurround.h:24
QString getDownloadFilename(const QString &title, const QString &url)
QList< ArtworkInfo > ArtworkList
VideoArtworkType
QString GetConfDir(void)
Definition: mythdirs.cpp:263
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:15
dictionary info
Definition: azlyrics.py:7
STL namespace.
bool exists(str path)
Definition: xbmcvfs.py:51
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27