Files
pyRadioTray/pyradiotray.py
2023-08-02 12:31:49 +02:00

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()