# ghostminhtoan/comic.downloader-gmtpc-multios architecture

> Architecture diagram of the GitHub repository ghostminhtoan/comic.downloader-gmtpc-multios, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ghostminhtoan/comic.downloader-gmtpc-multios
- Repository: https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios

## Overview

Comic Downloader GMTPC is a cross-platform comic discovery, download, library, and reading application. The main workflow runs from user search or source selection through scraping and queued downloads, then local library scanning and archive reading with saved progress. Other substantial branches include thumbnail previews, missing-chapter scans, image enhancement, archive packing, and Google Drive sync. Edges are limited to relationships named in the supplied SOURCE INDEX; unsampled implementation details and the empty README do not support additional links.

Main entry points: [`ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/MainViewModel.cs) (Main controls), [`ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs`](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs) (Reader controls), [`ComicDownloaderGMTPC/Services/ComicScraperService.cs`](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ComicScraperService.cs) (Comic scraper), [`ComicDownloaderGMTPC/Services/DownloadEngineService.cs`](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/DownloadEngineService.cs) (Download engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Discovery"]
  node_main["Main controls<br/>[MainViewModel.cs]"]
  node_source_search["Source search"]
  node_scraper["Comic scraper"]
  node_routing["Domain routing"]
  node_doh["DNS resolver<br/>[DoHResolver.cs]"]
  node_comic_model["Comic metadata<br/>[ComicBookItem.cs]"]
end

subgraph group_downloads["Downloads"]
  node_download["Download engine"]
  node_cache[("Disk cache")]
  node_background["Background tasks"]
  node_queue_backup[("Queue backup")]
end

subgraph group_library["Library and reading"]
  node_library_vm["Library controls"]
  node_library_scan["Library scanner"]
  node_thumbnail["Thumbnail previews"]
  node_reader_vm["Reader controls"]
  node_reader_service["Archive reader"]
  node_reader_pages["Reader pages<br/>[ReaderPageItem.cs]"]
  node_progress[("Read progress")]
  node_missing_scan["Missing chapters"]
  node_image_enhance["Image enhancement"]
  node_packer["Archive packing"]
end

subgraph group_support["App services"]
  node_drive["Drive sync"]
  node_language["Language settings<br/>[LanguageService.cs]"]
  node_instance_config[("App configuration")]
end

node_user(("User"))

node_user -.->|"uses"| node_main
node_main -->|"invokes"| node_source_search
node_main -->|"invokes"| node_scraper
node_scraper -->|"creates metadata"| node_comic_model
node_scraper -->|"uses routing"| node_routing
node_scraper -->|"resolves domains"| node_doh
node_main -->|"invokes"| node_download
node_download -->|"requests comic data"| node_scraper
node_main -->|"uses"| node_cache
node_main -->|"uses"| node_background
node_main -->|"uses"| node_queue_backup
node_main -->|"uses"| node_library_vm
node_main -->|"uses"| node_library_scan
node_main -->|"requests previews"| node_thumbnail
node_main -->|"invokes"| node_missing_scan
node_main -->|"invokes"| node_image_enhance
node_main -->|"invokes"| node_packer
node_main -->|"invokes"| node_drive
node_main -->|"uses"| node_language
node_reader_vm -->|"loads pages"| node_reader_service
node_reader_service -->|"populates"| node_reader_pages
node_reader_vm -->|"stores progress"| node_progress
node_reader_vm -->|"uses library data"| node_library_scan
node_reader_vm -->|"uses cached data"| node_cache
node_reader_vm -->|"syncs reading data"| node_drive
node_main -->|"uses"| node_instance_config

click node_main "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/MainViewModel.cs"
click node_source_search "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/SourceSearchService.cs"
click node_scraper "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ComicScraperService.cs"
click node_routing "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/DomainRoutingService.cs"
click node_doh "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/DoHResolver.cs"
click node_comic_model "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Models/ComicBookItem.cs"
click node_download "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/DownloadEngineService.cs"
click node_cache "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ComicDiskCacheService.cs"
click node_background "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/BackgroundExecutionService.cs"
click node_queue_backup "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/QueueBackupService.cs"
click node_library_vm "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/LibraryViewModel.cs"
click node_library_scan "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/LibraryScannerService.cs"
click node_thumbnail "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ThumbnailPreviewService.cs"
click node_reader_vm "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs"
click node_reader_service "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ComicReaderService.cs"
click node_reader_pages "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Models/ReaderPageItem.cs"
click node_progress "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ReadProgressStore.cs"
click node_missing_scan "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/MissingChapterScannerService.cs"
click node_image_enhance "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ImageEnhancerService.cs"
click node_packer "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/FilePackerService.cs"
click node_drive "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/GoogleDriveSyncService.cs"
click node_language "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/LanguageService.cs"
click node_instance_config "https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/InstanceConfigService.cs"

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_main,node_source_search,node_scraper,node_routing,node_doh,node_comic_model,node_user toneBlue
class node_download,node_cache,node_background,node_queue_backup toneAmber
class node_library_vm,node_library_scan,node_thumbnail,node_reader_vm,node_reader_service,node_reader_pages,node_progress,node_missing_scan,node_image_enhance,node_packer toneMint
class node_drive,node_language,node_instance_config toneRose
```

## Components

### Discovery

- [Main controls](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/MainViewModel.cs): `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`
- [Source search](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/SourceSearchService.cs): `ComicDownloaderGMTPC/Services/SourceSearchService.cs`
- [Comic scraper](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ComicScraperService.cs): `ComicDownloaderGMTPC/Services/ComicScraperService.cs`
- [Domain routing](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/DomainRoutingService.cs): `ComicDownloaderGMTPC/Services/DomainRoutingService.cs`
- [DNS resolver](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/DoHResolver.cs): `ComicDownloaderGMTPC/Services/DoHResolver.cs`
- [Comic metadata](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Models/ComicBookItem.cs): `ComicDownloaderGMTPC/Models/ComicBookItem.cs`

### Downloads

- [Download engine](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/DownloadEngineService.cs): `ComicDownloaderGMTPC/Services/DownloadEngineService.cs`
- [Disk cache](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ComicDiskCacheService.cs): `ComicDownloaderGMTPC/Services/ComicDiskCacheService.cs`
- [Background tasks](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/BackgroundExecutionService.cs): `ComicDownloaderGMTPC/Services/BackgroundExecutionService.cs`
- [Queue backup](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/QueueBackupService.cs): `ComicDownloaderGMTPC/Services/QueueBackupService.cs`

### Library and reading

- [Library controls](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/LibraryViewModel.cs): `ComicDownloaderGMTPC/ViewModels/LibraryViewModel.cs`
- [Library scanner](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/LibraryScannerService.cs): `ComicDownloaderGMTPC/Services/LibraryScannerService.cs`
- [Thumbnail previews](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ThumbnailPreviewService.cs): `ComicDownloaderGMTPC/Services/ThumbnailPreviewService.cs`
- [Reader controls](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs): `ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs`
- [Archive reader](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ComicReaderService.cs): `ComicDownloaderGMTPC/Services/ComicReaderService.cs`
- [Reader pages](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Models/ReaderPageItem.cs): `ComicDownloaderGMTPC/Models/ReaderPageItem.cs`
- [Read progress](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ReadProgressStore.cs): `ComicDownloaderGMTPC/Services/ReadProgressStore.cs`
- [Missing chapters](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/MissingChapterScannerService.cs): `ComicDownloaderGMTPC/Services/MissingChapterScannerService.cs`
- [Image enhancement](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/ImageEnhancerService.cs): `ComicDownloaderGMTPC/Services/ImageEnhancerService.cs`
- [Archive packing](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/FilePackerService.cs): `ComicDownloaderGMTPC/Services/FilePackerService.cs`

### App services

- [Drive sync](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/GoogleDriveSyncService.cs): `ComicDownloaderGMTPC/Services/GoogleDriveSyncService.cs`
- [Language settings](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/LanguageService.cs): `ComicDownloaderGMTPC/Services/LanguageService.cs`
- [App configuration](https://github.com/ghostminhtoan/comic.downloader-gmtpc-multios/blob/main/ComicDownloaderGMTPC/Services/InstanceConfigService.cs): `ComicDownloaderGMTPC/Services/InstanceConfigService.cs`

### Other components

- **User**

## Connections

- User → Main controls: uses
- Main controls → Source search: invokes (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Comic scraper: invokes (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Comic scraper → Comic metadata: creates metadata (evidence: `ComicDownloaderGMTPC/Services/ComicScraperService.cs`)
- Comic scraper → Domain routing: uses routing (evidence: `ComicDownloaderGMTPC/Services/ComicScraperService.cs`)
- Comic scraper → DNS resolver: resolves domains (evidence: `ComicDownloaderGMTPC/Services/ComicScraperService.cs`)
- Main controls → Download engine: invokes (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Download engine → Comic scraper: requests comic data (evidence: `ComicDownloaderGMTPC/Services/DownloadEngineService.cs`)
- Main controls → Disk cache: uses (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Background tasks: uses (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Queue backup: uses (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Library controls: uses (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Library scanner: uses (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Thumbnail previews: requests previews (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Missing chapters: invokes (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Image enhancement: invokes (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Archive packing: invokes (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Drive sync: invokes (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Main controls → Language settings: uses (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
- Reader controls → Archive reader: loads pages (evidence: `ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs`)
- Archive reader → Reader pages: populates (evidence: `ComicDownloaderGMTPC/Services/ComicReaderService.cs`)
- Reader controls → Read progress: stores progress (evidence: `ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs`)
- Reader controls → Library scanner: uses library data (evidence: `ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs`)
- Reader controls → Disk cache: uses cached data (evidence: `ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs`)
- Reader controls → Drive sync: syncs reading data (evidence: `ComicDownloaderGMTPC/ViewModels/ComicReaderViewModel.cs`)
- Main controls → App configuration: uses (evidence: `ComicDownloaderGMTPC/ViewModels/MainViewModel.cs`)
