WIP: Carts

This commit is contained in:
Keith Edmunds 2022-10-15 20:15:30 +01:00
parent ef17b359e2
commit a649fa8c59
5 changed files with 29 additions and 15 deletions

View File

@ -10,12 +10,14 @@ class Config(object):
BITRATE_OK_THRESHOLD = 300 BITRATE_OK_THRESHOLD = 300
CHECK_AUDACITY_AT_STARTUP = True CHECK_AUDACITY_AT_STARTUP = True
CART_DIRECTORY = "/home/kae/radio/CartTracks" CART_DIRECTORY = "/home/kae/radio/CartTracks"
CARTS_COUNT = 10
COLOUR_BITRATE_LOW = "#ffcdd2" COLOUR_BITRATE_LOW = "#ffcdd2"
COLOUR_BITRATE_MEDIUM = "#ffeb6f" COLOUR_BITRATE_MEDIUM = "#ffeb6f"
COLOUR_BITRATE_OK = "#dcedc8" COLOUR_BITRATE_OK = "#dcedc8"
COLOUR_CART_ERROR = "#dc3545" COLOUR_CART_ERROR = "#dc3545"
COLOUR_CART_PLAYING = "#248f24" COLOUR_CART_PLAYING = "#248f24"
COLOUR_CART_READY = "#ffc107" COLOUR_CART_READY = "#ffc107"
COLOUR_CART_UNCONFIGURED = "#f2f2f2"
COLOUR_CURRENT_HEADER = "#d4edda" COLOUR_CURRENT_HEADER = "#d4edda"
COLOUR_CURRENT_PLAYLIST = "#7eca8f" COLOUR_CURRENT_PLAYLIST = "#7eca8f"
COLOUR_CURRENT_TAB = "#248f24" COLOUR_CURRENT_TAB = "#248f24"

View File

@ -63,12 +63,12 @@ class Carts(Base):
def __repr__(self) -> str: def __repr__(self) -> str:
return ( return (
f"<Carts(id={self.id}, cart={self.cart}, " f"<Carts(id={self.id}, cart={self.cart_number}, "
f"name={self.name}, path={self.path}>" f"name={self.name}, path={self.path}>"
) )
def __init__(self, session: Session, cart_number: int, name: str = None, def __init__(self, session: Session, cart_number: int, name: str = None,
duration: int = None, path: str = None, duration: int = None, path: str = None,
enabled: bool = True) -> None: enabled: bool = True) -> None:
"""Create new cart""" """Create new cart"""
@ -82,18 +82,18 @@ class Carts(Base):
session.commit() session.commit()
@classmethod @classmethod
def enabled_carts(cls, session: Session) -> List["Carts"]: def all_as_dict(cls, session: Session) -> dict:
"""Return a list of all active carts""" """Return a dictionary of all carts keyed by cart number"""
return ( result = (
session.execute( session.execute(
select(Carts) select(Carts)
.where(Carts.enabled.is_(True))
.order_by(Carts.cart_number) .order_by(Carts.cart_number)
) )
.scalars() .scalars()
.all() .all()
) )
return {a.id: a for a in result}
@classmethod @classmethod
def get_or_create(cls, session: Session, cart_number: int) -> "Carts": def get_or_create(cls, session: Session, cart_number: int) -> "Carts":

View File

