53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
import logging
|
|
import os
|
|
from datetime import datetime
|
|
|
|
from config import config
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _sanitize_filename(name: str) -> str:
|
|
if not name:
|
|
return "untitled"
|
|
invalid = '<>:"/\\|?*'
|
|
for char in invalid:
|
|
name = name.replace(char, "")
|
|
name = name.replace(" ", "_").strip("._")
|
|
return name or "untitled"
|
|
|
|
|
|
class RawMeetingStore:
|
|
def __init__(self):
|
|
self.raw_dir = config.storage.raw_dir
|
|
os.makedirs(self.raw_dir, exist_ok=True)
|
|
|
|
def save(self, text: str, title: str = "", date: str = "") -> str:
|
|
date_str = date or datetime.now().strftime("%Y-%m-%d")
|
|
safe_title = _sanitize_filename(title)[:60]
|
|
filename = f"{date_str}_{safe_title}.md"
|
|
filepath = os.path.join(self.raw_dir, filename)
|
|
|
|
content = "\n".join(
|
|
[
|
|
"---",
|
|
f'title: "{title}"',
|
|
f'date: "{date_str}"',
|
|
"status: archived",
|
|
"---",
|
|
"",
|
|
f"# {title or 'Untitled Meeting'}",
|
|
"",
|
|
text,
|
|
"",
|
|
]
|
|
)
|
|
with open(filepath, "w", encoding="utf-8") as f:
|
|
f.write(content)
|
|
|
|
logger.info("Saved raw meeting text: %s", filepath)
|
|
return filepath
|
|
|
|
|
|
raw_meeting_store = RawMeetingStore()
|