*/
#include "tagresolver.h"
-#include <QDebug>
#include <QFile>
+#include <QFileInfo>
#include <tag.h>
#include <fileref.h>
+#include <QDebug>
using namespace SomePlayer::DataObjects;
}
void TagResolver::decode(QStringList files) {
+ emit started();
foreach (QString filename, files) {
- TagLib::FileRef file_ref(QFile::encodeName(filename).data());
+ TagLib::FileRef file_ref(QFile::encodeName(filename).data(), true, TagLib::AudioProperties::Fast);
if (!file_ref.isNull()) {
TagLib::Tag *tag = file_ref.tag();
+ int length = 0;
if (NULL != tag) {
TagLib::AudioProperties *properties = file_ref.audioProperties();
if (NULL != properties) {
- TrackMetadata meta(QString::fromStdWString(tag->title().toWString()),
- QString::fromStdWString(tag->artist().toWString()),
- QString::fromStdWString(tag->album().toWString()),
- properties->length());
- Track track(0, meta, filename);
- emit decoded(track);
+ length = properties->length();
}
+ TrackMetadata meta(QString::fromStdWString(tag->title().toWString()),
+ QString::fromStdWString(tag->artist().toWString()),
+ QString::fromStdWString(tag->album().toWString()),
+ length);
+ meta.setYear(tag->year());
+ Track track(meta, filename);
+ emit decoded(track);
}
+ } else { // workaround
+ TrackMetadata meta;
+ meta.setLength(0);
+ QFileInfo fi(filename);
+ meta.setArtist(fi.suffix().toUpper());
+ meta.setTitle(fi.baseName());
+ meta.setYear(0);
+ Track track(meta, filename);
+ emit decoded(track);
}
}
emit done();
}
+
+void TagResolver::updateTags(Track track) {
+ TagLib::FileRef file_ref(QFile::encodeName(track.source()).data());
+ if (!file_ref.isNull()) {
+ TagLib::Tag *tag = file_ref.tag();
+ if (NULL != tag) {
+ tag->setArtist(TagLib::String(track.metadata().artist().toStdWString()));
+ tag->setAlbum(TagLib::String(track.metadata().album().toStdWString()));
+ tag->setTitle(TagLib::String(track.metadata().title().toStdWString()));
+ }
+ file_ref.save();
+ }
+}
+
+Track TagResolver::decodeOne(QString filename) {
+ TagLib::FileRef file_ref(QFile::encodeName(filename).data(), true, TagLib::AudioProperties::Fast);
+ if (!file_ref.isNull()) {
+ TagLib::Tag *tag = file_ref.tag();
+ if (NULL != tag) {
+ TagLib::AudioProperties *properties = file_ref.audioProperties();
+ if (NULL != properties) {
+ TrackMetadata meta(QString::fromStdWString(tag->title().toWString()),
+ QString::fromStdWString(tag->artist().toWString()),
+ QString::fromStdWString(tag->album().toWString()),
+ properties->length());
+ meta.setYear(tag->year());
+ Track track(meta, filename);
+ return track;
+ }
+ }
+ } else { // workaround
+ TrackMetadata meta;
+ meta.setLength(0);
+ QFileInfo fi(filename);
+ meta.setArtist(fi.suffix().toUpper());
+ meta.setTitle(fi.baseName());
+ Track track(meta, filename);
+ return track;
+ }
+ return Track();
+}