|
MythTV
0.26-pre
|
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 }
1.7.6.1