@ -110,7 +110,7 @@ class Window(QMainWindow, Ui_MainWindow):
pass pass
def cart_button(self, cart: Carts) -> QPushButton: def cart_button(self, cart: Carts) -> QPushButton:
"""Create a cart pushbutton""" """Create a cart pushbutton and set it disabled"""
btn = QPushButton(self) btn = QPushButton(self)
btn.setEnabled(True) btn.setEnabled(True)
@ -121,6 +121,7 @@ class Window(QMainWindow, Ui_MainWindow):
btn.setObjectName("cart_" + str(cart.cart_number)) btn.setObjectName("cart_" + str(cart.cart_number))
btn.setText(cart.name) btn.setText(cart.name)
btn.clicked.connect(self.cart_click) btn.clicked.connect(self.cart_click)
btn.setEnabled(False)
# Insert button on left of cart space after existing buttons # Insert button on left of cart space after existing buttons
self.horizontalLayout_Carts.insertWidget(len(self.carts), btn) self.horizontalLayout_Carts.insertWidget(len(self.carts), btn)
@ -169,7 +170,15 @@ class Window(QMainWindow, Ui_MainWindow):
"""Initialse carts data structures""" """Initialse carts data structures"""
with Session() as session: with Session() as session:
for cart in Carts.enabled_carts(session): carts_in_db = Carts.all_as_dict(session)
# Number carts from 1 for humanity
for cart_number in range(1, Config.CARTS_COUNT + 1):
if cart_number in carts_in_db:
cart = carts_in_db[cart_number]
else:
cart = Carts(session, cart_number,
name=f"Cart #{cart_number}")
btn = self.cart_button(cart) btn = self.cart_button(cart)
self.carts[btn] = {} self.carts[btn] = {}
@ -180,10 +189,15 @@ class Window(QMainWindow, Ui_MainWindow):
player = self.music.VLC.media_player_new(cart.path) player = self.music.VLC.media_player_new(cart.path)
player.audio_set_volume(Config.VOLUME_VLC_DEFAULT) player.audio_set_volume(Config.VOLUME_VLC_DEFAULT)
self.carts[btn]['player'] = player self.carts[btn]['player'] = player
if helpers.file_is_readable(cart.path): if cart.path:
colour = Config.COLOUR_CART_READY if helpers.file_is_readable(cart.path):
colour = Config.COLOUR_CART_READY
btn.setEnabled(True)
else:
colour = Config.COLOUR_CART_ERROR
else: else:
colour = Config.COLOUR_CART_ERROR colour = Config.COLOUR_CART_UNCONFIGURED
btn.setStyleSheet("background-color: " + colour + ";\n") btn.setStyleSheet("background-color: " + colour + ";\n")
def cart_tick(self) -> None: def cart_tick(self) -> None:

View File

@ -865,7 +865,6 @@ padding-left: 8px;</string>
<property name="title"> <property name="title">
<string>&amp;Carts</string> <string>&amp;Carts</string>
</property> </property>
<addaction name="actionAdd_cart"/>
</widget> </widget>
<addaction name="menuFile"/> <addaction name="menuFile"/>
<addaction name="menuPlaylist"/> <addaction name="menuPlaylist"/>
@ -1158,7 +1157,7 @@ padding-left: 8px;</string>
</action> </action>
<action name="actionAdd_cart"> <action name="actionAdd_cart">
<property name="text"> <property name="text">
<string>Add &amp;cart...</string> <string>Edit cart &amp;1...</string>
</property> </property>
</action> </action>
</widget> </widget>

View File

@ -530,7 +530,6 @@ class Ui_MainWindow(object):
self.menuSearc_h.addAction(self.actionSelect_previous_track) self.menuSearc_h.addAction(self.actionSelect_previous_track)
self.menuHelp.addAction(self.action_About) self.menuHelp.addAction(self.action_About)
self.menuHelp.addAction(self.actionDebug) self.menuHelp.addAction(self.actionDebug)
self.menu_Carts.addAction(self.actionAdd_cart)
self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuPlaylist.menuAction()) self.menubar.addAction(self.menuPlaylist.menuAction())
self.menubar.addAction(self.menuSearc_h.menuAction()) self.menubar.addAction(self.menuSearc_h.menuAction())
@ -629,6 +628,6 @@ class Ui_MainWindow(object):
self.actionSave_as_template.setText(_translate("MainWindow", "Save as template...")) self.actionSave_as_template.setText(_translate("MainWindow", "Save as template..."))
self.actionNew_from_template.setText(_translate("MainWindow", "New from template...")) self.actionNew_from_template.setText(_translate("MainWindow", "New from template..."))
self.actionDebug.setText(_translate("MainWindow", "Debug")) self.actionDebug.setText(_translate("MainWindow", "Debug"))
self.actionAdd_cart.setText(_translate("MainWindow", "Add &cart...")) self.actionAdd_cart.setText(_translate("MainWindow", "Edit cart &1..."))
from infotabs import InfoTabs from infotabs import InfoTabs
import icons_rc import icons_rc