00001 #include <QReadWriteLock>
00002 #include <QHash>
00003 #include <QUrl>
00004
00005 #include "videometadatautil.h"
00006 #include "mythlogging.h"
00007 #include "mythdb.h"
00008
00009 #define LOC QString("VideoMetaDataUtil: ")
00010
00011 static QReadWriteLock art_path_map_lock;
00012 typedef QPair< QString, QString > ArtPair;
00013 static QMultiHash<QString, ArtPair> art_path_map;
00014 typedef QList< ArtPair > ArtList;
00015
00016 QString VideoMetaDataUtil::GetArtPath(const QString &pathname,
00017 const QString &type)
00018 {
00019 QString basename = pathname.section('/', -1);
00020
00021 if (basename == pathname)
00022 {
00023 LOG(VB_GENERAL, LOG_WARNING, LOC +
00024 "Programmer Error: Cannot determine art path\n\t\t\t"
00025 "until the ProgramInfo pathname has been fully resolved.");
00026 return QString();
00027 }
00028
00029 art_path_map_lock.lockForRead();
00030 ArtList ret(art_path_map.values(basename));
00031 art_path_map_lock.unlock();
00032 for (ArtList::const_iterator i = ret.begin();
00033 i != ret.end(); ++i)
00034 {
00035 if ((*i).first == type)
00036 return (*i).second;
00037 }
00038
00039 QString fn = basename;
00040 fn.prepend("%");
00041
00042 QString dbcolumn;
00043 if (type == "Coverart")
00044 dbcolumn = "coverfile";
00045 else if (type == "Fanart")
00046 dbcolumn = "fanart";
00047 else if (type == "Banners")
00048 dbcolumn = "banner";
00049 else if (type == "Screenshots")
00050 dbcolumn = "screenshot";
00051
00052 QString querystr = QString("SELECT %1 "
00053 "FROM videometadata WHERE filename "
00054 "LIKE :FILENAME").arg(dbcolumn);
00055
00056 MSqlQuery query(MSqlQuery::InitCon());
00057 query.prepare(querystr);
00058 query.bindValue(":FILENAME", fn);
00059
00060 QString artpath;
00061 if (query.exec() && query.next())
00062 artpath = query.value(0).toString();
00063
00064 if (!artpath.startsWith('/') && pathname.startsWith("myth://"))
00065 {
00066 QString workURL = pathname;
00067 QUrl baseURL(workURL);
00068 baseURL.setUserName(type);
00069 QString finalURL =
00070 baseURL.toString(QUrl::RemovePath) + '/' + artpath;
00071 artpath = finalURL;
00072 }
00073
00074 ArtPair ins(type, artpath);
00075 art_path_map_lock.lockForWrite();
00076 art_path_map.insert(basename, ins);
00077 art_path_map_lock.unlock();
00078
00079 return artpath;
00080 }