15
15
along with Clementine. If not, see <http://www.gnu.org/licenses/>.
18
#include "fingerprinter.h"
18
#include "tagfetcher.h"
20
#include "acoustidclient.h"
21
#include "chromaprinter.h"
19
22
#include "musicbrainzclient.h"
20
#include "musicdnsclient.h"
21
#include "tagfetcher.h"
23
#include "core/timeconstants.h"
24
26
#include <QFutureWatcher>
25
28
#include <QtConcurrentMap>
27
30
TagFetcher::TagFetcher(QObject* parent)
29
32
fingerprint_watcher_(NULL),
30
musicdns_client_(new MusicDnsClient(this)),
33
acoustid_client_(new AcoustidClient(this)),
31
34
musicbrainz_client_(new MusicBrainzClient(this))
33
connect(musicdns_client_, SIGNAL(Finished(int,QString)), SLOT(PuidFound(int,QString)));
36
connect(acoustid_client_, SIGNAL(Finished(int,QString)), SLOT(PuidFound(int,QString)));
34
37
connect(musicbrainz_client_, SIGNAL(Finished(int,MusicBrainzClient::ResultList)), SLOT(TagsFetched(int,MusicBrainzClient::ResultList)));
37
40
QString TagFetcher::GetFingerprint(const Song& song) {
38
return Fingerprinter(song.filename()).CreateFingerprint();
41
return Chromaprinter(song.url().toLocalFile()).CreateFingerprint();
41
44
void TagFetcher::StartFetch(const SongList& songs) {
83
86
emit Progress(song, tr("Identifying song"));
84
musicdns_client_->Start(index, fingerprint, song.length_nanosec() / kNsecPerMsec);
87
acoustid_client_->Start(index, fingerprint, song.length_nanosec() / kNsecPerMsec);
87
90
void TagFetcher::PuidFound(int index, const QString& puid) {
113
116
song.Init(result.title_, result.artist_, result.album_,
114
117
result.duration_msec_ * kNsecPerMsec);
115
118
song.set_track(result.track_);
119
song.set_year(result.year_);
116
120
songs_guessed << song;