diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 498b2c4e..629f1fd7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -188,6 +188,7 @@ set(SOURCES lyrics/songlyricscomlyricsprovider.cpp lyrics/azlyricscomlyricsprovider.cpp lyrics/elyricsnetlyricsprovider.cpp + lyrics/letraslyricsprovider.cpp providers/musixmatchprovider.cpp @@ -430,6 +431,7 @@ set(HEADERS lyrics/songlyricscomlyricsprovider.h lyrics/azlyricscomlyricsprovider.h lyrics/elyricsnetlyricsprovider.h + lyrics/letraslyricsprovider.h settings/settingsdialog.h settings/settingspage.h diff --git a/src/core/application.cpp b/src/core/application.cpp index eb31e4c9..22802e41 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -67,6 +67,7 @@ #include "lyrics/songlyricscomlyricsprovider.h" #include "lyrics/azlyricscomlyricsprovider.h" #include "lyrics/elyricsnetlyricsprovider.h" +#include "lyrics/letraslyricsprovider.h" #include "scrobbler/audioscrobbler.h" #include "scrobbler/lastfmscrobbler.h" @@ -168,6 +169,7 @@ class ApplicationImpl { lyrics_providers->AddProvider(new SongLyricsComLyricsProvider(app->network())); lyrics_providers->AddProvider(new AzLyricsComLyricsProvider(app->network())); lyrics_providers->AddProvider(new ElyricsNetLyricsProvider(app->network())); + lyrics_providers->AddProvider(new LetrasLyricsProvider(app->network())); lyrics_providers->ReloadSettings(); return lyrics_providers; }), diff --git a/src/lyrics/htmllyricsprovider.cpp b/src/lyrics/htmllyricsprovider.cpp index 5695eb86..49764ccd 100644 --- a/src/lyrics/htmllyricsprovider.cpp +++ b/src/lyrics/htmllyricsprovider.cpp @@ -163,6 +163,7 @@ QString HtmlLyricsProvider::ParseLyricsFromHTML(const QString &content, const QR .remove(QRegularExpression("")) .remove(QRegularExpression("
]*>×
")) .replace(QRegularExpression("]*>"), "\n") + .replace(QRegularExpression("

"), "\n\n") .remove(QRegularExpression("<[^>]*>")) .trimmed()); } diff --git a/src/lyrics/letraslyricsprovider.cpp b/src/lyrics/letraslyricsprovider.cpp new file mode 100644 index 00000000..7b0b5a67 --- /dev/null +++ b/src/lyrics/letraslyricsprovider.cpp @@ -0,0 +1,58 @@ +/* + * Strawberry Music Player + * Copyright 2024, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#include +#include +#include +#include +#include +#include + +#include "core/shared_ptr.h" +#include "core/networkaccessmanager.h" +#include "core/logging.h" +#include "utilities/transliterate.h" +#include "lyricssearchrequest.h" +#include "letraslyricsprovider.h" + +const char LetrasLyricsProvider::kUrl[] = "https://www.letras.mus.br/winamp.php"; +const char LetrasLyricsProvider::kStartTag[] = "]*>"; +const char LetrasLyricsProvider::kEndTag[] = "<\\/div>"; +const char LetrasLyricsProvider::kLyricsStart[] = "
"; + +LetrasLyricsProvider::LetrasLyricsProvider(SharedPtr network, QObject *parent) + : HtmlLyricsProvider("letras.mus.br", true, kStartTag, kEndTag, kLyricsStart, false, network, parent) {} + +QUrl LetrasLyricsProvider::Url(const LyricsSearchRequest &request) { + + return QUrl(QString(kUrl) + QStringLiteral("?musica=") + StringFixup(request.artist) + "&artista=" + StringFixup(request.title)); + +} + +QString LetrasLyricsProvider::StringFixup(const QString &text) { + + return QUrl::toPercentEncoding(Utilities::Transliterate(text) + .replace(QRegularExpression("[^\\w0-9_,&\\-\\(\\) ]"), "_") + .replace(QRegularExpression(" {2,}"), " ") + .simplified() + .replace(' ', '-') + .toLower() + ); + +} diff --git a/src/lyrics/letraslyricsprovider.h b/src/lyrics/letraslyricsprovider.h new file mode 100644 index 00000000..b5e08fda --- /dev/null +++ b/src/lyrics/letraslyricsprovider.h @@ -0,0 +1,54 @@ +/* + * Strawberry Music Player + * Copyright 2024, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#ifndef LETRASLYRICSPROVIDER_H +#define LETRASLYRICSPROVIDER_H + +#include +#include +#include +#include +#include +#include + +#include "core/shared_ptr.h" +#include "core/networkaccessmanager.h" +#include "htmllyricsprovider.h" +#include "lyricssearchrequest.h" + +class LetrasLyricsProvider : public HtmlLyricsProvider { + Q_OBJECT + + public: + explicit LetrasLyricsProvider(SharedPtr network, QObject *parent = nullptr); + + protected: + QUrl Url(const LyricsSearchRequest &request) override; + + private: + QString StringFixup(const QString &text); + + private: + static const char kUrl[]; + static const char kStartTag[]; + static const char kEndTag[]; + static const char kLyricsStart[]; +}; + +#endif // LETRASLYRICSPROVIDER_H