00001 #include <QDir>
00002
00003 #include "mythcontext.h"
00004 #include "mythdirs.h"
00005 #include "mythmainwindow.h"
00006 #include "mythsystem.h"
00007 #include "mythdialogbox.h"
00008 #include "mythuistatetype.h"
00009 #include "mythuiimage.h"
00010 #include "globals.h"
00011 #include "videometadatalistmanager.h"
00012 #include "videoutils.h"
00013 #include "storagegroup.h"
00014
00015 namespace
00016 {
00017 const QString VIDEO_COVERFILE_DEFAULT_OLD = QObject::tr("None");
00018 const QString VIDEO_COVERFILE_DEFAULT_OLD2 = QObject::tr("No Cover");
00019
00020 template <typename T>
00021 void CopySecond(const T &src, QStringList &dest)
00022 {
00023 for (typename T::const_iterator p = src.begin(); p != src.end(); ++p)
00024 {
00025 dest.push_back((*p).second);
00026 }
00027 }
00028 }
00029
00030 template <>
00031 void CheckedSet(MythUIStateType *uiItem, const QString &state)
00032 {
00033 if (uiItem)
00034 {
00035 uiItem->Reset();
00036 uiItem->DisplayState(state);
00037 }
00038 }
00039
00040 void CheckedSet(MythUIType *container, const QString &itemName,
00041 const QString &value)
00042 {
00043 if (container)
00044 {
00045 MythUIType *uit = container->GetChild(itemName);
00046 MythUIText *tt = dynamic_cast<MythUIText *>(uit);
00047 if (tt)
00048 CheckedSet(tt, value);
00049 else
00050 {
00051 MythUIStateType *st = dynamic_cast<MythUIStateType *>(uit);
00052 CheckedSet(st, value);
00053 }
00054 }
00055 }
00056
00057 void CheckedSet(MythUIImage *uiItem, const QString &filename)
00058 {
00059 if (uiItem)
00060 {
00061 uiItem->Reset();
00062 uiItem->SetFilename(filename);
00063 uiItem->Load();
00064 }
00065 }
00066
00067 QStringList GetVideoDirsByHost(QString host)
00068 {
00069 QStringList tmp;
00070
00071 QStringList tmp2 = StorageGroup::getGroupDirs("Videos", host);
00072 for (QStringList::iterator p = tmp2.begin(); p != tmp2.end(); ++p)
00073 tmp.append(*p);
00074
00075 if (host.isEmpty())
00076 {
00077 #ifdef _WIN32
00078 QStringList tmp3 = gCoreContext->GetSetting("VideoStartupDir",
00079 DEFAULT_VIDEOSTARTUP_DIR).split(";", QString::SkipEmptyParts);
00080 #else
00081 QStringList tmp3 = gCoreContext->GetSetting("VideoStartupDir",
00082 DEFAULT_VIDEOSTARTUP_DIR).split(":", QString::SkipEmptyParts);
00083 #endif
00084 for (QStringList::iterator p = tmp3.begin(); p != tmp3.end(); ++p)
00085 {
00086 bool matches = false;
00087 QString newpath = *p;
00088 if (!newpath.endsWith("/"))
00089 newpath.append("/");
00090
00091 for (QStringList::iterator q = tmp2.begin(); q != tmp2.end(); ++q)
00092 {
00093 QString comp = *q;
00094
00095 if (comp.endsWith(newpath))
00096 {
00097 matches = true;
00098 break;
00099 }
00100 }
00101 if (!matches)
00102 tmp.append(QDir::cleanPath(*p));
00103 }
00104 }
00105
00106 return tmp;
00107 }
00108
00109 QStringList GetVideoDirs()
00110 {
00111 return GetVideoDirsByHost("");
00112 }
00113
00114 bool IsDefaultCoverFile(const QString &coverfile)
00115 {
00116 return coverfile == VIDEO_COVERFILE_DEFAULT ||
00117 coverfile == VIDEO_COVERFILE_DEFAULT_OLD ||
00118 coverfile == VIDEO_COVERFILE_DEFAULT_OLD2 ||
00119 coverfile.endsWith(VIDEO_COVERFILE_DEFAULT_OLD) ||
00120 coverfile.endsWith(VIDEO_COVERFILE_DEFAULT_OLD2);
00121 }
00122
00123 bool IsDefaultScreenshot(const QString &screenshot)
00124 {
00125 return screenshot == VIDEO_SCREENSHOT_DEFAULT;
00126 }
00127
00128 bool IsDefaultBanner(const QString &banner)
00129 {
00130 return banner == VIDEO_BANNER_DEFAULT;
00131 }
00132
00133 bool IsDefaultFanart(const QString &fanart)
00134 {
00135 return fanart == VIDEO_FANART_DEFAULT;
00136 }
00137
00138 QString GetDisplayUserRating(float userrating)
00139 {
00140 return QString::number(userrating, 'f', 1);
00141 }
00142
00143 QString GetDisplayLength(int length)
00144 {
00145 return QString("%1 minutes").arg(length);
00146 }
00147
00148 QString GetDisplayBrowse(bool browse)
00149 {
00150 return browse ? QObject::tr("Yes") : QObject::tr("No");
00151 }
00152
00153 QString GetDisplayWatched(bool watched)
00154 {
00155 return watched ? QObject::tr("Yes") : QObject::tr("No");
00156 }
00157
00158 QString GetDisplayProcessed(bool processed)
00159 {
00160 return processed ? QObject::tr("Details Downloaded") : QObject::tr("Waiting for Detail Download");
00161 }
00162
00163 QString GetDisplayYear(int year)
00164 {
00165 return year == VIDEO_YEAR_DEFAULT ? "?" : QString::number(year);
00166 }
00167
00168 QString GetDisplayRating(const QString &rating)
00169 {
00170 if (rating == "<NULL>")
00171 return QObject::tr("No rating available.");
00172 return rating;
00173 }
00174
00175 QString GetDisplayGenres(const VideoMetadata &item)
00176 {
00177 QStringList ret;
00178 CopySecond(item.GetGenres(), ret);
00179 return ret.join(", ");
00180 }
00181
00182 QString GetDisplayCountries(const VideoMetadata &item)
00183 {
00184 QStringList ret;
00185 CopySecond(item.GetCountries(), ret);
00186 return ret.join(", ");
00187 }
00188
00189 QStringList GetDisplayCast(const VideoMetadata &item)
00190 {
00191 QStringList ret;
00192 CopySecond(item.GetCast(), ret);
00193 return ret;
00194 }
00195
00196 QString ParentalLevelToState(const ParentalLevel &level)
00197 {
00198 QString ret;
00199 switch (level.GetLevel())
00200 {
00201 case ParentalLevel::plLowest :
00202 ret = "Lowest";
00203 break;
00204 case ParentalLevel::plLow :
00205 ret = "Low";
00206 break;
00207 case ParentalLevel::plMedium :
00208 ret = "Medium";
00209 break;
00210 case ParentalLevel::plHigh :
00211 ret = "High";
00212 break;
00213 default:
00214 ret = "None";
00215 }
00216
00217 return ret;
00218 }
00219
00220 QString TrailerToState(const QString &trailerFile)
00221 {
00222 QString ret;
00223 if (!trailerFile.isEmpty())
00224 ret = "hasTrailer";
00225 else
00226 ret = "None";
00227 return ret;
00228 }
00229
00230 QString WatchedToState(bool watched)
00231 {
00232 QString ret;
00233 if (watched)
00234 ret = "yes";
00235 else
00236 ret = "no";
00237 return ret;
00238 }
00239
00240 VideoContentType ContentTypeFromString(const QString &type)
00241 {
00242 VideoContentType ret = kContentUnknown;
00243
00244 if (type == "MOVIE")
00245 ret = kContentMovie;
00246 else if (type == "TELEVISION")
00247 ret = kContentTelevision;
00248 else if (type == "ADULT")
00249 ret = kContentAdult;
00250 else if (type == "MUSICVIDEO")
00251 ret = kContentMusicVideo;
00252 else if (type == "HOMEVIDEO")
00253 ret = kContentHomeMovie;
00254
00255 return ret;
00256 }
00257
00258 QString ContentTypeToString(VideoContentType type)
00259 {
00260 QString ret = "UNKNOWN";
00261
00262 if (type == kContentMovie)
00263 ret = "MOVIE";
00264 else if (type == kContentTelevision)
00265 ret = "TELEVISION";
00266 else if (type == kContentAdult)
00267 ret = "ADULT";
00268 else if (type == kContentMusicVideo)
00269 ret = "MUSICVIDEO";
00270 else if (type == kContentHomeMovie)
00271 ret = "HOMEVIDEO";
00272
00273 return ret;
00274 }
00275