-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbrowser.cpp
108 lines (87 loc) · 2.98 KB
/
browser.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "browser.h"
#include "cookiejar.h"
Browser::Browser() {
currentTrack = NULL;
//Flash support
QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true);
m_view = new QWebView(this);
QNetworkAccessManager *nam = new QNetworkAccessManager();
CookieJar *cookies = new CookieJar();
nam->setCookieJar(cookies);
m_view->page()->setNetworkAccessManager(nam);
m_view->load(QUrl("https://music.google.com"));
this->setGeometry(0,0,1280,1024);
m_view->setGeometry(this->geometry());
connect(m_view, SIGNAL(titleChanged(QString)), this, SLOT(titleHasChanged(QString)));
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
}
QWebElement Browser::getElement(QString what) const {
QWebFrame *frame = m_view->page()->mainFrame();
return frame->findFirstElement(what);
}
QString Browser::getArtist() const {
QWebElement element = getElement(".player-artist");
return element.toPlainText();
}
QString Browser::getTitle() const {
QWebElement element = getElement(".playerSongTitle");
return element.toPlainText();
}
QString Browser::getAlbum() const {
QWebElement element = getElement(".player-album");
return element.toPlainText();
}
int Browser::getTrackCurrentTime() const {
QWebElement element = getElement("#slider");
return element.attribute("aria-valuenow").toInt();
}
int Browser::getTrackTotalTime() const {
QWebElement element = getElement("#slider");
return element.attribute("aria-valuemax").toInt();
}
MyTrack *Browser::getTrack() {
MyTrack *track;
QString artist = getArtist();
if(artist.isEmpty()) {
track = NULL;
} else {
track = new MyTrack(artist, getTitle(), getAlbum());
track->setPlayedTime(getTrackCurrentTime());
track->setTotalTime(getTrackTotalTime());
}
return track;
}
void Browser::titleHasChanged(QString title) {
}
void Browser::update() {
QWebElementCollection collection = m_view->page()->mainFrame()->findAllElements(".flat-button");
//Determine if music is even playing (or paused)
if(collection.at(3).hasAttribute("disabled")==true) {
return;
}
//No track is playing. If we are at this point this should not be NULL
// but you never know
MyTrack *trackPlaying = getTrack();
if(trackPlaying==NULL) {
return;
}
if(!trackPlaying->equals(currentTrack)) {
currentTrack = trackPlaying;
}
currentTrack->setPlayedTime(trackPlaying->getPlayedTime());
if(!currentTrack->isScrobbled()) {
//If we have played over half the song, scrobble
if(currentTrack->getPlayedTime() >= currentTrack->getTotalTime()/2) {
currentTrack->setScrobbled(true);
currentTrack->scrobble();
}
}
}
void Browser::resizeEvent(QResizeEvent* event)
{
QMainWindow::resizeEvent(event);
QRect r = this->geometry();
m_view->setGeometry(0,0,r.width(),r.height());
}