-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Expand file tree
/
Copy pathplayer.py
More file actions
47 lines (37 loc) · 1.45 KB
/
player.py
File metadata and controls
47 lines (37 loc) · 1.45 KB
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
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
from bandcamp.web.element import TrackElement
from bandcamp.web.page import DiscoverPage
BANDCAMP_DISCOVER_URL = "https://bandcamp.com/discover/"
class Player:
"""Play tracks from Bandcamp's Discover page."""
def __init__(self) -> None:
self._driver = self._set_up_driver()
self.page = DiscoverPage(self._driver)
self.tracklist = self.page.discover_tracklist
self._current_track = TrackElement(
self.tracklist.available_tracks[0], self._driver
)
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_tb):
"""Close the headless browser."""
self._driver.quit()
def play(self, track_number=None):
"""Play the first track, or one of the available numbered tracks."""
if track_number:
self._current_track = TrackElement(
self.tracklist.available_tracks[track_number - 1],
self._driver,
)
self._current_track.play()
def pause(self):
"""Pause the current track."""
self._current_track.pause()
def _set_up_driver(self):
"""Create a headless browser pointing to Bandcamp."""
options = Options()
options.add_argument("--headless")
browser = Firefox(options=options)
browser.get(BANDCAMP_DISCOVER_URL)
return browser