@@ -24,14 +24,12 @@
24#include <QNetworkRequest>
24#include <QNetworkRequest>
25#include <QNetworkReply>
25#include <QNetworkReply>
26#include <QXmlQuery>
26#include <QXmlQuery>
27+#include <QTemporaryFile>
27#include <QBuffer>
28#include <QBuffer>
29#include <QDebug>
29#include <QDebug>
30#include <QFile>
30#include <QFile>
31#include <QStringList>
31#include <QStringList>
32#include <QByteArray>
32#include <QByteArray>
35#include <QImage>
33#include <QImage>
36#include <QUrl>
34#include <QUrl>
@@ -171,25 +169,32 @@ std::string AlbumArtProvider::get_image(const std::string &artist, const std::st
171 if(image_url.empty()) {
169 if(image_url.empty()) {
172 return DEFAULT_ALBUM_ART;
170 return DEFAULT_ALBUM_ART;
174− char tmpname[] = "/tmp/path/to/some/file/somewhere/maybe.jpg";
172+ QTemporaryFile tempFile;
175− tmpnam(tmpname);
173+ tempFile.open();
176− std::unique_ptr<char, int(*)(const char*)> deleter(tmpname, unlink);
174+ tempFile.setAutoRemove(true);
175+ QString fname = tempFile.fileName();
176+ std::string tmpname = fname.toUtf8().data();
177 if(!download_and_store(image_url, tmpname)) {
178 if(!download_and_store(image_url, tmpname)) {
178 return DEFAULT_ALBUM_ART;
179 return DEFAULT_ALBUM_ART;
180− fix_format(tmpname);
181+ fix_format(tmpname.c_str());
181− FILE *f = fopen(tmpname, "r");
182+ QFile f(fname);
182− fseek(f, 0, SEEK_END);
183+ if(!f.open(QIODevice::ReadWrite)) {
183− long s = ftell(f);
184+ return DEFAULT_ALBUM_ART;
184− fseek(f, 0, SEEK_SET);
185+ }
185− char *buf = new char[s];
186+ QByteArray arr = f.readAll();
186− fread(buf, 1, s, f);
187+ f.close();
189− // Fixme, leaks buf if throws.
190− cache.add_art(info.artist, info.album, buf, s);
189+ cache.add_art(info.artist, info.album, arr.data(), arr.size());
191− delete []buf;
190+ try {
192− return cache.get_art_file(info.artist, info.album);
191+ std::string res = cache.get_art_file(info.artist, info.album);
193+ return DEFAULT_ALBUM_ART;
197+ return DEFAULT_ALBUM_ART;
195QImage AlbumArtProvider::requestImage(const QString &id, QSize *realSize, const QSize &requestedSize) {
200QImage AlbumArtProvider::requestImage(const QString &id, QSize *realSize, const QSize &requestedSize) {