69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
from typing import List
|
|
from .recipe import V60, ESPRESSO, Recipe, Step, StepType
|
|
|
|
class RecipeManager:
|
|
def __init__(self):
|
|
self.recipes = [
|
|
V60,
|
|
ESPRESSO
|
|
]
|
|
self.tmp_recipe = None
|
|
self.active_recipe: Recipe = None
|
|
self.current_recipe_step_id = 0
|
|
|
|
def add_recipe(self, recipe):
|
|
self.recipes.append(recipe)
|
|
|
|
def update_recipe(self, recipe_id, new_recipe):
|
|
self.recipes[recipe_id] = new_recipe
|
|
|
|
def remove_recipe(self, recipe):
|
|
self.recipes.remove(recipe)
|
|
|
|
def get_recipe_id(self, recipe):
|
|
return self.recipes.index(recipe)
|
|
|
|
def get_recipe(self, recipe_id) -> Recipe:
|
|
if recipe_id is None:
|
|
return self.tmp_recipe
|
|
return self.recipes[recipe_id]
|
|
|
|
|
|
|
|
def activate_recipe(self, recipe_id):
|
|
self.active_recipe = self.get_recipe(recipe_id)
|
|
|
|
def deactivate_recipe(self):
|
|
self.active_recipe = None
|
|
self.current_recipe_step_id = 0
|
|
|
|
def get_current_step(self) -> List[Step]:
|
|
steps = [None] * 3
|
|
if self.active_recipe is None:
|
|
return steps
|
|
if self.current_recipe_step_id > len(self.active_recipe.steps):
|
|
return steps
|
|
|
|
if self.current_recipe_step_id > 0:
|
|
steps[0] = self.active_recipe.steps[self.current_recipe_step_id - 1]
|
|
if self.current_recipe_step_id < len(self.active_recipe.steps):
|
|
steps[1] = self.active_recipe.steps[self.current_recipe_step_id]
|
|
elif self.current_recipe_step_id == len(self.active_recipe.steps):
|
|
steps[1] = Step(StepType.SECTION, "Enjoy")
|
|
if self.current_recipe_step_id < len(self.active_recipe.steps) - 1:
|
|
steps[2] = self.active_recipe.steps[self.current_recipe_step_id + 1]
|
|
return steps
|
|
|
|
def next_step(self) -> List[Step]:
|
|
if self.active_recipe is None:
|
|
return [None] * 3
|
|
self.current_recipe_step_id = min(self.current_recipe_step_id + 1, len(self.active_recipe.steps) + 1)
|
|
|
|
return self.get_current_step()
|
|
|
|
def previous_step(self) -> List[Step]:
|
|
if self.active_recipe is None:
|
|
return [None] * 3
|
|
self.current_recipe_step_id = max(0, self.current_recipe_step_id - 1)
|
|
|
|
return self.get_current_step() |