MythTV  0.26-pre
videometadatautil.cpp
Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends