┌────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │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: A│ │ication│ │cm: Con│ │tManager│ │item: D│ │loadItem│ └──────│ │───────┘ └───────│ │────────┘ └───────│ │────────┘ └┬┘ └┬┘ └┬┘