from lib.singleton import Singleton class AppStatus(Singleton): """アプリケーションの状態を管理するシングルトンクラス""" def __init__(self): if hasattr(self, '_initialized') and self._initialized: return # すでに初期化済みなら何もしない self.status = {} self._initialized = True def reset(self): """状態をリセット""" self.status.clear() def set_status(self, key, value): self.status[key] = value def get_status(self, key, default=None): return self.status.get(key, default) @property def input_filepath(self)-> str: """入力音声ファイルのパス""" return self.get_status('input_filepath') @input_filepath.setter def input_filepath(self, value:str): """入力音声ファイルのパス""" self.set_status('input_filepath', value) @property def request_id(self) -> str: """リクエストID""" return self.get_status('request_id') @request_id.setter def request_id(self, value: str): """リクエストID""" self.set_status('request_id', value) @property def output_base_dir(self)-> str: """出力ディレクトリのベースパス""" return self.get_status('output_base_dir', default='.output') @output_base_dir.setter def output_base_dir(self, value:str): """出力ディレクトリのベースパス""" self.set_status('output_base_dir', value) @property def output_dir(self)-> str: """出力ディレクトリのパス""" output_dir = f"{self.output_base_dir}/{self.request_id}" return output_dir @property def source_dir(self)-> str: """ソースディレクトリのパス""" source_dir = f"{self.output_base_dir}/{self.request_id}/source" return source_dir @property def chunk_dir(self)-> str: """チャンクディレクトリのパス""" chunk_dir = f"{self.output_base_dir}/{self.request_id}/chunk" return chunk_dir @property def source_file(self)-> str: """ソースファイルのパス""" return self.get_status('source_file') @source_file.setter def source_file(self, value:str): """ソースファイルのパス""" self.set_status('source_file', value) @property def unified_file(self)-> str: """統一ファイルのパス""" return f"{self.output_dir}/unified.wav"