35 const QString &hash,
const QString &trailer,
36 const QString &coverfile,
const QString &screenshot,
const QString &banner,
37 const QString &fanart,
const QString &title,
const QString &sortTitle,
38 const QString &subtitle,
const QString &sortSubtitle,
39 const QString &tagline,
int year,
const QDate &releasedate,
40 const QString &inetref,
int collectionref,
const QString &homepage,
41 const QString &director,
const QString &studio,
42 const QString &plot,
float userrating,
43 const QString &
rating,
int length,
int playcount,
44 int season,
int episode,
const QDate &insertdate,
46 int childID,
bool browse,
bool watched,
47 const QString &playcommand,
const QString &category,
51 const QString &host =
"",
52 bool processed =
false,
54 m_title(title), m_sortTitle(sortTitle), m_subtitle(subtitle),
55 m_sortSubtitle(sortSubtitle), m_tagline(tagline),
56 m_inetref(inetref), m_collectionref(collectionref), m_homepage(homepage),
57 m_director(director), m_studio(studio),
58 m_plot(plot), m_rating(
rating), m_playcommand(playcommand), m_category(category),
59 m_genres(genres), m_countries(countries), m_cast(cast),
60 m_filename(filename), m_sortFilename(sortFilename), m_hash(hash),
61 m_trailer(trailer), m_coverfile(coverfile),
62 m_screenshot(screenshot), m_banner(banner), m_fanart(fanart),
63 m_host(host), m_categoryID(categoryID), m_childID(childID),
64 m_year(year), m_releasedate(releasedate), m_length(length), m_playcount(playcount),
65 m_season(season), m_episode(episode), m_insertdate(insertdate), m_showlevel(showlevel),
66 m_browse(browse), m_watched(watched), m_id(id),
67 m_userrating(userrating), m_processed(processed),
68 m_contenttype(contenttype)
71 if (title.isEmpty() and subtitle.isEmpty()
72 and season == 0 and episode == 0)
156 if (m_sortTitle.isEmpty() and not m_title.isEmpty())
157 m_sortTitle = sh->doTitle(m_title);
158 if (m_sortSubtitle.isEmpty() and not m_subtitle.isEmpty())
159 m_sortSubtitle = sh->doTitle(m_subtitle);
160 if (m_sortFilename.isEmpty() and not m_filename.isEmpty())
161 m_sortFilename = sh->doPathname(m_filename);
168 const QString &
getTitle()
const {
return m_title; }
170 void SetTitle(
const QString& title,
const QString& sortTitle =
"")
173 m_sortTitle = sortTitle;
179 void SetSubtitle(
const QString &subtitle,
const QString &sortSubtitle =
"") {
180 m_subtitle = subtitle;
181 m_sortSubtitle = sortSubtitle;
186 void SetTagline(
const QString &tagline) { m_tagline = tagline; }
189 void SetInetRef(
const QString &inetRef) { m_inetref = inetRef; }
195 void SetHomepage(
const QString &homepage) { m_homepage = homepage; }
198 void SetDirector(
const QString &director) { m_director = director; }
201 void SetStudio(
const QString &studio) { m_studio = studio; }
203 const QString &
getPlot()
const {
return m_plot; }
204 void SetPlot(
const QString &plot) { m_plot = plot; }
212 m_playcommand = playCommand;
224 m_countries = countries;
230 const QString &
GetHost()
const {
return m_host; }
231 void SetHost(
const QString &host) { m_host = host; }
235 void SetFilename(
const QString &filename,
const QString &sortFilename =
"")
237 m_filename = filename;
238 m_sortFilename = sortFilename;
244 const QString &
GetHash()
const {
return m_hash; }
245 void SetHash(
const QString &hash) { m_hash = hash; }
248 void SetTrailer(
const QString &trailer) { m_trailer = trailer; }
251 void SetCoverFile(
const QString &coverFile) { m_coverfile = coverFile; }
254 void SetScreenshot(
const QString &screenshot) { m_screenshot = screenshot; }
257 void SetBanner(
const QString &banner) { m_banner = banner; }
260 void SetFanart(
const QString &fanart) { m_fanart = fanart; }
266 void SetCategoryID(
int id);
304 unsigned int GetID()
const {
return m_id; }
318 void SaveToDatabase();
319 void UpdateDatabase();
320 bool DeleteFromDatabase();
326 bool IsHostSet()
const;
328 void GetImageMap(
InfoMap &imageMap)
const;
331 void fillCountries();
332 void updateCountries();
337 bool removeDir(
const QString &dirName);
339 void saveToDatabase();
404 return (m_id < rhs->m_id);
411 d.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
412 QFileInfoList contents =
d.entryInfoList();
413 if (!contents.size())
415 return d.rmdir(dirName);
418 for (QFileInfoList::iterator p = contents.begin(); p != contents.end(); ++p)
422 QString fileName = p->fileName();
423 if (!removeDir(fileName))
428 if (!QFile(p->fileName()).remove())
432 return d.rmdir(dirName);
438 bool isremoved =
false;
440 if (!m_host.isEmpty())
447 QFileInfo fi(m_filename);
450 isremoved = removeDir(m_filename);
454 isremoved = QFile::remove(m_filename);
460 LOG(VB_GENERAL, LOG_DEBUG, QString(
"Could not delete file: %1")
481 tmp.m_prefix = m_prefix;
488 return !m_host.isEmpty();
496 if (vgm.
get(m_id, genres))
499 for (VideoGenreMap::entry::values_type::const_iterator p =
505 m_genres.push_back(genre_list::value_type(*p,
name));
515 if (vcm.
get(m_id, countries))
518 for (VideoCountryMap::entry::values_type::const_iterator p =
519 countries.
values.begin(); p != countries.
values.end(); ++p)
524 m_countries.push_back(country_list::value_type(*p,
name));
534 if (vcm.
get(m_id, cast))
537 for (VideoCastMap::entry::values_type::const_iterator p =
543 m_cast.push_back(cast_list::value_type(*p,
name));
554 m_title = query.
value(0).toString();
555 m_director = query.
value(1).toString();
556 m_studio = query.
value(2).toString();
557 m_plot = query.
value(3).toString();
558 m_rating = query.
value(4).toString();
559 m_year = query.
value(5).toInt();
560 m_releasedate = query.
value(6).toDate();
561 m_userrating = (float)query.
value(7).toDouble();
562 if (isnan(m_userrating) || m_userrating < 0)
564 if (m_userrating > 10.0f)
565 m_userrating = 10.0f;
566 m_length = query.
value(8).toInt();
567 m_playcount = query.
value(9).toInt();
568 m_filename = query.
value(10).toString();
569 m_hash = query.
value(11).toString();
571 m_coverfile = query.
value(13).toString();
572 m_inetref = query.
value(14).toString();
573 m_collectionref = query.
value(15).toUInt();
574 m_homepage = query.
value(16).toString();
575 m_childID = query.
value(17).toUInt();
576 m_browse = query.
value(18).toBool();
577 m_watched = query.
value(19).toBool();
578 m_playcommand = query.
value(20).toString();
579 m_categoryID = query.
value(21).toInt();
580 m_id = query.
value(22).toInt();
581 m_trailer = query.
value(23).toString();
582 m_screenshot = query.
value(24).toString();
583 m_banner = query.
value(25).toString();
584 m_fanart = query.
value(26).toString();
585 m_subtitle = query.
value(27).toString();
586 m_tagline = query.
value(28).toString();
587 m_season = query.
value(29).toInt();
588 m_episode = query.
value(30).toInt();
589 m_host = query.
value(31).toString();
590 m_insertdate = query.
value(32).toDate();
591 m_processed = query.
value(33).toBool();
611 if (m_title.isEmpty())
613 if (m_hash.isEmpty())
615 if (m_subtitle.isEmpty())
617 if (m_director.isEmpty())
619 if (m_plot.isEmpty())
621 if (m_rating.isEmpty())
626 GetImageMap(metadataMap);
627 QString coverfile = metadataMap[
"coverfile"];
628 QString screenshot = metadataMap[
"screenshotfile"];
629 QString bannerfile = metadataMap[
"bannerfile"];
630 QString fanartfile = metadataMap[
"fanartfile"];
640 if (m_trailer.isEmpty())
642 if (m_inetref.isEmpty())
644 if (isnan(m_userrating))
646 if (m_userrating < -10.0f || m_userrating > 10.0f)
648 if (m_releasedate.toString().isEmpty())
652 if (m_season > 0 || m_episode > 0)
658 bool inserting = m_id == 0;
668 query.
prepare(
"INSERT INTO videometadata (title,subtitle,tagline,director,studio,plot," 669 "rating,year,userrating,length,season,episode,filename,hash," 670 "showlevel,coverfile,inetref,homepage,browse,watched,trailer," 671 "screenshot,banner,fanart,host,processed,contenttype) VALUES (:TITLE, :SUBTITLE, " 672 ":TAGLINE, :DIRECTOR, :STUDIO, :PLOT, :RATING, :YEAR, :USERRATING, " 673 ":LENGTH, :SEASON, :EPISODE, :FILENAME, :HASH, :SHOWLEVEL, " 674 ":COVERFILE, :INETREF, :HOMEPAGE, :BROWSE, :WATCHED, " 675 ":TRAILER, :SCREENSHOT, :BANNER, :FANART, :HOST, :PROCESSED, :CONTENTTYPE)");
679 query.
prepare(
"UPDATE videometadata SET title = :TITLE, subtitle = :SUBTITLE, " 680 "tagline = :TAGLINE, director = :DIRECTOR, studio = :STUDIO, " 681 "plot = :PLOT, rating= :RATING, year = :YEAR, " 682 "releasedate = :RELEASEDATE, userrating = :USERRATING, " 683 "length = :LENGTH, playcount = :PLAYCOUNT, season = :SEASON, " 684 "episode = :EPISODE, filename = :FILENAME, hash = :HASH, trailer = :TRAILER, " 685 "showlevel = :SHOWLEVEL, coverfile = :COVERFILE, " 686 "screenshot = :SCREENSHOT, banner = :BANNER, fanart = :FANART, " 687 "inetref = :INETREF, collectionref = :COLLECTION, homepage = :HOMEPAGE, " 688 "browse = :BROWSE, watched = :WATCHED, host = :HOST, playcommand = :PLAYCOMMAND, " 689 "childid = :CHILDID, category = :CATEGORY, processed = :PROCESSED, " 690 "contenttype = :CONTENTTYPE WHERE intid = :INTID");
692 query.
bindValue(
":PLAYCOMMAND", m_playcommand);
694 query.
bindValue(
":CATEGORY", m_categoryID);
698 query.
bindValue(
":TITLE", m_title.isNull() ?
"" : m_title);
699 query.
bindValue(
":SUBTITLE", m_subtitle.isNull() ?
"" : m_subtitle);
701 query.
bindValue(
":DIRECTOR", m_director.isNull() ?
"" : m_director);
704 query.
bindValue(
":RATING", m_rating.isNull() ?
"" : m_rating);
706 query.
bindValue(
":RELEASEDATE", m_releasedate);
707 query.
bindValue(
":USERRATING", m_userrating);
709 query.
bindValue(
":PLAYCOUNT", m_playcount);
712 query.
bindValue(
":FILENAME", m_filename);
714 query.
bindValue(
":TRAILER", m_trailer.isNull() ?
"" : m_trailer);
715 query.
bindValue(
":SHOWLEVEL", m_showlevel);
716 query.
bindValue(
":COVERFILE", m_coverfile.isNull() ?
"" : m_coverfile);
717 query.
bindValue(
":SCREENSHOT", m_screenshot.isNull() ?
"" : m_screenshot);
718 query.
bindValue(
":BANNER", m_banner.isNull() ?
"" : m_banner);
719 query.
bindValue(
":FANART", m_fanart.isNull() ?
"" : m_fanart);
720 query.
bindValue(
":INETREF", m_inetref.isNull() ?
"" : m_inetref);
721 query.
bindValue(
":COLLECTION", m_collectionref);
722 query.
bindValue(
":HOMEPAGE", m_homepage.isNull() ?
"" : m_homepage);
726 query.
bindValue(
":PROCESSED", m_processed);
740 if (!query.
exec(
"SELECT LAST_INSERT_ID()") || !query.
next())
746 m_id = query.
value(0).toUInt();
750 LOG(VB_GENERAL, LOG_ERR,
751 QString(
"%1: The id of the last inserted row to " 752 "videometadata seems to be 0. This is odd.")
780 query.
prepare(
"DELETE FROM videometadata WHERE intid = :ID");
787 query.
prepare(
"DELETE FROM filemarkup WHERE filename = :FILENAME");
788 query.
bindValue(
":FILENAME", m_filename);
806 if (m_categoryID !=
id)
816 LOG(VB_GENERAL, LOG_ERR,
"Unknown category id");
827 genre_list::iterator genre = m_genres.begin();
828 while (genre != m_genres.end())
830 if (genre->second.trimmed().length())
838 genre = m_genres.erase(genre);
848 country_list::iterator country = m_countries.begin();
849 while (country != m_countries.end())
851 if (country->second.trimmed().length())
859 country = m_countries.erase(country);
869 cast_list::iterator cast = m_cast.begin();
870 while (cast != m_cast.end())
872 if (cast->second.trimmed().length())
880 cast = m_cast.erase(cast);
889 && !GetCoverFile().startsWith(
"/")
890 && !GetCoverFile().isEmpty()
898 coverfile = GetCoverFile();
901 imageMap[
"coverfile"] = coverfile;
902 imageMap[
"coverart"] = coverfile;
904 QString screenshotfile;
905 if (IsHostSet() && !GetScreenshot().startsWith(
"/")
906 && !GetScreenshot().isEmpty())
909 GetHost(), GetScreenshot());
913 screenshotfile = GetScreenshot();
916 imageMap[
"screenshotfile"] = screenshotfile;
917 imageMap[
"screenshot"] = screenshotfile;
920 if (IsHostSet() && !GetBanner().startsWith(
"/")
921 && !GetBanner().isEmpty())
928 bannerfile = GetBanner();
931 imageMap[
"bannerfile"] = bannerfile;
932 imageMap[
"banner"] = bannerfile;
935 if (IsHostSet() && !GetFanart().startsWith(
"/")
936 && !GetFanart().isEmpty())
943 fanartfile = GetFanart();
946 imageMap[
"fanartfile"] = fanartfile;
947 imageMap[
"fanart"] = fanartfile;
949 QString smartimage = coverfile;
950 if (!screenshotfile.isEmpty () && (GetSeason() > 0 || GetEpisode() > 0))
951 smartimage = screenshotfile;
952 imageMap[
"smartimage"] = smartimage;
960 QString eatBraces(
const QString &title,
const QString &left_brace,
961 const QString &right_brace)
964 bool keep_checking =
true;
966 while (keep_checking)
968 int left_position = ret.indexOf(left_brace);
969 int right_position = ret.indexOf(right_brace);
970 if (left_position == -1 || right_position == -1)
976 keep_checking =
false;
980 if (left_position < right_position)
986 ret = ret.left(left_position) +
987 ret.right(ret.length() - right_position - 1);
989 else if (left_position > right_position)
995 ret = ret.left(right_position) +
996 ret.right(ret.length() - left_position - 1);
1006 const QString &file_name,
1007 const QString &host)
1011 query.
prepare(
"SELECT intid,filename FROM videometadata WHERE " 1024 int intid = query.
value(0).toInt();
1025 QString oldfilename = query.
value(1).toString();
1027 query.
prepare(
"UPDATE videometadata SET filename = :FILENAME, " 1028 "host = :HOST WHERE intid = :INTID");
1029 query.
bindValue(
":FILENAME", file_name);
1035 MythDB::DBError(
"Video hashed metadata update (videometadata)", query);
1039 query.
prepare(
"UPDATE filemarkup SET filename = :FILENAME " 1040 "WHERE filename = :OLDFILENAME");
1041 query.
bindValue(
":FILENAME", file_name);
1042 query.
bindValue(
":OLDFILENAME", oldfilename);
1054 const QString &host)
1062 QString fullname = sgroup.
FindFile(file_name);
1077 QString cleanFilename = file_name.left(file_name.lastIndexOf(
'.'));
1078 cleanFilename.replace(QRegExp(
"%20"),
" ");
1079 cleanFilename.replace(QRegExp(
"_"),
" ");
1080 cleanFilename.replace(QRegExp(
"\\."),
" ");
1085 QString season_translation = tr(
"Season",
"Metadata file name parsing");
1090 QString episode_translation = tr(
"Episode",
"Metadata file name parsing");
1093 QString separator =
"(?:\\s?(?:-|/)?\\s?)?";
1094 QString regexp = QString(
1097 "(?:s|(?:Season|%2))?" 1101 "(?:[ex/]|Episode|%3)" 1107 .arg(season_translation).arg(episode_translation);
1108 QRegExp filename_parse(regexp,
1109 Qt::CaseInsensitive, QRegExp::RegExp2);
1112 QString regexp2 = QString(
"(%1(?:(?:Season|%2)%1\\d*%1)*%1)$")
1113 .arg(separator).arg(season_translation);
1114 QRegExp title_parse(regexp2, Qt::CaseInsensitive, QRegExp::RegExp2);
1116 int pos = filename_parse.indexIn(cleanFilename);
1119 QString title = filename_parse.cap(1);
1120 QString season = filename_parse.cap(2);
1121 QString episode = filename_parse.cap(3);
1122 QString subtitle = filename_parse.cap(4);
1125 int pos2 = title_parse.indexIn(title);
1127 title = title.left(pos2);
1128 title = title.right(title.length() -
1129 title.lastIndexOf(
'/') -1);
1132 if (position == 1 && !title.isEmpty())
1133 return title.trimmed();
1134 else if (position == 2)
1135 return season.trimmed();
1136 else if (position == 3)
1137 return episode.trimmed();
1138 else if (position == 4)
1139 return subtitle.trimmed();
1141 else if (position == 1)
1143 QString title = cleanFilename;
1146 title = title.right(title.length() -
1147 title.lastIndexOf(
'/') -1);
1149 title = eatBraces(title,
"[",
"]");
1150 title = eatBraces(title,
"(",
")");
1151 title = eatBraces(title,
"{",
"}");
1152 return title.trimmed();
1154 else if (position == 2 || position == 3)
1155 return QString(
"0");
1161 const QString &hash,
const QString &trailer,
const QString &coverfile,
1162 const QString &screenshot,
const QString &banner,
const QString &fanart,
1163 const QString &title,
const QString &sortTitle,
1164 const QString &subtitle,
const QString &sortSubtitle,
const QString &tagline,
1165 int year,
const QDate &releasedate,
const QString &inetref,
int collectionref,
1166 const QString &homepage,
const QString &director,
const QString &studio,
1167 const QString &plot,
float userrating,
const QString &
rating,
1168 int length,
int playcount,
int season,
int episode,
const QDate &insertdate,
1170 int childID,
bool browse,
bool watched,
1171 const QString &playcommand,
const QString &category,
1175 const QString &host,
bool processed,
1178 m_imp =
new VideoMetadataImp(filename, sortFilename, hash, trailer, coverfile,
1179 screenshot, banner, fanart, title, sortTitle, subtitle,
1180 sortSubtitle, tagline, year, releasedate, inetref,
1181 collectionref, homepage, director, studio, plot, userrating,
rating,
1182 length, playcount, season, episode, insertdate,
id, showlevel, categoryID,
1183 childID, browse, watched, playcommand, category, genres, countries,
1184 cast, host, processed, contenttype);
1225 metadataMap[
"description"] =
GetPlot();
1231 metadataMap[
"playcount"] = QString::number(
GetPlayCount());
1243 metadataMap[
"s##e##"] = metadataMap[
"s00e00"] = QString(
"s%1e%2")
1246 metadataMap[
"##x##"] = metadataMap[
"00x00"] = QString(
"%1x%2")
1252 metadataMap[
"s##e##"] = metadataMap[
"##x##"] = QString();
1253 metadataMap[
"s00e00"] = metadataMap[
"00x00"] = QString();
1254 metadataMap[
"season"] = metadataMap[
"episode"] = QString();
1263 metadataMap[
"child_id"] = QString::number(
GetChildID());
1274 stateMap[
"userratingstate"] =
1287 metadataMap[
"coverfile"] =
"";
1288 metadataMap[
"screenshotfile"] =
"";
1289 metadataMap[
"bannerfile"] =
"";
1290 metadataMap[
"fanartfile"] =
"";
1291 metadataMap[
"filename"] =
"";
1292 metadataMap[
"sortfilename"] =
"";
1293 metadataMap[
"title"] =
"";
1294 metadataMap[
"sorttitle"] =
"";
1295 metadataMap[
"subtitle"] =
"";
1296 metadataMap[
"sortsubtitle"] =
"";
1297 metadataMap[
"tagline"] =
"";
1298 metadataMap[
"director"] =
"";
1299 metadataMap[
"studio"] =
"";
1300 metadataMap[
"description"] =
"";
1301 metadataMap[
"genres"] =
"";
1302 metadataMap[
"countries"] =
"";
1303 metadataMap[
"cast"] =
"";
1304 metadataMap[
"rating"] =
"";
1305 metadataMap[
"length"] =
"";
1306 metadataMap[
"playcount"] =
"";
1307 metadataMap[
"year"] =
"";
1308 metadataMap[
"releasedate"] =
"";
1309 metadataMap[
"userrating"] =
"";
1310 metadataMap[
"season"] =
"";
1311 metadataMap[
"episode"] =
"";
1312 metadataMap[
"s##e##"] =
"";
1313 metadataMap[
"##x##"] =
"";
1314 metadataMap[
"trailerstate"] =
"";
1315 metadataMap[
"userratingstate"] =
"";
1316 metadataMap[
"watchedstate"] =
"";
1317 metadataMap[
"videolevel"] =
"";
1318 metadataMap[
"insertdate"] =
"";
1319 metadataMap[
"inetref"] =
"";
1320 metadataMap[
"homepage"] =
"";
1321 metadataMap[
"child_id"] =
"";
1322 metadataMap[
"browseable"] =
"";
1323 metadataMap[
"watched"] =
"";
1324 metadataMap[
"category"] =
"";
1325 metadataMap[
"processed"] =
"";
1761 if (
m_imp->getID() == 0)
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
static bool DeleteFile(const QString &url)
QString GetDisplayRating(const QString &rating)
void bindValue(const QString &placeholder, const QVariant &val)
QString FileHash(QString filename)
QString GetDisplayUserRating(float userrating)
static VideoCastMap & getCastMap()
const QString VIDEO_SCREENSHOT_DEFAULT
QString GetDisplayCountries(const VideoMetadata &item)
int add(int id, int value)
QSqlQuery wrapper that fetches a DB connection from the connection pool.
QString GetDisplayGenres(const VideoMetadata &item)
MPUBLIC QString format_season_and_episode(int seasEp, int digits)
int add(const QString &name)
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
static VideoCategory & GetCategory()
bool IsDefaultCoverFile(const QString &coverfile)
QStringList GetDisplayCast(const VideoMetadata &item)
static VideoCountryMap & getCountryMap()
bool IsThisHost(const QString &addr)
is this address mapped to this host
QVariant value(int i) const
static VideoCountry & getCountry()
QString TrailerToState(const QString &trailerFile)
const QString VIDEO_PLOT_DEFAULT
def rating(profile, smoonURL, gate)
bool get(int id, QString &value)
QHash< QString, QString > InfoMap
QString GetDisplayWatched(bool watched)
const QString VIDEO_TRAILER_DEFAULT
static const uint16_t * d
bool isActive(void) const
static MSqlQueryInfo InitCon(ConnectionReuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
QString toString(const QDateTime &raw_dt, uint format)
Returns formatted string representing the time.
static VideoCast & GetCast()
QString GetDisplayYear(int year)
void remove(int id, int value)
VideoContentType ContentTypeFromString(const QString &type)
static bool Exists(const QString &url, struct stat *fileinfo)
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
#define LOG(_MASK_, _LEVEL_, _STRING_)
QString WatchedToState(bool watched)
const QString VIDEO_DIRECTOR_UNKNOWN
static VideoGenreMap & getGenreMap()
const QString VIDEO_INETREF_DEFAULT
QString GetDisplayLength(int length)
QString FindFile(const QString &filename)
static VideoGenre & getGenre()
QString ContentTypeToString(VideoContentType type)
const QString VIDEO_COVERFILE_DEFAULT
QString generate_file_url(const QString &storage_group, const QString &host, const QString &path)
VideoMetadata(const QString &filename=QString(), const QString &sortFilename=QString(), const QString &hash=QString(), const QString &trailer=QString(), const QString &coverfile=QString(), const QString &screenshot=QString(), const QString &banner=QString(), const QString &fanart=QString(), const QString &title=QString(), const QString &sortTitle=QString(), const QString &subtitle=QString(), const QString &sortSubtitle=QString(), const QString &tagline=QString(), int year=VIDEO_YEAR_DEFAULT, const QDate &releasedate=QDate(), const QString &inetref=QString(), int collectionref=0, const QString &homepage=QString(), const QString &director=QString(), const QString &studio=QString(), const QString &plot=QString(), float userrating=0.0, const QString &rating=QString(), int length=0, int playcount=0, int season=0, int episode=0, const QDate &insertdate=QDate(), int id=0, ParentalLevel::Level showlevel=ParentalLevel::plLowest, int categoryID=0, int childID=-1, bool browse=true, bool watched=false, const QString &playcommand=QString(), const QString &category=QString(), const genre_list &genres=genre_list(), const country_list &countries=country_list(), const cast_list &cast=cast_list(), const QString &host="", bool processed=false, VideoContentType contenttype=kContentUnknown)
const QString VIDEO_RATING_DEFAULT
Add year to string if not included.
QString GetDisplayProcessed(bool processed)
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
QString GetDisplayBrowse(bool browse)
static void DBError(const QString &where, const MSqlQuery &query)
const QString VIDEO_FANART_DEFAULT
bool IsMasterBackend(void)
is this the actual MBE process
bool get(int id, entry &values)
const QString VIDEO_DIRECTOR_DEFAULT
int naturalCompare(const QString &_a, const QString &_b, Qt::CaseSensitivity caseSensitivity)
QDateTime fromString(const QString &dtstr)
Converts kFilename && kISODate formats to QDateTime.
static QString GetFileHash(const QString &url)
const QString VIDEO_BANNER_DEFAULT
QString ParentalLevelToState(const ParentalLevel &level)
std::shared_ptr< MythSortHelper > getMythSortHelper(void)
Get a pointer to the MythSortHelper singleton.