Skip to content

Commit 2889558

Browse files
unhappychoiceclaude
andcommitted
refactor: implement DataProvider pattern for system screens
Implement DataProvider pattern for: - VersionCheckScreen: No data needed (empty provider) - PanicScreen: No data needed (empty provider) These system screens don't require initialization data and use empty providers. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent c67127d commit 2889558

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

src/presentation/game/screens/panic_screen.rs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use crate::domain::events::EventBus;
2-
use crate::domain::models::{SessionResult, TotalResult};
32
use crate::infrastructure::logging::get_current_log_file_path;
43
use crate::presentation::game::events::NavigateTo;
5-
use crate::presentation::game::{Screen, UpdateStrategy};
4+
use crate::presentation::game::{RenderBackend, Screen, ScreenDataProvider, ScreenType, UpdateStrategy};
65
use crate::presentation::ui::Colors;
76
use crate::Result;
87
use ratatui::{
@@ -154,11 +153,35 @@ impl PanicScreen {
154153
}
155154
}
156155

156+
pub struct PanicScreenDataProvider;
157+
158+
impl ScreenDataProvider for PanicScreenDataProvider {
159+
fn provide(&self) -> Result<Box<dyn std::any::Any>> {
160+
Ok(Box::new(()))
161+
}
162+
}
163+
157164
impl Screen for PanicScreen {
158-
fn init(&mut self) -> Result<()> {
165+
fn get_type(&self) -> ScreenType {
166+
ScreenType::Panic
167+
}
168+
169+
fn default_provider() -> Box<dyn ScreenDataProvider>
170+
where
171+
Self: Sized,
172+
{
173+
Box::new(PanicScreenDataProvider)
174+
}
175+
176+
fn get_render_backend(&self) -> RenderBackend {
177+
RenderBackend::Ratatui
178+
}
179+
180+
fn init_with_data(&mut self, _data: Box<dyn std::any::Any>) -> Result<()> {
159181
Ok(())
160182
}
161183

184+
162185
fn handle_key_event(
163186
&mut self,
164187
key_event: crossterm::event::KeyEvent,
@@ -176,8 +199,6 @@ impl Screen for PanicScreen {
176199
fn render_crossterm_with_data(
177200
&mut self,
178201
_stdout: &mut Stdout,
179-
_session_result: Option<&SessionResult>,
180-
_total_result: Option<&TotalResult>,
181202
) -> Result<()> {
182203
// This is a fallback - panic screen should use ratatui
183204
Ok(())

src/presentation/game/screens/version_check_screen.rs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
use crate::domain::events::EventBus;
2-
use crate::domain::models::{SessionResult, TotalResult};
32
use crate::presentation::game::events::NavigateTo;
43
use crate::presentation::game::views::VersionCheckView;
5-
use crate::presentation::game::{Screen, UpdateStrategy};
4+
use crate::presentation::game::{RenderBackend, Screen, ScreenDataProvider, ScreenType, UpdateStrategy};
65
use crate::Result;
76
use crossterm::{
87
event::{self, Event, KeyCode},
@@ -69,7 +68,34 @@ impl VersionCheckScreen {
6968
}
7069
}
7170

71+
pub struct VersionCheckScreenDataProvider;
72+
73+
impl ScreenDataProvider for VersionCheckScreenDataProvider {
74+
fn provide(&self) -> Result<Box<dyn std::any::Any>> {
75+
Ok(Box::new(()))
76+
}
77+
}
78+
7279
impl Screen for VersionCheckScreen {
80+
fn get_type(&self) -> ScreenType {
81+
ScreenType::VersionCheck
82+
}
83+
84+
fn default_provider() -> Box<dyn ScreenDataProvider>
85+
where
86+
Self: Sized,
87+
{
88+
Box::new(VersionCheckScreenDataProvider)
89+
}
90+
91+
fn get_render_backend(&self) -> RenderBackend {
92+
RenderBackend::Ratatui
93+
}
94+
95+
fn init_with_data(&mut self, _data: Box<dyn std::any::Any>) -> Result<()> {
96+
Ok(())
97+
}
98+
7399
fn handle_key_event(&mut self, key_event: event::KeyEvent) -> Result<()> {
74100
use crossterm::event::{KeyCode, KeyModifiers};
75101
match key_event.code {
@@ -88,8 +114,6 @@ impl Screen for VersionCheckScreen {
88114
fn render_crossterm_with_data(
89115
&mut self,
90116
_stdout: &mut Stdout,
91-
_session_result: Option<&SessionResult>,
92-
_total_result: Option<&TotalResult>,
93117
) -> crate::Result<()> {
94118
// Version check is now handled by ScreenManager
95119
// let current_version = env!("CARGO_PKG_VERSION");

0 commit comments

Comments
 (0)