Files
quickbot/src/qbot/utils/navigation.py
Alexander Kalinovsky 1d162677a8 upd project structure
2025-02-18 20:57:52 +01:00

51 lines
1.6 KiB
Python

from ..bot.handlers.context import ContextData, CallbackCommand
def save_navigation_context(
callback_data: ContextData, state_data: dict
) -> list[ContextData]:
stack = [
ContextData.unpack(item) for item in state_data.get("navigation_stack", [])
]
data_nc = state_data.get("navigation_context")
navigation_context = ContextData.unpack(data_nc) if data_nc else None
if callback_data.back:
callback_data.back = False
if stack:
stack.pop()
else:
if (
stack
and navigation_context
and navigation_context.command == callback_data.command
and navigation_context.entity_name == callback_data.entity_name
and navigation_context.entity_id == callback_data.entity_id
and navigation_context.command != CallbackCommand.USER_COMMAND
):
navigation_context = callback_data
elif navigation_context:
stack.append(navigation_context)
state_data["navigation_stack"] = [item.pack() for item in stack]
state_data["navigation_context"] = callback_data.pack()
return stack
def pop_navigation_context(stack: list[ContextData]) -> ContextData | None:
if stack:
data = stack[-1]
data.back = True
return data
def get_navigation_context(
state_data: dict,
) -> tuple[list[ContextData], ContextData | None]:
data_nc = state_data.get("navigation_context")
context = ContextData.unpack(data_nc) if data_nc else None
return (
[ContextData.unpack(item) for item in state_data.get("navigation_stack", [])],
context,
)