feat: Implement sync manager and file watcher for automated playlist synchronization
This commit is contained in:
+13
-19
@@ -2,8 +2,9 @@ from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from apscheduler.triggers.cron import CronTrigger
|
||||
from app.utils.config import server_config
|
||||
from app.utils.logger import logger
|
||||
from app.utils.playlist_merge import sync_all_playlists, SyncMode
|
||||
import asyncio
|
||||
from app.utils.watcher import watcher_manager
|
||||
from app.utils.sync_manager import sync_manager
|
||||
import os
|
||||
|
||||
scheduler = BackgroundScheduler()
|
||||
|
||||
@@ -26,23 +27,7 @@ def validate_cron_expression(expression: str) -> bool:
|
||||
|
||||
def job_function():
|
||||
logger.info("Executing scheduled sync job...")
|
||||
try:
|
||||
# Re-read config to ensure latest values
|
||||
server_config.load()
|
||||
|
||||
mode_str = server_config.sync_mode
|
||||
regex_rules = server_config.path_rules
|
||||
local_path = server_config.local_path
|
||||
|
||||
asyncio.run(sync_all_playlists(
|
||||
sync_mode=SyncMode(mode_str),
|
||||
path_rules=regex_rules,
|
||||
local_dir=local_path
|
||||
))
|
||||
|
||||
logger.info("Scheduled sync job completed.")
|
||||
except Exception as e:
|
||||
logger.error(f"Scheduled sync job failed: {e}")
|
||||
sync_manager.run_sync(trigger_source="scheduler", wait=False)
|
||||
|
||||
def start_scheduler():
|
||||
if not scheduler.running:
|
||||
@@ -55,6 +40,15 @@ def update_scheduler_job():
|
||||
|
||||
# Reload config to get latest schedule settings
|
||||
server_config.load()
|
||||
|
||||
# Handle Auto Watch
|
||||
if server_config.schedule_auto_watch:
|
||||
# Ensure we have an absolute path
|
||||
local_path = os.path.abspath(server_config.local_path)
|
||||
watcher_manager.start(local_path)
|
||||
else:
|
||||
watcher_manager.stop()
|
||||
|
||||
mode = server_config.schedule_mode
|
||||
|
||||
if mode == "DISABLED":
|
||||
|
||||
Reference in New Issue
Block a user