Delete unused
This commit is contained in:
parent
1673f54609
commit
2d909dd716
105
plan.md
105
plan.md
@ -1,105 +0,0 @@
|
||||
# Waycast Architecture Refactoring Plan
|
||||
|
||||
## Objective
|
||||
Separate "Waycast" core logic from UI implementation to enable multiple UI types (GTK, terminal, web, etc.) in the future.
|
||||
|
||||
## Current State Analysis
|
||||
|
||||
Right now `WaycastLauncher` has mixed responsibilities:
|
||||
- Plugin management and initialization
|
||||
- Search/filtering logic
|
||||
- GTK UI creation and event handling
|
||||
- Widget rendering and selection
|
||||
|
||||
## Proposed Architecture
|
||||
|
||||
### 1. Core Launcher Layer (`src/launcher/`)
|
||||
```rust
|
||||
pub struct WaycastLauncher {
|
||||
plugins: Vec<Arc<dyn LauncherPlugin>>,
|
||||
plugins_show_always: Vec<Arc<dyn LauncherPlugin>>,
|
||||
plugins_by_prefix: HashMap<String, Arc<dyn LauncherPlugin>>,
|
||||
current_results: Vec<Box<dyn LauncherListItem>>,
|
||||
}
|
||||
|
||||
impl WaycastLauncher {
|
||||
pub fn new() -> LauncherBuilder { ... }
|
||||
pub fn add_plugin(plugin: Box<dyn LauncherPlugin>) -> Self { ... }
|
||||
pub fn init_plugins(&self) { ... }
|
||||
pub fn get_default_results(&mut self) -> &Vec<Box<dyn LauncherListItem>> { ... }
|
||||
pub fn search(&mut self, query: &str) -> &Vec<Box<dyn LauncherListItem>> { ... }
|
||||
pub fn execute_item(&self, index: usize) -> Result<(), LaunchError> { ... }
|
||||
}
|
||||
```
|
||||
|
||||
### 2. UI Abstraction Layer (`src/ui/`)
|
||||
```rust
|
||||
pub trait LauncherUI {
|
||||
fn show(&self);
|
||||
fn hide(&self);
|
||||
fn set_results(&mut self, results: &[Box<dyn LauncherListItem>]);
|
||||
}
|
||||
|
||||
pub struct LauncherUIController {
|
||||
launcher: WaycastLauncher,
|
||||
ui: Box<dyn LauncherUI>,
|
||||
}
|
||||
```
|
||||
|
||||
### 3. GTK Implementation (`src/ui/gtk/`)
|
||||
```rust
|
||||
pub struct GtkLauncherUI {
|
||||
window: ApplicationWindow,
|
||||
list_view: ListView,
|
||||
list_store: ListStore,
|
||||
// ... gtk specific fields
|
||||
}
|
||||
|
||||
impl LauncherUI for GtkLauncherUI { ... }
|
||||
```
|
||||
|
||||
### 4. Future Terminal UI (`src/ui/terminal/`)
|
||||
```rust
|
||||
pub struct TerminalLauncherUI {
|
||||
// crossterm/ratatui components
|
||||
}
|
||||
|
||||
impl LauncherUI for TerminalLauncherUI { ... }
|
||||
```
|
||||
|
||||
## Implementation Plan
|
||||
|
||||
### Phase 1: Extract Core Launcher
|
||||
1. Create `src/launcher/mod.rs`
|
||||
2. Move plugin management from `WaycastLauncher` to new `WaycastCore`
|
||||
3. Move search/filtering logic to core
|
||||
4. Keep UI-specific code in current location
|
||||
|
||||
### Phase 2: Create UI Abstraction
|
||||
1. Define `LauncherUI` trait
|
||||
2. Create `LauncherUIController` to coordinate core + UI
|
||||
3. Update `main.rs` to use controller pattern
|
||||
|
||||
### Phase 3: Refactor GTK Implementation
|
||||
1. Move GTK code to `src/ui/gtk/`
|
||||
2. Implement `LauncherUI` trait for GTK
|
||||
3. Remove UI logic from core launcher
|
||||
|
||||
### Phase 4: Clean Interface
|
||||
1. Define clean events/callbacks between core and UI
|
||||
2. Handle UI -> Core communication (search input, item selection)
|
||||
3. Handle Core -> UI communication (results updates, state changes)
|
||||
|
||||
## Key Benefits
|
||||
|
||||
- **Plugin logic** stays UI-agnostic
|
||||
- **Search/filtering** can be unit tested without UI
|
||||
- **Multiple UIs** can share the same core
|
||||
- **Clear separation** of data vs presentation
|
||||
- **Future expansion** for web UI, CLI, etc.
|
||||
|
||||
## Implementation Status
|
||||
- [x] Phase 1: Extract Core Launcher
|
||||
- [x] Phase 2: Create UI Abstraction
|
||||
- [x] Phase 3: Refactor GTK Implementation
|
||||
- [x] Phase 4: Clean Interface
|
Loading…
x
Reference in New Issue
Block a user