# kairesh/mediafetch-app architecture

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

- Interactive diagram: https://gitdiagram.com/kairesh/mediafetch-app
- Repository: https://github.com/kairesh/mediafetch-app

## Overview

MediaFetch Mobile is an Android media discovery and downloader. Users enter or share a media link, resolve available media and qualities, optionally select chapters, captions, or other download settings, then enqueue downloads and monitor progress. Search and a home-screen widget provide alternate entry points; a native updater checks for and installs releases. The excerpts support the main UI-to-engine/service handoffs, but do not expose every web UI callback or download-processing detail, so uncertain connections are omitted.

Main entry points: [`mobile/app/src/main/java/com/mediafetch/app/MainActivity.kt`](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/MainActivity.kt) (Main Activity), [`mobile/app/src/main/java/com/mediafetch/app/service/DownloadService.kt`](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/service/DownloadService.kt) (Download Queue and Worker), [`mobile/app/src/main/java/com/mediafetch/app/ShareActivity.kt`](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/ShareActivity.kt) (Share Activity), [`mobile/app/src/main/java/com/mediafetch/app/engine/MediaEngine.kt`](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/engine/MediaEngine.kt) (Media Resolver)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_user_flow["Discovery and UI"]
  node_web_ui["Web UI<br/>[app.js]"]
  node_main_activity["Main Activity<br/>[MainActivity.kt]"]
  node_share_activity["Share Activity<br/>[ShareActivity.kt]"]
end

subgraph group_media_flow["Media and Downloads"]
  node_search_engine["Media Search"]
  node_media_engine["Media Resolver<br/>[MediaEngine.kt]"]
  node_stream_extractor["Stream Extractor<br/>[StreamExtractor.kt]"]
  node_media_models["Media and Task Models<br/>[Models.kt]"]
  node_download_service["Download Queue and Worker<br/>[DownloadService.kt]"]
  node_download_actions["Download Actions"]
  node_media_store[("Device Media Storage")]
end

subgraph group_android_entry["Android Entry Points"]
  node_share_sheet["Android Share Sheet<br/>[share_sheet.js]"]
  node_widget_provider["Home Screen Widget"]
  node_widget_action["Widget Actions"]
end

subgraph group_release_flow["Updates"]
  node_update_receiver["Update Scheduler"]
  node_update_manager["Update Manager<br/>[UpdateManager.kt]"]
end

node_user(("User"))
node_media_platforms["Media Platforms"]
node_search_services["Search Services"]
node_release_metadata["Release Metadata"]
node_apk_release["APK Release"]

node_user -->|"uses"| node_web_ui
node_web_ui -->|"calls bridge"| node_main_activity
node_main_activity -->|"resolves links"| node_media_engine
node_main_activity -->|"searches media"| node_search_engine
node_main_activity -->|"enqueues tasks"| node_download_service
node_share_sheet -->|"shares link"| node_share_activity
node_user -->|"shares media"| node_share_sheet
node_share_activity -->|"resolves links"| node_media_engine
node_share_activity -->|"enqueues tasks"| node_download_service
node_search_engine -->|"queries"| node_search_services
node_media_engine -->|"resolves media"| node_media_platforms
node_media_engine -->|"extracts streams"| node_stream_extractor
node_main_activity -->|"creates tasks"| node_media_models
node_share_activity -->|"creates tasks"| node_media_models
node_download_service -->|"updates task state"| node_media_models
node_download_service -->|"fetches streams"| node_media_platforms
node_download_service -->|"writes downloads"| node_media_store
node_download_actions -->|"dispatches actions"| node_download_service
node_widget_provider -->|"launches actions"| node_widget_action
node_widget_action -->|"opens screens"| node_main_activity
node_widget_action -->|"starts fast download"| node_share_activity
node_update_receiver -->|"checks periodically"| node_update_manager
node_main_activity -->|"checks and installs"| node_update_manager
node_update_manager -->|"fetches version info"| node_release_metadata
node_update_manager -->|"downloads APK"| node_apk_release

