Skip to content
Rymflux Documentation
Esc
navigateopen⌘Jpreview
On this page

Sequence diagram: Save to library

Sequence diagram: Save to library

sequenceDiagram
    participant User
    participant Shell as Svelte Shell
    participant Lib as Library Service
    participant DB as SQLite

    User->>Shell: Click save on search result
    Shell->>Shell: Get TrackStub from search cache
    Shell->>Lib: invoke("library_save_track", stub, plugin_id, content_id)

    Lib->>DB: Check content_resolution for (plugin_id, content_id)
    DB-->>Lib: No existing entry

    Lib->>Lib: Run dedup check (normalized title::artist)
    DB-->>Lib: No match found

    Lib->>Lib: Generate UUIDv4
    Lib->>DB: INSERT library_items (id, plugin_id, content_id, title, ...)
    Lib->>DB: INSERT content_resolution (content_id, plugin_id, foreign_id)
    DB-->>Lib: Done

    Lib-->>Shell: Return Track with core UUID
    Shell-->>User: Show "Saved to library" toast
    Shell-->>Shell: emit("library_updated", { kind: "saved", track_id })

Dedup match variant

sequenceDiagram
    participant Shell as Svelte Shell
    participant Lib as Library Service
    participant DB as SQLite

    Shell->>Lib: invoke("library_save_track", stub, plugin_id, content_id)
    Lib->>DB: Check content_resolution for (plugin_id, content_id)
    DB-->>Lib: No existing entry

    Lib->>DB: Search library_items by normalized title::artist
    DB-->>Lib: Found existing track (id = "abc-123")

    Lib->>DB: INSERT content_resolution (content_id="abc-123", plugin_id, foreign_id)
    DB-->>Lib: Done

    Lib-->>Shell: Return existing Track (abc-123)

Was this page helpful?