diff --git a/form.ui b/form.ui
index 0171d90..63cf7ac 100644
--- a/form.ui
+++ b/form.ui
@@ -31,6 +31,13 @@
Open FM
+
+
+ logo.pnglogo.png
+
+
+
+
@@ -45,7 +52,7 @@
-
-
-
+
130
@@ -61,14 +68,14 @@
-
-
+
-
-
-
+
...
diff --git a/mainwindow.py b/mainwindow.py
index 7f7e56b..09de222 100644
--- a/mainwindow.py
+++ b/mainwindow.py
@@ -14,85 +14,115 @@ from ui_form import Ui_MainWindow
import json
import requests
+API_URL = "https://open.fm/radio/api/v2/ofm/stations_slug.json"
+DEFAULT_VOLUME = 70
+
class MainWindow(QMainWindow):
+ """MainWindow Class."""
+
def __init__(self, parent=None):
+ """Initialize UI, audio player and handlers."""
super().__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
- self.stations_slug = self.getData()
+ self.__stations_data = self.getStationsData()
self.__player = QMediaPlayer()
self.__audio = QAudioOutput()
self.__player.setAudioOutput(self.__audio)
- self.setVolume()
- self.getGroups()
- self.ui.groupslistWidget.itemClicked.connect(self.getStations)
- self.ui.stationslistWidget.itemClicked.connect(self.playRadio)
- self.ui.toolButton.clicked.connect(self.togglePlayer)
+ self.setVolume(DEFAULT_VOLUME)
+ self.printGroups()
+ self.ui.groupsListWidget.itemClicked.connect(self.printStations)
+ self.ui.stationsListWidget.itemClicked.connect(self.playRadio)
+ self.ui.playbackToolButton.clicked.connect(self.togglePlayer)
self.ui.volumeHorizontalSlider.valueChanged.connect(self.setVolume)
self.ui.volumeToolButton.clicked.connect(self.toggleMute)
- def getGroups(self):
- for el in self.stations_slug["groups"]:
- self.ui.groupslistWidget.addItem(el["name"])
-
- def getStations(self):
- group = self.ui.groupslistWidget.selectedItems()[0].text()
- group_id = None
- for i in self.stations_slug["groups"]:
- if i["name"] == group:
- group_id = i["id"]
-
- self.ui.stationslistWidget.clear()
- for ch in self.stations_slug["channels"]:
- if ch["group_id"] == group_id:
- self.ui.stationslistWidget.addItem(ch["name"])
-
- def getData(self) -> dict:
- resp = requests.get("https://open.fm/radio/api/v2/ofm/stations_slug.json")
+ def getStationsData(self) -> dict:
+ """Get JSON data from API and convert it to dict."""
+ resp = requests.get(API_URL)
if resp.status_code not in range(200, 299 + 1):
error_box = QMessageBox.critical(
- self, "Błąd",
+ self,
+ "Błąd",
f"Błąd połączenia o kodzie: {resp.status_code}",
- QMessageBox.Cancel
+ QMessageBox.Cancel,
)
error_box.exec()
else:
return json.loads(resp.text)
- def setVolume(self, volume: int = None):
- if volume is None:
+ def printGroups(self) -> None:
+ """Print groups (categories) in groupsListWidget."""
+ self.ui.groupsListWidget.addItems(
+ [e["name"] for e in self.__stations_data["groups"]]
+ )
+
+ def printStations(self) -> None:
+ """Print stations (channels) in stationsListWidget."""
+ group = self.ui.groupsListWidget.selectedItems()[0].text()
+ group_id = None
+ for e in self.__stations_data["groups"]:
+ if e["name"] == group:
+ group_id = e["id"]
+
+ self.ui.stationsListWidget.clear()
+ self.ui.stationsListWidget.addItems(
+ [
+ e["name"]
+ for e in self.__stations_data["channels"]
+ if e["group_id"] == group_id
+ ]
+ )
+
+ def setVolume(self, volume: int = None) -> None:
+ """Set playback volume to given number or slider value."""
+ if not volume:
volume = self.ui.volumeHorizontalSlider.value()
self.__audio.setVolume(volume / 100)
- def toggleMute(self):
+ def toggleMute(self) -> None:
+ """Toggle playback volume between 0 and DEFAULT_VOLUME."""
if self.ui.volumeHorizontalSlider.value() == 0:
- self.ui.volumeHorizontalSlider.setValue(70)
- self.ui.volumeToolButton.setIcon(QIcon.fromTheme("audio-volume-medium"))
- self.setVolume(70)
+ self.ui.volumeHorizontalSlider.setValue(DEFAULT_VOLUME)
+ self.ui.volumeToolButton.setIcon(
+ QIcon.fromTheme("audio-volume-medium")
+ )
+ self.setVolume(DEFAULT_VOLUME)
else:
self.ui.volumeHorizontalSlider.setValue(0)
- self.ui.volumeToolButton.setIcon(QIcon.fromTheme("audio-volume-muted"))
+ self.ui.volumeToolButton.setIcon(
+ QIcon.fromTheme("audio-volume-muted")
+ )
self.setVolume(0)
- def playRadio(self):
- station = self.ui.stationslistWidget.selectedItems()[0].text()
+ def playRadio(self) -> None:
+ """Play station selected by user."""
+ station = self.ui.stationsListWidget.selectedItems()[0].text()
stream_url = None
- for ch in self.stations_slug["channels"]:
- if ch["name"] == station:
- stream_url = f"http://stream.open.fm/{ch['id']}"
+ for e in self.__stations_data["channels"]:
+ if e["name"] == station:
+ stream_url = f"http://stream.open.fm/{e['id']}"
self.__player.setSource(QUrl(stream_url))
- self.ui.toolButton.setIcon(QIcon.fromTheme("media-playback-start"))
+ self.ui.playbackToolButton.setIcon(
+ QIcon.fromTheme("media-playback-start")
+ )
self.togglePlayer()
- def togglePlayer(self):
- if self.__player.playbackState() == QMediaPlayer.PlaybackState.PlayingState:
+ def togglePlayer(self) -> None:
+ """Toggle playback (play/stop)."""
+ pb_state = QMediaPlayer.PlaybackState
+ if self.__player.playbackState() == pb_state.PlayingState:
self.__player.stop()
- self.ui.toolButton.setIcon(QIcon.fromTheme("media-playback-start"))
- elif self.__player.playbackState() == QMediaPlayer.PlaybackState.StoppedState:
+ self.ui.playbackToolButton.setIcon(
+ QIcon.fromTheme("media-playback-start")
+ )
+ elif self.__player.playbackState() == pb_state.StoppedState:
self.__player.play()
- self.ui.toolButton.setIcon(QIcon.fromTheme("media-playback-stop"))
+ self.ui.playbackToolButton.setIcon(
+ QIcon.fromTheme("media-playback-stop")
+ )
else:
pass
diff --git a/openfm-qt.pyproject b/openfm-qt.pyproject
index 1d1f041..a600b7a 100644
--- a/openfm-qt.pyproject
+++ b/openfm-qt.pyproject
@@ -1,3 +1,3 @@
{
- "files": ["mainwindow.py", "form.ui"]
+ "files": ["mainwindow.py","form.ui"]
}