69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
import sys
|
|
import os
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
|
|
|
|
|
|
from typing import Dict, List, Optional
|
|
from persistence.data_store import DataStore
|
|
|
|
class DataStoreManager:
|
|
_instance = None
|
|
|
|
def __new__(cls):
|
|
if cls._instance is None:
|
|
cls._instance = super().__new__(cls)
|
|
cls._instance._store = DataStore()
|
|
return cls._instance
|
|
|
|
@property
|
|
def current_project(self) -> Optional[str]:
|
|
return self._store.current_project
|
|
|
|
@property
|
|
def current_param(self) -> Optional[str]:
|
|
return self._store.current_param
|
|
|
|
def create_project(self, name: str, description: str = "") -> bool:
|
|
"""创建或更新项目"""
|
|
# 如果项目已存在,先获取现有数据
|
|
existing_data = None
|
|
if self._store._project_exists(name):
|
|
existing_data = self._store.load_project(name)
|
|
|
|
# 保存项目,保留现有参数数据
|
|
result = self._store.save_project(name, description)
|
|
|
|
# 如果是更新现有项目,需要恢复参数数据
|
|
if result and existing_data and hasattr(existing_data, 'params'):
|
|
updated_project = self._store.load_project(name)
|
|
if updated_project:
|
|
updated_project.params = existing_data.params
|
|
self._store._save_project_data(name, updated_project)
|
|
|
|
return result
|
|
|
|
def save_param(self, project_name: str, param_name: str,
|
|
channel_settings: Dict[int, Dict], description: str = "") -> bool:
|
|
"""保存参数配置"""
|
|
return self._store.add_param_to_project(project_name, param_name,
|
|
channel_settings, description)
|
|
|
|
def get_project(self, name: str) -> Optional[Dict]:
|
|
"""获取项目数据"""
|
|
project_data = self._store.load_project(name)
|
|
return project_data.__dict__ if project_data else None
|
|
|
|
def get_projects(self) -> List[str]:
|
|
"""获取所有项目列表"""
|
|
return self._store.list_projects()
|
|
|
|
def remove_project(self, name: str) -> bool:
|
|
"""删除项目"""
|
|
return self._store.delete_project(name)
|
|
|
|
@classmethod
|
|
def get_instance(cls) -> 'DataStoreManager':
|
|
"""获取 DataStoreManager 实例"""
|
|
if cls._instance is None:
|
|
cls._instance = DataStoreManager()
|
|
return cls._instance |