# rhilip/iyuu-gui architecture

> Architecture diagram of the GitHub repository rhilip/iyuu-gui, 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/rhilip/iyuu-gui
- Repository: https://github.com/rhilip/iyuu-gui

## Overview

IYUU GUI is a desktop frontend for configuring tracker sites and BitTorrent clients, then running IYUU-backed reseed missions. The main path is login and site/client setup, mission launch, querying IYUU for matching hashes, constructing tracker download links, and adding torrents to clients; mission state and logs support progress and retry/rate-limit behavior. Backup/restore and notification settings are additional product capabilities. The sampled excerpts establish the core calls; some view and store wiring is documented only by the source index, so uncertain links are omitted.

Main entry points: [`src/plugins/mission/reseed.ts`](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/mission/reseed.ts) (Mission runner), [`src/router/index.ts`](https://github.com/rhilip/iyuu-gui/blob/master/src/router/index.ts) (Page routing), [`src/store/store-accessor.ts`](https://github.com/rhilip/iyuu-gui/blob/master/src/store/store-accessor.ts) (Store accessors), [`src/plugins/sites/factory.ts`](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/sites/factory.ts) (Tracker link factory)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop UI"]
  node_routes["Page routing<br/>[index.ts]"]
  node_login["Login view<br/>[Login.vue]"]
  node_mission_view["Mission view<br/>[Mission.vue]"]
  node_reseed_form["Reseed controls<br/>[Reseed.vue]"]
end

subgraph group_config["Configuration"]
  node_site_settings["Site settings<br/>[Site.vue]"]
  node_site_forms["Site forms"]
  node_client_settings["Client settings<br/>[BtClient.vue]"]
  node_client_forms["Client forms"]
  node_backup_view["Backup UI<br/>[Backup.vue]"]
  node_backup["Backup restore<br/>[backup.ts]"]
end

subgraph group_mission["Reseed workflow"]
  node_reseed["Mission runner<br/>[reseed.ts]"]
  node_site_factory["Tracker link factory<br/>[factory.ts]"]
  node_site_default["Default tracker links<br/>[default.ts]"]
  node_site_plugins["Tracker adapters"]
  node_bt_factory["Client factory<br/>[factory.ts]"]
  node_bt_adapters["Client adapters"]
end

subgraph group_integrations["External integrations"]
  node_iyuu_api["IYUU API client<br/>[iyuu.ts]"]
  node_tracker_sites["Tracker sites"]
  node_iyuu_service["IYUU service"]
  node_bt_clients["BitTorrent clients"]
  node_notify["WeChat notification<br/>[iyuu.ts]"]
end

subgraph group_state["Application state"]
  node_store[("Vuex store<br/>[index.ts]")]
  node_store_access["Store accessors<br/>[store-accessor.ts]"]
  node_iyuu_state["Account and sites<br/>[IYUU.ts]"]
  node_mission_state["Mission state<br/>[Mission.ts]"]
  node_status_state["Status counters<br/>[Status.ts]"]
end

node_user(("Operator"))

node_user -->|"navigates"| node_routes
node_routes -->|"routes to"| node_login
node_routes -->|"routes to"| node_mission_view
node_routes -->|"routes to"| node_site_settings
node_routes -->|"routes to"| node_client_settings
node_routes -->|"routes to"| node_backup_view
node_mission_view -->|"renders"| node_reseed_form
node_site_settings -->|"uses forms"| node_site_forms
node_client_settings -->|"uses forms"| node_client_forms
node_backup_view -->|"invokes"| node_backup
node_login -->|"authenticates"| node_iyuu_api
node_site_forms -->|"selects adapter"| node_site_factory
node_client_forms -->|"selects client"| node_bt_factory
node_reseed_form -->|"starts mission"| node_reseed
node_reseed -->|"creates client"| node_bt_factory
node_reseed -->|"queries hashes"| node_iyuu_api
node_reseed -->|"builds torrent link"| node_site_factory
node_site_factory -->|"dispatches default"| node_site_default
node_site_factory -->|"dispatches adapters"| node_site_plugins
node_bt_factory -->|"creates adapter"| node_bt_adapters
node_bt_adapters -.->|"calls client API"| node_bt_clients
node_site_default -->|"builds download URL"| node_tracker_sites
node_iyuu_api -->|"sends API requests"| node_iyuu_service
node_iyuu_api -->|"updates sites/token"| node_iyuu_state
node_reseed -->|"writes logs/state"| node_mission_state
node_reseed -->|"updates counters"| node_status_state
node_store -->|"initializes modules"| node_store_access
node_store_access -->|"registers"| node_iyuu_state
node_store_access -->|"registers"| node_mission_state
node_store_access -->|"registers"| node_status_state
node_reseed -.->|"sends optional notice"| node_notify
node_notify -->|"posts message"| node_iyuu_service

click node_routes "https://github.com/rhilip/iyuu-gui/blob/master/src/router/index.ts"
click node_login "https://github.com/rhilip/iyuu-gui/blob/master/src/views/Login.vue"
click node_mission_view "https://github.com/rhilip/iyuu-gui/blob/master/src/views/Mission.vue"
click node_reseed_form "https://github.com/rhilip/iyuu-gui/blob/master/src/components/Mission/Reseed.vue"
click node_site_settings "https://github.com/rhilip/iyuu-gui/blob/master/src/views/Setting/Site.vue"
click node_site_forms "https://github.com/rhilip/iyuu-gui/tree/master/src/components/Setting/Site"
click node_client_settings "https://github.com/rhilip/iyuu-gui/blob/master/src/views/Setting/BtClient.vue"
click node_client_forms "https://github.com/rhilip/iyuu-gui/tree/master/src/components/Setting/BtClient"
click node_backup_view "https://github.com/rhilip/iyuu-gui/blob/master/src/views/Setting/Backup.vue"
click node_backup "https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/backup.ts"
click node_reseed "https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/mission/reseed.ts"
click node_site_factory "https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/sites/factory.ts"
click node_site_default "https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/sites/default.ts"
click node_site_plugins "https://github.com/rhilip/iyuu-gui/tree/master/src/plugins/sites"
click node_bt_factory "https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/btclient/factory.ts"
click node_bt_adapters "https://github.com/rhilip/iyuu-gui/tree/master/src/plugins/btclient"
click node_iyuu_api "https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/iyuu.ts"
click node_store "https://github.com/rhilip/iyuu-gui/blob/master/src/store/index.ts"
click node_store_access "https://github.com/rhilip/iyuu-gui/blob/master/src/store/store-accessor.ts"
click node_iyuu_state "https://github.com/rhilip/iyuu-gui/blob/master/src/store/modules/IYUU.ts"
click node_mission_state "https://github.com/rhilip/iyuu-gui/blob/master/src/store/modules/Mission.ts"
click node_status_state "https://github.com/rhilip/iyuu-gui/blob/master/src/store/modules/Status.ts"
click node_notify "https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/iyuu.ts"

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_routes,node_login,node_mission_view,node_reseed_form toneBlue
class node_site_settings,node_site_forms,node_client_settings,node_client_forms,node_backup_view,node_backup toneAmber
class node_reseed,node_site_factory,node_site_default,node_site_plugins,node_bt_factory,node_bt_adapters toneMint
class node_iyuu_api,node_tracker_sites,node_iyuu_service,node_bt_clients,node_notify toneRose
class node_store,node_store_access,node_iyuu_state,node_mission_state,node_status_state,node_user toneIndigo
```

## Components

### Desktop UI

- [Page routing](https://github.com/rhilip/iyuu-gui/blob/master/src/router/index.ts): `src/router/index.ts`
- [Login view](https://github.com/rhilip/iyuu-gui/blob/master/src/views/Login.vue): `src/views/Login.vue`
- [Mission view](https://github.com/rhilip/iyuu-gui/blob/master/src/views/Mission.vue): `src/views/Mission.vue`
- [Reseed controls](https://github.com/rhilip/iyuu-gui/blob/master/src/components/Mission/Reseed.vue): `src/components/Mission/Reseed.vue`

### Configuration

- [Site settings](https://github.com/rhilip/iyuu-gui/blob/master/src/views/Setting/Site.vue): `src/views/Setting/Site.vue`
- [Site forms](https://github.com/rhilip/iyuu-gui/tree/master/src/components/Setting/Site): `src/components/Setting/Site`
- [Client settings](https://github.com/rhilip/iyuu-gui/blob/master/src/views/Setting/BtClient.vue): `src/views/Setting/BtClient.vue`
- [Client forms](https://github.com/rhilip/iyuu-gui/tree/master/src/components/Setting/BtClient): `src/components/Setting/BtClient`
- [Backup UI](https://github.com/rhilip/iyuu-gui/blob/master/src/views/Setting/Backup.vue): `src/views/Setting/Backup.vue`
- [Backup restore](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/backup.ts): `src/plugins/backup.ts`

### Reseed workflow

- [Mission runner](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/mission/reseed.ts): `src/plugins/mission/reseed.ts`
- [Tracker link factory](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/sites/factory.ts): `src/plugins/sites/factory.ts`
- [Default tracker links](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/sites/default.ts): `src/plugins/sites/default.ts`
- [Tracker adapters](https://github.com/rhilip/iyuu-gui/tree/master/src/plugins/sites): `src/plugins/sites`
- [Client factory](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/btclient/factory.ts): `src/plugins/btclient/factory.ts`
- [Client adapters](https://github.com/rhilip/iyuu-gui/tree/master/src/plugins/btclient): `src/plugins/btclient`

### External integrations

- [IYUU API client](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/iyuu.ts): `src/plugins/iyuu.ts`
- **Tracker sites**
- **IYUU service**
- **BitTorrent clients**
- [WeChat notification](https://github.com/rhilip/iyuu-gui/blob/master/src/plugins/iyuu.ts): `src/plugins/iyuu.ts`

### Application state

- [Vuex store](https://github.com/rhilip/iyuu-gui/blob/master/src/store/index.ts): `src/store/index.ts`
- [Store accessors](https://github.com/rhilip/iyuu-gui/blob/master/src/store/store-accessor.ts): `src/store/store-accessor.ts`
- [Account and sites](https://github.com/rhilip/iyuu-gui/blob/master/src/store/modules/IYUU.ts): `src/store/modules/IYUU.ts`
- [Mission state](https://github.com/rhilip/iyuu-gui/blob/master/src/store/modules/Mission.ts): `src/store/modules/Mission.ts`
- [Status counters](https://github.com/rhilip/iyuu-gui/blob/master/src/store/modules/Status.ts): `src/store/modules/Status.ts`

### Other components

- **Operator**

## Connections

- Operator → Page routing: navigates (evidence: `src/router/index.ts`)
- Page routing → Login view: routes to (evidence: `src/router/index.ts`)
- Page routing → Mission view: routes to (evidence: `src/router/index.ts`)
- Page routing → Site settings: routes to (evidence: `src/router/index.ts`)
- Page routing → Client settings: routes to (evidence: `src/router/index.ts`)
- Page routing → Backup UI: routes to (evidence: `src/router/index.ts`)
- Mission view → Reseed controls: renders (evidence: `src/views/Mission.vue`)
- Site settings → Site forms: uses forms
- Client settings → Client forms: uses forms (evidence: `src/views/Setting/BtClient.vue`)
- Backup UI → Backup restore: invokes (evidence: `src/views/Setting/Backup.vue`)
- Login view → IYUU API client: authenticates (evidence: `src/views/Login.vue`)
- Site forms → Tracker link factory: selects adapter (evidence: `src/components/Setting/Site/SiteAdd.vue`)
- Client forms → Client factory: selects client (evidence: `src/components/Setting/BtClient/ClientAdd.vue`)
- Reseed controls → Mission runner: starts mission (evidence: `src/views/Mission.vue`)
- Mission runner → Client factory: creates client (evidence: `src/plugins/mission/reseed.ts`)
- Mission runner → IYUU API client: queries hashes (evidence: `src/plugins/mission/reseed.ts`)
- Mission runner → Tracker link factory: builds torrent link (evidence: `src/plugins/mission/reseed.ts`)
- Tracker link factory → Default tracker links: dispatches default (evidence: `src/plugins/sites/factory.ts`)
- Tracker link factory → Tracker adapters: dispatches adapters (evidence: `src/plugins/sites/factory.ts`)
- Client factory → Client adapters: creates adapter (evidence: `src/plugins/btclient/factory.ts`)
- Client adapters → BitTorrent clients: calls client API
- Default tracker links → Tracker sites: builds download URL (evidence: `src/plugins/sites/default.ts`)
- IYUU API client → IYUU service: sends API requests (evidence: `src/plugins/iyuu.ts`)
- IYUU API client → Account and sites: updates sites/token (evidence: `src/plugins/iyuu.ts`)
- Mission runner → Mission state: writes logs/state (evidence: `src/plugins/mission/reseed.ts`)
- Mission runner → Status counters: updates counters (evidence: `src/plugins/mission/reseed.ts`)
- Vuex store → Store accessors: initializes modules (evidence: `src/store/index.ts`)
- Store accessors → Account and sites: registers (evidence: `src/store/store-accessor.ts`)
- Store accessors → Mission state: registers (evidence: `src/store/store-accessor.ts`)
- Store accessors → Status counters: registers (evidence: `src/store/store-accessor.ts`)
- Mission runner → WeChat notification: sends optional notice (evidence: `src/plugins/mission/reseed.ts`)
- WeChat notification → IYUU service: posts message (evidence: `src/plugins/iyuu.ts`)
