PinkSky / server /build_mode_editor.py
FreshPixels's picture
Rename build_mode_editor.py to server/build_mode_editor.py
f44681d verified
Raw
History Blame Contribute Delete
4.08 kB
"""Build Mode Editor โ€” ัƒะฟั€ะฐะฒะปะตะฝะธะต ั€ะตะถะธะผะฐะผะธ ัะฑะพั€ะบะธ"""
import os
import json
import logging
from datetime import datetime
from typing import Dict
from .config import BUILD_MODES_FILE
class BuildModeEditor:
def __init__(self, state):
self.state = state
self.logger = logging.getLogger(__name__)
def list_modes(self) -> str:
modes = self._load_all_modes()
if not modes:
return (
"โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n"
" โ”‚ ๐Ÿ—ƒ๏ธ แด€ส€แด„สœษชแด แด‡ แดา“ ส™แดœษชสŸแด… แดแดแด…แด‡s โ”‚\n"
"โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n\n"
"โŠ˜ Empty...\n"
"Create your first mode: `/build mode save <name>`"
)
lines = ["โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n โ”‚ ๐Ÿ—ƒ๏ธ แด€ส€แด„สœษชแด แด‡ แดา“ ส™แดœษชสŸแด… แดแดแด…แด‡s โ”‚\nโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ\n"]
for name, config in modes.items():
desc = config.get('description', 'No description')
lines.append(f"โ–ธ {name}: {desc[:50]}...")
return "\n".join(lines)
def show_mode(self, mode_name: str) -> str:
modes = self._load_all_modes()
mode = modes.get(mode_name)
if not mode:
return f"โ–ธ โœ— แด‡ส€ส€แดส€\nใ€Ž{mode_name}ใ€ not found in the archive.\nCheck spelling: `/build mode list`"
return (
f"โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ\n"
f" โ”‚ ๐Ÿ“‹ {mode_name.upper()} แดแดแด…แด‡ โ”‚\n"
"โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค\n"
f"```json\n{json.dumps(mode, ensure_ascii=False, indent=2)}\n```"
)
def save_mode(self, mode_name: str, config: Dict = None) -> str:
modes = self._load_all_modes()
if config is None:
config = dict(self.state.build_context)
config["description"] = f"Mode created {datetime.now().isoformat()}"
modes[mode_name] = config
try:
with open(BUILD_MODES_FILE, "w", encoding="utf-8") as f:
json.dump(modes, f, ensure_ascii=False, indent=2)
return f"โ–ธ โœ“ แด…ษชแด… sแด€แด แด‡\nใ€Ž{mode_name}ใ€ saved to archive.\nLoad it anytime: `/build mode load {mode_name}`"
except Exception as e:
self.logger.error(f"Failed to save mode {mode_name}: {e}")
return f"โ–ธ โš ๏ธ แด‡ส€ส€แดส€\nใ€Ž{mode_name}ใ€ save failed: {str(e)[:100]}..."
def load_mode(self, mode_name: str) -> str:
modes = self._load_all_modes()
mode = modes.get(mode_name)
if not mode:
return f"โ–ธ โœ— แด‡ส€ส€แดส€\nใ€Ž{mode_name}ใ€ not found in the archive."
self.state.build_context.update(mode)
return f"โ–ธ โœ“ แดแดแด…แด‡ สŸแดแด€แด…แด‡แด…\nใ€Ž{mode_name}ใ€ activated."
def delete_mode(self, mode_name: str) -> str:
modes = self._load_all_modes()
if mode_name not in modes:
return f"โ–ธ โœ— แด‡ส€ส€แดส€\nใ€Ž{mode_name}ใ€ not found. Nothing to delete."
del modes[mode_name]
try:
with open(BUILD_MODES_FILE, "w", encoding="utf-8") as f:
json.dump(modes, f, ensure_ascii=False, indent=2)
return f"โ–ธ โ˜ข๏ธ แด…แด‡สŸแด‡แด›แด‡แด…\nใ€Ž{mode_name}ใ€ removed from archive."
except Exception as e:
self.logger.error(f"Failed to delete mode {mode_name}: {e}")
return f"โ–ธ โš ๏ธ แด‡ส€ส€แดส€\nใ€Ž{mode_name}ใ€ deletion failed: {str(e)[:100]}..."
def _load_all_modes(self) -> Dict:
if not os.path.exists(BUILD_MODES_FILE):
return {}
try:
with open(BUILD_MODES_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except Exception as e:
self.logger.error(f"Failed to load build modes: {e}")
return {}