feat: v0.6.0 — collapse policy, session limiter, Claude Code provider, prune, browser auth, media downloads
This commit is contained in:
@@ -173,6 +173,22 @@ class Cache:
|
||||
entry["joplin_synced_at"] = datetime.now(tz=timezone.utc).isoformat()
|
||||
self._save()
|
||||
|
||||
def get_joplin_resources(self, provider: str, conv_id: str) -> dict[str, str]:
|
||||
"""Return the {relative_media_path: joplin_resource_id} map for a conversation."""
|
||||
entry = self._data.get(provider, {}).get(conv_id)
|
||||
if not isinstance(entry, dict):
|
||||
return {}
|
||||
resources = entry.get("joplin_resources")
|
||||
return dict(resources) if isinstance(resources, dict) else {}
|
||||
|
||||
def set_joplin_resources(self, provider: str, conv_id: str, resources: dict[str, str]) -> None:
|
||||
"""Persist the {relative_media_path: joplin_resource_id} map for a conversation."""
|
||||
entry = self._data.get(provider, {}).get(conv_id)
|
||||
if entry is None:
|
||||
return
|
||||
entry["joplin_resources"] = dict(resources)
|
||||
self._save()
|
||||
|
||||
def get_joplin_pending(self, provider: str) -> list[tuple[str, dict]]:
|
||||
"""Return (conv_id, entry) pairs that need to be synced to Joplin.
|
||||
|
||||
@@ -210,6 +226,25 @@ class Cache:
|
||||
|
||||
return pending
|
||||
|
||||
def all_file_paths(self) -> set[str]:
|
||||
"""Return every non-empty ``file_path`` in the manifest, across providers.
|
||||
|
||||
Used by ``prune`` (files on disk but not here are stale) and by the
|
||||
doctor integrity check (files here but not on disk are missing).
|
||||
"""
|
||||
paths: set[str] = set()
|
||||
for key, entries in self._data.items():
|
||||
if not isinstance(entries, dict) or key in (
|
||||
"version",
|
||||
"last_run",
|
||||
"tos_acknowledged_at",
|
||||
):
|
||||
continue
|
||||
for entry in entries.values():
|
||||
if isinstance(entry, dict) and entry.get("file_path"):
|
||||
paths.add(entry["file_path"])
|
||||
return paths
|
||||
|
||||
def last_run(self) -> str | None:
|
||||
"""Return the ISO8601 timestamp of the last export run, or None."""
|
||||
return self._data.get("last_run")
|
||||
|
||||
Reference in New Issue
Block a user