# sjshb57/bilibilias-r architecture

> Architecture diagram of the GitHub repository sjshb57/bilibilias-r, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sjshb57/bilibilias-r
- Repository: https://github.com/sjshb57/bilibilias-r

## Overview

BILIBILIAS is a cross-platform Bilibili companion app whose visible runtime centers on resolving video information and managing media downloads, alongside account, settings, and storage features. The shown download manager creates persisted task trees, obtains playback data, and starts an Android foreground service; shared storage screens expose storage information and controls. The excerpts provide only a partial view of app navigation and several feature implementations, so undocumented connections are omitted rather than inferred.

Main entry points: [`app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt`](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt) (Download manager), [`shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt`](https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt) (Storage management), [`core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/BILIBILIASDatabase.kt`](https://github.com/sjshb57/bilibilias-r/blob/main/core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/BILIBILIASDatabase.kt) (Room database), [`app/src/main/java/com/imcys/bilibilias/download/service/DownloadService.kt`](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/service/DownloadService.kt) (Foreground service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_download["Download workflow"]
  node_download_manager["Download manager"]
  node_download_service["Foreground service<br/>[DownloadService.kt]"]
  node_video_fetcher["Video info fetcher"]
  node_download_executor["Download execution"]
  node_file_output["File output"]
  node_ffmpeg["Media merging"]
  node_download_runtime["Shared download runtime"]
end

subgraph group_network["Bilibili integration"]
  node_video_repo["Video information"]
  node_web_api["Bilibili web API"]
  node_tv_api["Bilibili TV API"]
  node_cookies["Cookie storage"]
end

subgraph group_data["Persistence and settings"]
  node_task_repo["Download task repository"]
  node_download_db[("Download task database<br/>[DownloadTask.kt]")]
  node_database[("Room database")]
  node_task_dao["Task DAO<br/>[DownloadTaskDao.kt]"]
  node_settings_repo["App settings"]
end

subgraph group_shared["Shared app features"]
  node_storage_screen["Storage management"]
  node_storage_vm["Storage view model"]
  node_storage_platform["Platform storage<br/>[StoragePlatform.kt]"]
  node_storage_util["Storage utilities<br/>[StorageUtil.kt]"]
end

node_user(("App user"))
node_activity["Android activity<br/>[MainActivity.kt]"]

node_download_manager -->|"creates tasks"| node_task_repo
node_download_manager -->|"fetches playback data"| node_video_fetcher
node_download_manager -->|"starts service"| node_download_service
node_database -->|"exposes"| node_task_dao
node_database -->|"stores entities"| node_download_db
node_storage_screen -->|"loads storage state"| node_storage_vm
node_storage_screen -->|"uses platform controls"| node_storage_platform
node_storage_screen -->|"formats storage data"| node_storage_util

click node_activity "https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/MainActivity.kt"
click node_download_manager "https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt"
click node_download_service "https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/service/DownloadService.kt"
click node_video_fetcher "https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/VideoInfoFetcher.kt"
click node_download_executor "https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/DownloadExecutor.kt"
click node_file_output "https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/FileOutputManager.kt"
click node_ffmpeg "https://github.com/sjshb57/bilibilias-r/blob/main/core/ffmpeg/src/main/java/com/imcys/bilibilias/ffmpeg/MediaMergeManager.kt"
click node_task_repo "https://github.com/sjshb57/bilibilias-r/blob/main/core/data/src/main/java/com/imcys/bilibilias/data/repository/DownloadTaskRepository.kt"
click node_download_db "https://github.com/sjshb57/bilibilias-r/blob/main/core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/entity/download/DownloadTask.kt"
click node_database "https://github.com/sjshb57/bilibilias-r/blob/main/core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/BILIBILIASDatabase.kt"
click node_task_dao "https://github.com/sjshb57/bilibilias-r/blob/main/core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/dao/DownloadTaskDao.kt"
click node_settings_repo "https://github.com/sjshb57/bilibilias-r/blob/main/core/data/src/main/java/com/imcys/bilibilias/data/repository/AppSettingsRepository.kt"
click node_video_repo "https://github.com/sjshb57/bilibilias-r/blob/main/core/data/src/main/java/com/imcys/bilibilias/data/repository/VideoInfoRepository.kt"
click node_web_api "https://github.com/sjshb57/bilibilias-r/blob/main/core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/service/BILIBILIWebAPIService.kt"
click node_tv_api "https://github.com/sjshb57/bilibilias-r/blob/main/core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/service/BILIBILITVAPIService.kt"
click node_cookies "https://github.com/sjshb57/bilibilias-r/blob/main/core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/AsCookiesStorage.kt"
click node_storage_screen "https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt"
click node_storage_vm "https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementViewModel.kt"
click node_storage_platform "https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/platform/storage/StoragePlatform.kt"
click node_storage_util "https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/util/StorageUtil.kt"
click node_download_runtime "https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/download/runtime/SharedDownloadManager.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_download_manager,node_download_service,node_video_fetcher,node_download_executor,node_file_output,node_ffmpeg,node_download_runtime,node_user toneBlue
class node_video_repo,node_web_api,node_tv_api,node_cookies toneAmber
class node_task_repo,node_download_db,node_database,node_task_dao,node_settings_repo toneMint
class node_storage_screen,node_storage_vm,node_storage_platform,node_storage_util toneRose
class node_activity toneTeal
```

## Components

### Download workflow

- [Download manager](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt): `app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt`
- [Foreground service](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/service/DownloadService.kt): `app/src/main/java/com/imcys/bilibilias/download/service/DownloadService.kt`
- [Video info fetcher](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/VideoInfoFetcher.kt): `app/src/main/java/com/imcys/bilibilias/download/VideoInfoFetcher.kt`
- [Download execution](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/DownloadExecutor.kt): `app/src/main/java/com/imcys/bilibilias/download/DownloadExecutor.kt`
- [File output](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/download/FileOutputManager.kt): `app/src/main/java/com/imcys/bilibilias/download/FileOutputManager.kt`
- [Media merging](https://github.com/sjshb57/bilibilias-r/blob/main/core/ffmpeg/src/main/java/com/imcys/bilibilias/ffmpeg/MediaMergeManager.kt): `core/ffmpeg/src/main/java/com/imcys/bilibilias/ffmpeg/MediaMergeManager.kt`
- [Shared download runtime](https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/download/runtime/SharedDownloadManager.kt): `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/download/runtime/SharedDownloadManager.kt`

### Bilibili integration

- [Video information](https://github.com/sjshb57/bilibilias-r/blob/main/core/data/src/main/java/com/imcys/bilibilias/data/repository/VideoInfoRepository.kt): `core/data/src/main/java/com/imcys/bilibilias/data/repository/VideoInfoRepository.kt`
- [Bilibili web API](https://github.com/sjshb57/bilibilias-r/blob/main/core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/service/BILIBILIWebAPIService.kt): `core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/service/BILIBILIWebAPIService.kt`
- [Bilibili TV API](https://github.com/sjshb57/bilibilias-r/blob/main/core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/service/BILIBILITVAPIService.kt): `core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/service/BILIBILITVAPIService.kt`
- [Cookie storage](https://github.com/sjshb57/bilibilias-r/blob/main/core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/AsCookiesStorage.kt): `core/network/src/commonMain/kotlin/com/imcys/bilibilias/network/AsCookiesStorage.kt`

### Persistence and settings

- [Download task repository](https://github.com/sjshb57/bilibilias-r/blob/main/core/data/src/main/java/com/imcys/bilibilias/data/repository/DownloadTaskRepository.kt): `core/data/src/main/java/com/imcys/bilibilias/data/repository/DownloadTaskRepository.kt`
- [Download task database](https://github.com/sjshb57/bilibilias-r/blob/main/core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/entity/download/DownloadTask.kt): `core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/entity/download/DownloadTask.kt`
- [Room database](https://github.com/sjshb57/bilibilias-r/blob/main/core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/BILIBILIASDatabase.kt): `core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/BILIBILIASDatabase.kt`
- [Task DAO](https://github.com/sjshb57/bilibilias-r/blob/main/core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/dao/DownloadTaskDao.kt): `core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/dao/DownloadTaskDao.kt`
- [App settings](https://github.com/sjshb57/bilibilias-r/blob/main/core/data/src/main/java/com/imcys/bilibilias/data/repository/AppSettingsRepository.kt): `core/data/src/main/java/com/imcys/bilibilias/data/repository/AppSettingsRepository.kt`

### Shared app features

- [Storage management](https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt): `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt`
- [Storage view model](https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementViewModel.kt): `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementViewModel.kt`
- [Platform storage](https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/platform/storage/StoragePlatform.kt): `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/platform/storage/StoragePlatform.kt`
- [Storage utilities](https://github.com/sjshb57/bilibilias-r/blob/main/shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/util/StorageUtil.kt): `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/util/StorageUtil.kt`

### Other components

- **App user**
- [Android activity](https://github.com/sjshb57/bilibilias-r/blob/main/app/src/main/java/com/imcys/bilibilias/MainActivity.kt): `app/src/main/java/com/imcys/bilibilias/MainActivity.kt`

## Connections

- Download manager → Download task repository: creates tasks (evidence: `app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt`)
- Download manager → Video info fetcher: fetches playback data (evidence: `app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt`)
- Download manager → Foreground service: starts service (evidence: `app/src/main/java/com/imcys/bilibilias/download/NewDownloadManager.kt`)
- Room database → Task DAO: exposes (evidence: `core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/BILIBILIASDatabase.kt`)
- Room database → Download task database: stores entities (evidence: `core/database/src/commonMain/kotlin/com/imcys/bilibilias/database/BILIBILIASDatabase.kt`)
- Storage management → Storage view model: loads storage state (evidence: `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt`)
- Storage management → Platform storage: uses platform controls (evidence: `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt`)
- Storage management → Storage utilities: formats storage data (evidence: `shared/src/commonMain/kotlin/com/imcys/bilibilias/shared/feature/setting/storage/StorageManagementScreen.kt`)
