Simplify generating queries in lyrics providers

This commit is contained in:
Jonas Kvinge 2019-06-23 16:45:00 +02:00
parent 057482a3e5
commit aeb36e8665
3 changed files with 17 additions and 31 deletions

View File

@ -55,26 +55,15 @@ AuddLyricsProvider::AuddLyricsProvider(QObject *parent) : LyricsProvider("AudD",
bool AuddLyricsProvider::StartSearch(const QString &artist, const QString &album, const QString &title, quint64 id) { bool AuddLyricsProvider::StartSearch(const QString &artist, const QString &album, const QString &title, quint64 id) {
QString search(artist + " " + title); const ParamList params = ParamList() << Param("api_token", QByteArray::fromBase64(kAPITokenB64))
<< Param("q", QString(artist + " " + title));
typedef QPair<QString, QString> Arg;
typedef QList<Arg> ArgList;
typedef QPair<QByteArray, QByteArray> EncodedArg;
typedef QList<EncodedArg> EncodedArgList;
ArgList args = ArgList();
args.append(Arg("api_token", QByteArray::fromBase64(kAPITokenB64)));
args.append(Arg("q", search));
QUrlQuery url_query; QUrlQuery url_query;
QUrl url(kUrlSearch); for (const Param &param : params) {
url_query.addQueryItem(QUrl::toPercentEncoding(param.first), QUrl::toPercentEncoding(param.second));
for (const Arg &arg : args) {
EncodedArg encoded_arg(QUrl::toPercentEncoding(arg.first), QUrl::toPercentEncoding(arg.second));
url_query.addQueryItem(encoded_arg.first, encoded_arg.second);
} }
QUrl url(kUrlSearch);
url.setQuery(url_query); url.setQuery(url_query);
QNetworkReply *reply = network_->get(QNetworkRequest(url)); QNetworkReply *reply = network_->get(QNetworkRequest(url));
NewClosure(reply, SIGNAL(finished()), this, SLOT(HandleSearchReply(QNetworkReply*, quint64, QString, QString)), reply, id, artist, title); NewClosure(reply, SIGNAL(finished()), this, SLOT(HandleSearchReply(QNetworkReply*, quint64, QString, QString)), reply, id, artist, title);

View File

@ -47,27 +47,21 @@ ChartLyricsProvider::ChartLyricsProvider(QObject *parent) : LyricsProvider("Char
bool ChartLyricsProvider::StartSearch(const QString &artist, const QString &album, const QString &title, quint64 id) { bool ChartLyricsProvider::StartSearch(const QString &artist, const QString &album, const QString &title, quint64 id) {
typedef QPair<QString, QString> Param; const ParamList params = ParamList() << Param("artist", artist)
typedef QList<Param> ParamList; << Param("song", title);
typedef QPair<QByteArray, QByteArray> EncodedParam;
typedef QList<EncodedParam> EncodedParamList;
ParamList params = ParamList() << Param("artist", artist)
<< Param("song", title);
QUrlQuery url_query; QUrlQuery url_query;
QUrl url(kUrlSearch);
for (const Param &param : params) { for (const Param &param : params) {
EncodedParam encoded_param(QUrl::toPercentEncoding(param.first), QUrl::toPercentEncoding(param.second)); url_query.addQueryItem(QUrl::toPercentEncoding(param.first), QUrl::toPercentEncoding(param.second));
url_query.addQueryItem(encoded_param.first, encoded_param.second);
} }
QUrl url(kUrlSearch);
url.setQuery(url_query); url.setQuery(url_query);
QNetworkReply *reply = network_->get(QNetworkRequest(url)); QNetworkReply *reply = network_->get(QNetworkRequest(url));
NewClosure(reply, SIGNAL(finished()), this, SLOT(HandleSearchReply(QNetworkReply*, quint64, QString, QString)), reply, id, artist, title); NewClosure(reply, SIGNAL(finished()), this, SLOT(HandleSearchReply(QNetworkReply*, quint64, QString, QString)), reply, id, artist, title);
//qLog(Debug) << "ChartLyrics: Sending request for" << url;
return true; return true;
} }

View File

@ -33,18 +33,21 @@ struct LyricsSearchResult;
class LyricsProvider : public QObject { class LyricsProvider : public QObject {
Q_OBJECT Q_OBJECT
public: public:
explicit LyricsProvider(const QString &name, QObject *parent); explicit LyricsProvider(const QString &name, QObject *parent);
typedef QPair<QString, QString> Param;
typedef QList<Param> ParamList;
QString name() const { return name_; } QString name() const { return name_; }
virtual bool StartSearch(const QString &artist, const QString &album, const QString &title, quint64 id) = 0; virtual bool StartSearch(const QString &artist, const QString &album, const QString &title, quint64 id) = 0;
virtual void CancelSearch(quint64 id) {} virtual void CancelSearch(quint64 id) {}
signals: signals:
void SearchFinished(quint64 id, const QList<LyricsSearchResult>& results); void SearchFinished(quint64 id, const QList<LyricsSearchResult>& results);
private: private:
QString name_; QString name_;
}; };