# maharab4120/file-organizer architecture

> Architecture diagram of the GitHub repository maharab4120/file-organizer, 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/maharab4120/file-organizer
- Repository: https://github.com/maharab4120/file-organizer

## Overview

CloudSort is a desktop file organizer. A user chooses a folder, previews or organizes its files, and can undo the latest move batch or clear history. Organization scans files, classifies them using rule packs, optionally detects duplicates, moves files into category folders, and records moves for undo. Rules can be fetched and cached, with built-in defaults available offline. The graph reflects the sampled Java sources; UI details and some rule-loading behavior are only partially shown.

Main entry points: [`src/main/java/com/fileorganizer/Main.java`](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/Main.java) (JavaFX UI), [`src/main/java/com/fileorganizer/core/FileOrganizer.java`](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/FileOrganizer.java) (Folder organizer), [`src/main/java/com/fileorganizer/core/RuleEngine.java`](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/RuleEngine.java) (Rule engine), [`src/main/java/com/fileorganizer/core/DatabaseManager.java`](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/DatabaseManager.java) (History manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop app"]
  node_launcher["Launcher<br/>[Launcher.java]"]
  node_ui["JavaFX UI<br/>[Main.java]"]
end

subgraph group_rules["Rule management"]
  node_rules_engine["Rule engine<br/>[RuleEngine.java]"]
  node_sorting_rule["Sorting rules<br/>[SortingRule.java]"]
  node_rule_fetcher["Rule fetcher<br/>[RuleFetcher.java]"]
  node_rule_cache["Rule cache<br/>[RuleCache.java]"]
end

subgraph group_organize["File organization"]
  node_organizer["Folder organizer<br/>[FileOrganizer.java]"]
  node_progress["Progress listener"]
  node_hasher["SHA-256 hasher<br/>[FileHasher.java]"]
end

subgraph group_history["Move history"]
  node_database["History manager"]
  node_sqlite[("SQLite history store")]
end

node_user(("User"))
node_folder["Selected folder"]
node_rules_source(("Rules source"))

node_user -->|"operates"| node_ui
node_launcher -->|"launches"| node_ui
node_ui -->|"initializes"| node_database
node_ui -->|"scans and organizes"| node_organizer
node_ui -->|"reads and clears history"| node_database
node_ui -->|"selects"| node_folder
node_organizer -->|"scans and moves"| node_folder
node_organizer -->|"classifies with"| node_rules_engine
node_organizer -->|"hashes duplicates"| node_hasher
node_organizer -->|"logs moves"| node_database
node_organizer -->|"reports progress"| node_progress
node_ui -->|"registers callback"| node_progress
node_ui -->|"downloads and parses"| node_rule_fetcher
node_ui -->|"caches rules"| node_rule_cache
node_ui -->|"uses defaults"| node_rules_engine
node_rule_fetcher -->|"downloads from"| node_rules_source
node_rule_fetcher -->|"parses into"| node_rules_engine
node_rules_engine -->|"checks rules"| node_sorting_rule
node_database -->|"persists history"| node_sqlite

click node_launcher "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/Launcher.java"
click node_ui "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/Main.java"
click node_organizer "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/FileOrganizer.java"
click node_progress "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/ProgressListener.java"
click node_hasher "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/util/FileHasher.java"
click node_rules_engine "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/RuleEngine.java"
click node_sorting_rule "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/SortingRule.java"
click node_rule_fetcher "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/RuleFetcher.java"
click node_rule_cache "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/RuleCache.java"
click node_database "https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/DatabaseManager.java"

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_launcher,node_ui,node_user toneBlue
class node_rules_engine,node_sorting_rule,node_rule_fetcher,node_rule_cache toneAmber
class node_organizer,node_progress,node_hasher toneMint
class node_database,node_sqlite toneRose
class node_folder,node_rules_source toneIndigo
```

## Components

### Desktop app

- [Launcher](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/Launcher.java): `src/main/java/com/fileorganizer/Launcher.java`
- [JavaFX UI](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/Main.java): `src/main/java/com/fileorganizer/Main.java`

### Rule management

- [Rule engine](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/RuleEngine.java): `src/main/java/com/fileorganizer/core/RuleEngine.java`
- [Sorting rules](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/SortingRule.java): `src/main/java/com/fileorganizer/core/SortingRule.java`
- [Rule fetcher](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/RuleFetcher.java): `src/main/java/com/fileorganizer/core/RuleFetcher.java`
- [Rule cache](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/RuleCache.java): `src/main/java/com/fileorganizer/core/RuleCache.java`

### File organization

- [Folder organizer](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/FileOrganizer.java): `src/main/java/com/fileorganizer/core/FileOrganizer.java`
- [Progress listener](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/ProgressListener.java): `src/main/java/com/fileorganizer/core/ProgressListener.java`
- [SHA-256 hasher](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/util/FileHasher.java): `src/main/java/com/fileorganizer/util/FileHasher.java`

### Move history

- [History manager](https://github.com/maharab4120/file-organizer/blob/main/src/main/java/com/fileorganizer/core/DatabaseManager.java): `src/main/java/com/fileorganizer/core/DatabaseManager.java`
- **SQLite history store**

### Other components

- **User**
- **Selected folder**
- **Rules source**

## Connections

- User → JavaFX UI: operates (evidence: `src/main/java/com/fileorganizer/Main.java`)
- Launcher → JavaFX UI: launches (evidence: `src/main/java/com/fileorganizer/Launcher.java`)
- JavaFX UI → History manager: initializes (evidence: `src/main/java/com/fileorganizer/Main.java`)
- JavaFX UI → Folder organizer: scans and organizes (evidence: `src/main/java/com/fileorganizer/Main.java`)
- JavaFX UI → History manager: reads and clears history (evidence: `src/main/java/com/fileorganizer/Main.java`)
- JavaFX UI → Selected folder: selects (evidence: `src/main/java/com/fileorganizer/Main.java`)
- Folder organizer → Selected folder: scans and moves (evidence: `src/main/java/com/fileorganizer/core/FileOrganizer.java`)
- Folder organizer → Rule engine: classifies with (evidence: `src/main/java/com/fileorganizer/core/FileOrganizer.java`)
- Folder organizer → SHA-256 hasher: hashes duplicates (evidence: `src/main/java/com/fileorganizer/core/FileOrganizer.java`)
- Folder organizer → History manager: logs moves (evidence: `src/main/java/com/fileorganizer/core/FileOrganizer.java`)
- Folder organizer → Progress listener: reports progress (evidence: `src/main/java/com/fileorganizer/core/FileOrganizer.java`)
- JavaFX UI → Progress listener: registers callback (evidence: `src/main/java/com/fileorganizer/Main.java`)
- JavaFX UI → Rule fetcher: downloads and parses (evidence: `src/main/java/com/fileorganizer/Main.java`)
- JavaFX UI → Rule cache: caches rules (evidence: `src/main/java/com/fileorganizer/Main.java`)
- JavaFX UI → Rule engine: uses defaults (evidence: `src/main/java/com/fileorganizer/Main.java`)
- Rule fetcher → Rules source: downloads from (evidence: `src/main/java/com/fileorganizer/core/RuleFetcher.java`)
- Rule fetcher → Rule engine: parses into (evidence: `src/main/java/com/fileorganizer/core/RuleFetcher.java`)
- Rule engine → Sorting rules: checks rules (evidence: `src/main/java/com/fileorganizer/core/RuleEngine.java`)
- History manager → SQLite history store: persists history (evidence: `src/main/java/com/fileorganizer/core/DatabaseManager.java`)
