""" Per-user conversation state machine. """ from dataclasses import dataclass, field from enum import Enum, auto from typing import Optional from qobuz_client import AlbumItem, SearchItem class State(Enum): IDLE = auto() # waiting for a search query RESULTS = auto() # results shown, waiting for a numbered choice ARTIST_OPTIONS = auto() # artist chosen, waiting for "1" or "2" DOWNLOADING = auto() # download in progress @dataclass class ResultEntry: """One numbered line shown to the user.""" display: str # text shown in the list kind: str # "artist" or "album" item: SearchItem # original search item (has .url) @dataclass class PendingArtist: name: str albums: list[AlbumItem] # full album list, sorted newest-first @dataclass class UserSession: state: State = State.IDLE entries: list[ResultEntry] = field(default_factory=list) pending_artist: Optional[PendingArtist] = None def reset(self) -> None: self.state = State.IDLE self.entries = [] self.pending_artist = None