Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,20 @@ def app_version() -> str:
return "0.0.0-dev"


def _sweep_disabled() -> bool:
"""The desktop app is a personal, user-curated library (folders + Trash),
with its track list persisted permanently in ~/Documents/StemDeck. The 24h
job TTL sweep -- a sensible disk-hygiene default for the shared server/Docker
deployment -- would wrongly purge stems the user kept, leaving orphaned
library entries that ask to "re-upload to restore". So skip the sweep under
the desktop shell (STEMDECK_DESKTOP=1); the user manages disk via Trash."""
return os.environ.get("STEMDECK_DESKTOP") == "1"


async def _sweep_loop() -> None:
if _sweep_disabled():
_log.info("desktop mode: job TTL sweep disabled (library is user-managed)")
return
while True:
try:
await asyncio.to_thread(sweep_old_jobs, JOBS_DIR)
Expand Down
23 changes: 23 additions & 0 deletions tests/test_sweep.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,29 @@ def test_sweeps_terminal_old_job(tmp_path: Path):
assert job.id not in _jobs


def test_sweep_disabled_under_desktop(monkeypatch):
"""The desktop shell (STEMDECK_DESKTOP=1) opts out of the TTL sweep so a
user's curated library isn't purged; the server/Docker default keeps it."""
from app.main import _sweep_disabled

monkeypatch.setenv("STEMDECK_DESKTOP", "1")
assert _sweep_disabled() is True
monkeypatch.delenv("STEMDECK_DESKTOP", raising=False)
assert _sweep_disabled() is False


@pytest.mark.asyncio
async def test_sweep_loop_returns_immediately_under_desktop(monkeypatch):
"""In desktop mode the loop returns at once instead of entering the hourly
cycle (wait_for would time out if it looped)."""
import asyncio

from app.main import _sweep_loop

monkeypatch.setenv("STEMDECK_DESKTOP", "1")
await asyncio.wait_for(_sweep_loop(), timeout=2)


def test_keeps_recent_terminal_job(tmp_path: Path):
d = _mkdir(tmp_path, "abcdefabcded")
job = Job(id="abcdefabcded")
Expand Down