obscreen/src/SlideManager.py
2024-02-26 22:17:46 +01:00

51 lines
1.7 KiB
Python

import json
from typing import Dict, Optional, List, Tuple
from src.model.Slide import Slide
from src.utils import str_to_enum
from pysondb import db
class SlideManager():
DB_FILE = "data/slideshow.json"
def __init__(self):
self._db = db.getDb(self.DB_FILE)
@staticmethod
def hydrate_object(raw_slide) -> Slide:
return Slide(**raw_slide)
@staticmethod
def hydrate_list(raw_slides) -> List[Slide]:
return [SlideManager.hydrate_object(raw_slide) for raw_slide in raw_slides]
def get_all(self, sort: bool = False) -> List[Slide]:
raw_slides = self._db.getAll()
return SlideManager.hydrate_list(sorted(raw_slides, key=lambda x: x['position']) if sort else raw_slides)
def get_enabled_slides(self) -> List[Slide]:
return [slide for slide in self.get_all(sort=True) if slide.enabled]
def get_disabled_slides(self) -> List[Slide]:
return [slide for slide in self.get_all(sort=True) if not slide.enabled]
def update_enabled(self, id: int, enabled: bool) -> None:
self._db.updateById(id, {"enabled": enabled, "position": 999})
def update_positions(self, positions: list) -> None:
for slide_id, slide_position in positions.items():
self._db.updateById(slide_id, {"position": slide_position})
def update_form(self, id: str, name: str, duration: int) -> None:
self._db.updateById(id, {"name": name, "duration": duration})
def add_form(self, slide: Slide) -> None:
self._db.add(slide.to_dict())
def delete(self, id: int) -> None:
self._db.deleteById(id)
def to_dict(self, slides: List[Slide]) -> dict:
return [slide.to_dict() for slide in slides]