#include <QDebug>
#include <QDir>
#include <QFileInfo>
+#include <mpegfile.h>
+#include <id3v2tag.h>
+#include <mpeg/id3v2/frames/attachedpictureframe.h>
CoverFinder::CoverFinder(QObject *parent) :
QObject(parent)
_defaultCover = QImage(":/images/defaultcover.png");
SUFFIXES << "png" << "jpg" << "jpeg" << "bmp" << "gif";
NAMES << "cover" << "folder" << "album";
- DIRS << "cover" << "folder" << ".cover" << ".folder" << ".mediaartlocal";
+ DIRS << "cover" << "folder" << ".cover" << ".folder";
}
bool CoverFinder::find(QString path) {
QImage &CoverFinder::defaultCover() {
return _defaultCover;
}
+
+bool CoverFinder::extract(QString file) {
+ QFileInfo info(file);
+ QString suffix = info.suffix().toLower();
+ TagLib::ID3v2::Tag *tag = NULL;
+ if (suffix == "mp3") {
+ TagLib::MPEG::File f(QFile::encodeName(file).data());
+ tag = f.ID3v2Tag();
+ if (f.isValid() && tag != NULL) {
+ TagLib::ID3v2::FrameList l = tag->frameList("APIC");
+ if (l.isEmpty())
+ return false;
+ TagLib::ID3v2::AttachedPictureFrame *pic = static_cast<TagLib::ID3v2::AttachedPictureFrame *>(l.front());
+ QImage img;
+ img.loadFromData((const uchar *) pic->picture().data(), pic->picture().size());
+ emit found(img);
+ return true;
+ }
+ }
+ return false;
+}
public slots:
bool find(QString path);
+ bool extract(QString file);
QImage &defaultCover();
private:
ui->seekSlider->setMinimum(0);
ui->seekSlider->setMaximum(track.metadata().length());
_tick(0, track.metadata().length());
- _coverfinder->find(QFileInfo(track.source()).absolutePath());
+ if (!_coverfinder->extract(QFileInfo(track.source()).absoluteFilePath())) {
+ _coverfinder->find(QFileInfo(track.source()).absolutePath());
+ }
}
void PlayerForm::_tick(int done, int all) {
}
void PlayerForm::_display_cover(QImage image) {
- _cover->setPixmap(QPixmap::fromImage(image));
+ QPixmap p = QPixmap::fromImage(image);
+ _cover->setPixmap(p);
}
void PlayerForm::_c_add_to_favorites() {
d->textEncoding = String::Type(data[0]);
- int pos = 1, poss = 1;
+ int pos = 1;
d->mimeType = readStringField(data, String::Latin1, &pos);
/* Now we need at least two more bytes available */
}
d->type = (TagLib::ID3v2::AttachedPictureFrame::Type)data[pos++];
-
- poss = pos;
d->description = readStringField(data, d->textEncoding, &pos);
-
- d->data = data.mid(poss);
+ d->data = data.mid(pos);
}
ByteVector AttachedPictureFrame::renderFields() const