MythTV  master
metadataimagehelper.cpp
Go to the documentation of this file.
1 #include "metadataimagehelper.h"
2 
3 #include <QUrl>
4 
5 #include "libmythbase/mythdb.h"
7 #include "libmythbase/mythdirs.h"
9 
10 ArtworkMap GetArtwork(const QString& inetref,
11  uint season,
12  bool strict)
13 {
14  ArtworkMap map;
15 
16  if (inetref.isEmpty())
17  return map;
18 
20 
21  QString querystring = "SELECT host, coverart, fanart, banner "
22  "FROM recordedartwork WHERE inetref = :INETREF ";
23 
24  if (strict)
25  querystring += "AND season = :SEASON;";
26  else
27  {
28  if (season > 0)
29  {
30  querystring += "ORDER BY season = :SEASON DESC, season DESC;";
31  }
32  else
33  {
34  querystring += "ORDER BY season DESC;";
35  }
36  }
37 
38  query.prepare(querystring);
39 
40  query.bindValue(":INETREF", inetref);
41  if (strict || season > 0)
42  query.bindValue(":SEASON", season);
43 
44  if (!query.exec())
45  {
46  MythDB::DBError("GetArtwork SELECT", query);
47  return map;
48  }
49 
50  if (query.next())
51  {
52  QString host = query.value(0).toString();
53  QString coverart = query.value(1).toString();
54  QString fanart = query.value(2).toString();
55  QString banner = query.value(3).toString();
56 
57  if (!coverart.isEmpty())
58  {
59  ArtworkInfo coverartinfo;
60  coverartinfo.url = StorageGroup::generate_file_url("Coverart", host, coverart);
61  map.insert(kArtworkCoverart, coverartinfo);
62  }
63 
64  if (!fanart.isEmpty())
65  {
66  ArtworkInfo fanartinfo;
67  fanartinfo.url = StorageGroup::generate_file_url("Fanart", host, fanart);
68  map.insert(kArtworkFanart, fanartinfo);
69  }
70 
71  if (!banner.isEmpty())
72  {
73  ArtworkInfo bannerinfo;
74  bannerinfo.url = StorageGroup::generate_file_url("Banners", host, banner);
75  map.insert(kArtworkBanner, bannerinfo);
76  }
77  }
78 
79  return map;
80 }
81 
82 bool SetArtwork(const QString &inetref,
83  uint season,
84  const QString &host,
85  const QString &coverart,
86  const QString &fanart,
87  const QString &banner)
88 {
89  bool ret = false;
90  ArtworkMap map;
91 
92  if (!coverart.isEmpty())
93  {
94  ArtworkInfo coverartinfo;
95  coverartinfo.url = StorageGroup::generate_file_url("Coverart", host, coverart);
96  map.insert(kArtworkCoverart, coverartinfo);
97  }
98 
99  if (!fanart.isEmpty())
100  {
101  ArtworkInfo fanartinfo;
102  fanartinfo.url = StorageGroup::generate_file_url("Fanart", host, fanart);
103  map.insert(kArtworkFanart, fanartinfo);
104  }
105 
106  if (!banner.isEmpty())
107  {
108  ArtworkInfo bannerinfo;
109  bannerinfo.url = StorageGroup::generate_file_url("Banners", host, banner);
110  map.insert(kArtworkBanner, bannerinfo);
111  }
112 
113  ret = SetArtwork(inetref, season, host, map);
114 
115  return ret;
116 }
117 
118 bool SetArtwork(const QString &inetref,
119  uint season,
120  const QString &host,
121  const ArtworkMap& map)
122 {
123  if (inetref.isEmpty())
124  return false;
125 
126  QString coverart;
127  QString fanart;
128  QString banner;
129 
130  QUrl coverurl(map.value(kArtworkCoverart).url);
131  if (!coverurl.path().isEmpty())
132  {
133  coverart = coverurl.path();
134  coverart = coverart.remove(0,1);
135  }
136 
137  QUrl fanarturl(map.value(kArtworkFanart).url);
138  if (!fanarturl.path().isEmpty())
139  {
140  fanart = fanarturl.path();
141  fanart = fanart.remove(0,1);
142  }
143 
144  QUrl bannerurl(map.value(kArtworkBanner).url);
145  if (!bannerurl.path().isEmpty())
146  {
147  banner = bannerurl.path();
148  banner = banner.remove(0,1);
149  }
150 
151  // Have to delete the old row for this item
152 
153  MSqlQuery prequery(MSqlQuery::InitCon());
154  prequery.prepare("DELETE FROM recordedartwork WHERE "
155  "inetref = :INETREF AND season = :SEASON;");
156 
157  prequery.bindValue(":INETREF", inetref);
158  prequery.bindValue(":SEASON", season);
159 
160  if (!prequery.exec())
161  {
162  MythDB::DBError("SetArtwork DELETE FROM", prequery);
163  return false;
164  }
165 
166  // Now we can insert the new
167  MSqlQuery query(MSqlQuery::InitCon());
168  query.prepare("INSERT INTO recordedartwork(inetref,"
169  "season,host,coverart,fanart,banner) VALUES( "
170  ":INETREF, :SEASON, :HOST, :COVERART, "
171  ":FANART, :BANNER);");
172 
173  query.bindValue(":INETREF", inetref);
174  query.bindValue(":SEASON", season);
175  query.bindValue(":HOST", host);
176  query.bindValueNoNull(":COVERART", coverart);
177  query.bindValueNoNull(":FANART", fanart);
178  query.bindValueNoNull(":BANNER", banner);
179 
180  if (!query.exec())
181  {
182  MythDB::DBError("SetArtwork INSERT INTO", query);
183  return false;
184  }
185 
186  return true;
187 }
StorageGroup::generate_file_url
static QString generate_file_url(const QString &storage_group, const QString &host, const QString &path)
Definition: storagegroup.cpp:895
MSqlQuery::next
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
Definition: mythdbcon.cpp:812
MSqlQuery
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:127
MSqlQuery::bindValueNoNull
void bindValueNoNull(const QString &placeholder, const QVariant &val)
Add a single binding, taking care not to set a NULL value.
Definition: mythdbcon.cpp:902
metadataimagehelper.h
mythdb.h
MSqlQuery::value
QVariant value(int i) const
Definition: mythdbcon.h:204
mythdbcon.h
GetArtwork
ArtworkMap GetArtwork(const QString &inetref, uint season, bool strict)
Definition: metadataimagehelper.cpp:10
MSqlQuery::exec
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:618
mythdirs.h
kArtworkCoverart
@ kArtworkCoverart
Definition: metadataimagehelper.h:11
kArtworkFanart
@ kArtworkFanart
Definition: metadataimagehelper.h:12
ArtworkInfo
Definition: metadataimagehelper.h:21
SetArtwork
bool SetArtwork(const QString &inetref, uint season, const QString &host, const QString &coverart, const QString &fanart, const QString &banner)
Definition: metadataimagehelper.cpp:82
MSqlQuery::InitCon
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:550
kArtworkBanner
@ kArtworkBanner
Definition: metadataimagehelper.h:13
MythDB::DBError
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:226
storagegroup.h
MSqlQuery::bindValue
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
Definition: mythdbcon.cpp:888
ArtworkMap
QMultiMap< VideoArtworkType, ArtworkInfo > ArtworkMap
Definition: metadataimagehelper.h:31
uint
unsigned int uint
Definition: freesurround.h:24
ArtworkInfo::url
QString url
Definition: metadataimagehelper.h:25
MSqlQuery::prepare
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:837