Skip to content

Commit 441b1a0

Browse files
committed
Add Genius to Find on Web Menu.
1 parent 2aa18c7 commit 441b1a0

4 files changed

Lines changed: 85 additions & 0 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1655,6 +1655,7 @@ add_library(
16551655
src/widget/findonwebmenuservices/findonwebmenuwikipedia.cpp
16561656
src/widget/findonwebmenuservices/findonwebmenuyoutubemusic.cpp
16571657
src/widget/findonwebmenuservices/findonwebmenuspotify.cpp
1658+
src/widget/findonwebmenuservices/findonwebmenugenius.cpp
16581659
src/widget/hexspinbox.cpp
16591660
src/widget/hotcuedrag.cpp
16601661
src/widget/paintable.cpp

src/widget/findonwebmenufactory.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <QMenu>
44

55
#include "findonwebmenuservices/findonwebmenudiscogs.h"
6+
#include "findonwebmenuservices/findonwebmenugenius.h"
67
#include "findonwebmenuservices/findonwebmenulastfm.h"
78
#include "findonwebmenuservices/findonwebmenusoundcloud.h"
89
#include "findonwebmenuservices/findonwebmenuspotify.h"
@@ -23,6 +24,7 @@ void createFindOnWebSubmenus(QMenu* pFindOnWebMenu,
2324
make_parented<FindOnWebMenuWikipedia>(pFindOnWebMenu, pFindOnWebLast, track);
2425
make_parented<FindOnWebMenuYouTubeMusic>(pFindOnWebMenu, pFindOnWebLast, track);
2526
make_parented<FindOnWebMenuSpotify>(pFindOnWebMenu, pFindOnWebLast, track);
27+
make_parented<FindOnWebMenuGenius>(pFindOnWebMenu, pFindOnWebLast, track);
2628
}
2729

2830
} // namespace library
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#include "findonwebmenugenius.h"
2+
3+
#include <QMenu>
4+
#include <QUrlQuery>
5+
6+
#include "moc_findonwebmenugenius.cpp"
7+
#include "track/track.h"
8+
#include "util/parented_ptr.h"
9+
10+
namespace {
11+
const QString kServiceTitle = QStringLiteral("Genius");
12+
const QString kSearchUrl = QStringLiteral("https://genius.com/search");
13+
14+
const QUrl composeGeniusUrl(const QString& query) {
15+
QUrlQuery urlQuery;
16+
urlQuery.addQueryItem("q", query);
17+
QUrl url(kSearchUrl);
18+
url.setQuery(urlQuery);
19+
return url;
20+
}
21+
} // namespace
22+
23+
FindOnWebMenuGenius::FindOnWebMenuGenius(
24+
QMenu* pFindOnWebMenu, FindOnWebLast* pFindOnWebLast, const Track& track)
25+
: WFindOnWebMenu(pFindOnWebMenu, pFindOnWebLast) {
26+
const QString artist = track.getArtist();
27+
const QString trackTitle = track.getTitle();
28+
const QString album = track.getAlbum();
29+
setTitle(kServiceTitle);
30+
pFindOnWebMenu->addMenu(this);
31+
addSeparator();
32+
if (!artist.isEmpty()) {
33+
if (!trackTitle.isEmpty()) {
34+
const QUrl GeniusUrlArtistWithTrackTitle =
35+
composeGeniusUrl(artist + " " + trackTitle);
36+
addActionToServiceMenu(
37+
kServiceTitle + QStringLiteral(",Artist,Title"),
38+
tr("Artist + Title"),
39+
GeniusUrlArtistWithTrackTitle);
40+
}
41+
if (!album.isEmpty()) {
42+
const QUrl GeniusUrlArtistWithAlbum =
43+
composeGeniusUrl(artist + " " + album);
44+
addActionToServiceMenu(
45+
kServiceTitle + QStringLiteral(",Artist,Album"),
46+
tr("Artist + Album"),
47+
GeniusUrlArtistWithAlbum);
48+
}
49+
const QUrl GeniusUrlArtist = composeGeniusUrl(artist);
50+
addActionToServiceMenu(
51+
kServiceTitle + QStringLiteral(",Artist"),
52+
tr("Artist"),
53+
GeniusUrlArtist);
54+
}
55+
if (!album.isEmpty() && artist.isEmpty()) {
56+
const QUrl GeniusUrlAlbum = composeGeniusUrl(album);
57+
addActionToServiceMenu(
58+
kServiceTitle + QStringLiteral(",Album"),
59+
tr("Album"),
60+
GeniusUrlAlbum);
61+
}
62+
if (!trackTitle.isEmpty()) {
63+
const QUrl GeniusUrlTrackTitle = composeGeniusUrl(trackTitle);
64+
addActionToServiceMenu(
65+
kServiceTitle + QStringLiteral(",Title"),
66+
tr("Title"),
67+
GeniusUrlTrackTitle);
68+
}
69+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#pragma once
2+
3+
#include "widget/wfindonwebmenu.h"
4+
5+
class QMenu;
6+
class Track;
7+
class FindOnWebLast;
8+
9+
class FindOnWebMenuGenius : public WFindOnWebMenu {
10+
Q_OBJECT
11+
public:
12+
FindOnWebMenuGenius(QMenu* pFindOnWebMenu, FindOnWebLast* pFindOnWebLast, const Track& track);
13+
};

0 commit comments

Comments
 (0)