┌────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │app: Application│ │cm: ContentManager│ │item: DownloadItem│ └────────┬───────┘ └─────────┬────────┘ └─────────┬────────┘ ╔═════════════════════════════╗ ┌┴┐ │ ║User enters media info page ░║ │ │ │ ╚═════════════╤═╤═════════════╝ │ │ │ ╔═════════╧═╧══════════╗ │ │ │ ║Check if item exists ░║ │ │ │ ╚═════════╤═╤══════════╝ │ │ │ │ │ findItem(itemId) │ │ │ │ │ ──────────────────────────────>│ │ │ │ │ │ │ │ │ │ │ │ ────┐ │ │ │ │ │ │ lookup(itemId) │ │ │ │ │ <───┘ │ │ │ │ │ │ │ │ │ │ │ ╔══════╤══════════════╪═╪════════════════════════════════╪═╪═════════════════════════════╪═══════════════════╗ ║ ALT │ item found │ │ │ │ │ ║ ╟──────┘ │ │ │ │ │ ║ ║ │ │ item │ │ │ ║ ║ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ ║ ╠═════════════════════╪═╪════════════════════════════════╪═╪═════════════════════════════╪═══════════════════╣ ║ [not found] │ │ │ │ │ ║ ║ │ │ null │ │ │ ║ ║ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ ║ ║ │ │ │ │ │ ║ ║ │ │ createItem(itemId, contentURL) │ │ │ ║ ║ │ │ ──────────────────────────────>│ │ │ ║ ║ │ │ │ │ │ ║ ║ │ │ │ │ new(itemId, contentURL) ┌┴┐ ║ ║ │ │ │ │ ──────────────────────────>│ │ ║ ║ │ │ │ │ │ │ ║ ║ │ │ item │ │ │ │ ║ ║ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ ║ ║ │ │ │ │ │ │ ║ ║ │ │ loadMetadata() │ │ │ │ ║ ║ │ │ ──────────────────────────────>│ │ │ │ ║ ║ │ │ │ │ │ │ ║ ║ │ │ ╔═══════════════════╧═╧═══════════════════╗ │ │ ║ ║ │ │ ║Download and parse manifest, save in db ░║ │ │ ║ ║ │ │ ╚═══════════════════╤═╤═══════════════════╝ │ │ ║ ║ │ │ onTracksAvailable │ │ │ │ ║ ║ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ ║ ║ │ │ │ │ │ │ ║ ║ │ │ onDownloadMetadata │ │ │ │ ║ ║ │ │ <─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │ │ ║ ║ │ │ │ │ │ │ ║ ║ ╔══════════════╧═╧═══════════════╗ │ │ │ │ ║ ║ ║* See //track-selection// flow ░║ │ │ │ │ ║ ╚══════╚════════════════════════════════╝════════════════╪═╪════════════════════════════╪═╪══════════════════╝ │ │ │ │ │ │ ╔════════════════╧═╧════════════════╗ │ │ │ │ ║app is ready to start downloading ░║ │ │ │ │ ╚════════════════╤═╤════════════════╝ │ │ │ │ │ │ startDownload() │ │ │ │ ─────────────────────────────────────────────────────────────>│ │ ┌───────│ │──────┐ ┌────────│ │───────┐ ┌────────│ │───────┐ │app: Ap│ │cation│ │cm: Cont│ │Manager│ │item: Do│ │oadItem│ └───────│ │──────┘ └────────│ │───────┘ └────────│ │───────┘ └┬┘ └┬┘ └┬┘