Lyrics: Match both album artist and artist in lyrics results

This commit is contained in:
Jonas Kvinge
2023-03-06 21:42:59 +01:00
parent 7fafa8adfb
commit a42039d6e5
24 changed files with 348 additions and 298 deletions

View File

@@ -29,6 +29,8 @@
#include "core/song.h"
#include "lyricsfetcher.h"
#include "lyricsfetchersearch.h"
#include "lyricssearchrequest.h"
#include "lyricssearchresult.h"
using namespace std::chrono_literals;
@@ -45,24 +47,28 @@ LyricsFetcher::LyricsFetcher(LyricsProviders *lyrics_providers, QObject *parent)
}
quint64 LyricsFetcher::Search(const QString &artist, const QString &album, const QString &title) {
quint64 LyricsFetcher::Search(const QString &effective_albumartist, const QString &artist, const QString &album, const QString &title) {
LyricsSearchRequest request;
request.artist = artist;
request.album = album;
request.album.remove(Song::kAlbumRemoveMisc);
request.title = title;
request.title.remove(Song::kTitleRemoveMisc);
LyricsSearchRequest search_request;
search_request.albumartist = effective_albumartist;
search_request.artist = artist;
search_request.album = album;
search_request.album.remove(Song::kAlbumRemoveMisc);
search_request.title = title;
search_request.title.remove(Song::kTitleRemoveMisc);
Request request;
request.id = ++next_id_;
request.search_request = search_request;
AddRequest(request);
return request.id;
}
void LyricsFetcher::AddRequest(const LyricsSearchRequest &req) {
void LyricsFetcher::AddRequest(const Request &request) {
queued_requests_.enqueue(req);
queued_requests_.enqueue(request);
if (!request_starter_->isActive()) request_starter_->start();
@@ -92,9 +98,9 @@ void LyricsFetcher::StartRequests() {
while (!queued_requests_.isEmpty() && active_requests_.size() < kMaxConcurrentRequests) {
LyricsSearchRequest request = queued_requests_.dequeue();
Request request = queued_requests_.dequeue();
LyricsFetcherSearch *search = new LyricsFetcherSearch(request, this);
LyricsFetcherSearch *search = new LyricsFetcherSearch(request.id, request.search_request, this);
active_requests_.insert(request.id, search);
QObject::connect(search, &LyricsFetcherSearch::SearchFinished, this, &LyricsFetcher::SingleSearchFinished);