119 lines
2.8 KiB
Python
119 lines
2.8 KiB
Python
import json
|
|
from PyQt6.QtGui import QIcon, QAction
|
|
from PyQt6.QtWidgets import QApplication, QMenu, QSystemTrayIcon
|
|
from PyQt6.QtMultimedia import QAudioOutput, QMediaPlayer
|
|
from PyQt6.QtCore import QUrl
|
|
import os
|
|
path = os.path.dirname(os.path.abspath(__file__))
|
|
app = QApplication([])
|
|
app.setQuitOnLastWindowClosed(False)
|
|
# Adding an icon
|
|
icon = QIcon(path + "/radio.png")
|
|
# Adding item on the menu bar
|
|
tray = QSystemTrayIcon()
|
|
tray.setIcon(icon)
|
|
tray.setVisible(True)
|
|
# Creating the options
|
|
menu = QMenu()
|
|
# añadimos el json
|
|
f = open(path + "/radios.json", "rb")
|
|
jsonObject = json.load(f)
|
|
f.close()
|
|
|
|
|
|
# reproductor
|
|
player = QMediaPlayer()
|
|
audio_output = QAudioOutput()
|
|
player.setAudioOutput(audio_output)
|
|
audio_output.setVolume(100)
|
|
|
|
|
|
# escuchar la radio
|
|
def escuchar(url):
|
|
player.stop()
|
|
player.setSource(QUrl.fromLocalFile(url))
|
|
player.play()
|
|
menu.removeAction(quit)
|
|
menu.removeAction(para)
|
|
menu.removeAction(reanuda)
|
|
menu.addAction(pausa)
|
|
menu.addAction(para)
|
|
menu.addAction(quit)
|
|
|
|
|
|
# para ordenar las emisoras por el nombre
|
|
def sortFn(dict):
|
|
return dict['nombre']
|
|
|
|
|
|
# las categorias
|
|
for tag in sorted(jsonObject[0].keys()):
|
|
globals()['menu%s' % tag] = QMenu(tag)
|
|
menu.addMenu(globals()['menu%s' % tag])
|
|
# las opciones dentro de las catgorias
|
|
jsonObject[0][tag].sort(key=sortFn)
|
|
for i, item in enumerate(jsonObject[0][tag]):
|
|
iconPlay = QIcon(path + "/play.png")
|
|
globals()['action%s' % item["nombre"]] = QAction(
|
|
iconPlay, item["nombre"])
|
|
globals()['action%s' % item["nombre"]].triggered.connect(
|
|
lambda checked, url=item["url"]: escuchar(url)
|
|
)
|
|
globals()['menu%s' % tag].addAction(
|
|
globals()['action%s' % item["nombre"]])
|
|
|
|
|
|
# Pausar
|
|
def pausar():
|
|
player.pause()
|
|
menu.removeAction(quit)
|
|
menu.removeAction(para)
|
|
menu.removeAction(pausa)
|
|
menu.addAction(reanuda)
|
|
menu.addAction(para)
|
|
menu.addAction(quit)
|
|
|
|
|
|
iconPausar = QIcon(path + "/pause.png")
|
|
pausa = QAction(iconPausar, "Pausar")
|
|
pausa.triggered.connect(lambda: pausar())
|
|
|
|
|
|
# Reaunudar
|
|
def reanudar():
|
|
player.play()
|
|
menu.removeAction(quit)
|
|
menu.removeAction(para)
|
|
menu.removeAction(reanuda)
|
|
menu.addAction(pausa)
|
|
menu.addAction(para)
|
|
menu.addAction(quit)
|
|
|
|
|
|
iconReanudar = QIcon(path + "/resume.png")
|
|
reanuda = QAction(iconReanudar, "Reanudar")
|
|
reanuda.triggered.connect(lambda: reanudar())
|
|
|
|
|
|
# Parar
|
|
def parar():
|
|
menu.removeAction(reanuda)
|
|
menu.removeAction(pausa)
|
|
menu.removeAction(para)
|
|
player.stop()
|
|
|
|
|
|
iconParar = QIcon(path + "/stop.png")
|
|
para = QAction(iconParar, "Parar")
|
|
para.triggered.connect(lambda: parar())
|
|
|
|
|
|
# To quit the app
|
|
iconExit = QIcon(path + "/exit.png")
|
|
quit = QAction(iconExit, "Quit")
|
|
quit.triggered.connect(app.quit)
|
|
menu.addAction(quit)
|
|
# Adding options to the System Tray
|
|
tray.setContextMenu(menu)
|
|
app.exec()
|