rendered paste bodyIndex: videodlg.cpp
===================================================================
--- videodlg.cpp (revision 22249)
+++ videodlg.cpp (working copy)
@@ -1183,6 +1183,74 @@
while (item && playing_time.elapsed() > WATCHED_WATERMARK);
}
+ class FanartLoader: public QObject
+ {
+ Q_OBJECT
+
+ public:
+ FanartLoader() : itemsPast(0)
+ {
+ connect(&m_fanartTimer, SIGNAL(timeout()), SLOT(fanartLoad()));
+ }
+
+ ~FanartLoader()
+ {
+ m_fanartTimer.disconnect(this);
+ }
+
+ void LoadImage(const QString &filename, MythUIImage *image)
+ {
+ bool wasActive = m_fanartTimer.isActive();
+ if (filename.isEmpty())
+ {
+ if (wasActive)
+ m_fanartTimer.stop();
+
+ image->Reset();
+ itemsPast++;
+ }
+ else
+ {
+ QMutexLocker locker(&m_fanartLock);
+ m_fanart = image;
+ if (filename != m_fanart->GetFilename())
+ {
+ if (wasActive)
+ m_fanartTimer.stop();
+
+ if (itemsPast > 2)
+ m_fanart->Reset();
+
+ m_fanart->SetFilename(filename);
+ m_fanartTimer.setSingleShot(true);
+ m_fanartTimer.start(300);
+
+ if (wasActive)
+ itemsPast++;
+ else
+ itemsPast = 0;
+ }
+ else
+ itemsPast = 0;
+ }
+ }
+
+ protected slots:
+ void fanartLoad(void)
+ {
+ QMutexLocker locker(&m_fanartLock);
+ m_fanart->Load();
+ }
+
+ private:
+ int itemsPast;
+ QMutex m_fanartLock;
+ MythUIImage *m_fanart;
+ QTimer m_fanartTimer;
+ };
+
+ FanartLoader fanartLoader;
+
struct CopyMetadataDestination
{
virtual void handleText(const QString &name, const QString &value) = 0;
@@ -1212,13 +1280,20 @@
UIUtilW::Assign(m_screen, image, name);
if (image)
{
- if (filename.size())
+ if (name != "fanart")
{
- image->SetFilename(filename);
- image->Load();
+ if (filename.size())
+ {
+ image->SetFilename(filename);
+ image->Load();
+ }
+ else
+ image->Reset();
}
else
- image->Reset();
+ {
+ fanartLoader.LoadImage(filename, image);
+ }
}
}