click node_web_ui "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/assets/app.js"
click node_main_activity "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/MainActivity.kt"
click node_share_activity "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/ShareActivity.kt"
click node_search_engine "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/engine/MediaSearchEngine.kt"
click node_media_engine "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/engine/MediaEngine.kt"
click node_stream_extractor "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/engine/StreamExtractor.kt"
click node_media_models "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/model/Models.kt"
click node_download_service "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/service/DownloadService.kt"
click node_download_actions "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/service/DownloadActionReceiver.kt"
click node_share_sheet "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/assets/share_sheet.js"
click node_widget_provider "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/widget/MediaFetchWidgetProvider.kt"
click node_widget_action "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/widget/WidgetActionActivity.kt"
click node_update_receiver "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/update/UpdateCheckReceiver.kt"
click node_update_manager "https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/update/UpdateManager.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_web_ui,node_main_activity,node_share_activity,node_user toneBlue
class node_search_engine,node_media_engine,node_stream_extractor,node_media_models,node_download_service,node_download_actions,node_media_store toneAmber
class node_share_sheet,node_widget_provider,node_widget_action toneMint
class node_update_receiver,node_update_manager toneRose
class node_media_platforms,node_search_services,node_release_metadata,node_apk_release toneIndigo
```

## Components

### Discovery and UI

- [Web UI](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/assets/app.js): `mobile/app/src/main/assets/app.js`
- [Main Activity](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/MainActivity.kt): `mobile/app/src/main/java/com/mediafetch/app/MainActivity.kt`
- [Share Activity](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/ShareActivity.kt): `mobile/app/src/main/java/com/mediafetch/app/ShareActivity.kt`

### Media and Downloads

- [Media Search](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/engine/MediaSearchEngine.kt): `mobile/app/src/main/java/com/mediafetch/app/engine/MediaSearchEngine.kt`
- [Media Resolver](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/engine/MediaEngine.kt): `mobile/app/src/main/java/com/mediafetch/app/engine/MediaEngine.kt`
- [Stream Extractor](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/engine/StreamExtractor.kt): `mobile/app/src/main/java/com/mediafetch/app/engine/StreamExtractor.kt`
- [Media and Task Models](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/model/Models.kt): `mobile/app/src/main/java/com/mediafetch/app/model/Models.kt`
- [Download Queue and Worker](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/service/DownloadService.kt): `mobile/app/src/main/java/com/mediafetch/app/service/DownloadService.kt`
- [Download Actions](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/service/DownloadActionReceiver.kt): `mobile/app/src/main/java/com/mediafetch/app/service/DownloadActionReceiver.kt`
- **Device Media Storage**

### Android Entry Points

- [Android Share Sheet](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/assets/share_sheet.js): `mobile/app/src/main/assets/share_sheet.js`
- [Home Screen Widget](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/widget/MediaFetchWidgetProvider.kt): `mobile/app/src/main/java/com/mediafetch/app/widget/MediaFetchWidgetProvider.kt`
- [Widget Actions](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/widget/WidgetActionActivity.kt): `mobile/app/src/main/java/com/mediafetch/app/widget/WidgetActionActivity.kt`

### Updates

- [Update Scheduler](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/update/UpdateCheckReceiver.kt): `mobile/app/src/main/java/com/mediafetch/app/update/UpdateCheckReceiver.kt`
- [Update Manager](https://github.com/kairesh/mediafetch-app/blob/main/mobile/app/src/main/java/com/mediafetch/app/update/UpdateManager.kt): `mobile/app/src/main/java/com/mediafetch/app/update/UpdateManager.kt`

### Other components

- **User**
- **Media Platforms**
- **Search Services**
- **Release Metadata**
- **APK Release**

## Connections

- User → Web UI: uses
- Web UI → Main Activity: calls bridge
- Main Activity → Media Resolver: resolves links
- Main Activity → Media Search: searches media
- Main Activity → Download Queue and Worker: enqueues tasks
- Android Share Sheet → Share Activity: shares link
- User → Android Share Sheet: shares media
- Share Activity → Media Resolver: resolves links
- Share Activity → Download Queue and Worker: enqueues tasks
- Media Search → Search Services: queries
- Media Resolver → Media Platforms: resolves media
- Media Resolver → Stream Extractor: extracts streams
- Main Activity → Media and Task Models: creates tasks
- Share Activity → Media and Task Models: creates tasks
- Download Queue and Worker → Media and Task Models: updates task state
- Download Queue and Worker → Media Platforms: fetches streams
- Download Queue and Worker → Device Media Storage: writes downloads
- Download Actions → Download Queue and Worker: dispatches actions
- Home Screen Widget → Widget Actions: launches actions
- Widget Actions → Main Activity: opens screens
- Widget Actions → Share Activity: starts fast download
- Update Scheduler → Update Manager: checks periodically
- Main Activity → Update Manager: checks and installs
- Update Manager → Release Metadata: fetches version info
- Update Manager → APK Release: downloads APK
