pub struct RecoveryService { /* private fields */ }Expand description
The main recovery service
This is the high-level interface for the recovery system. It manages the session lock and coordinates buffer recovery.
Implementations§
Source§impl RecoveryService
impl RecoveryService
Sourcepub fn with_config(config: RecoveryConfig) -> Result<Self>
pub fn with_config(config: RecoveryConfig) -> Result<Self>
Create a new recovery service with custom config
Sourcepub fn with_storage_dir(storage_dir: PathBuf) -> Self
pub fn with_storage_dir(storage_dir: PathBuf) -> Self
Create a new recovery service with a custom storage directory This is useful for testing with isolated temporary directories
Sourcepub fn with_config_and_dir(config: RecoveryConfig, storage_dir: PathBuf) -> Self
pub fn with_config_and_dir(config: RecoveryConfig, storage_dir: PathBuf) -> Self
Create a new recovery service with custom config and storage directory
Sourcepub fn with_scope(
config: RecoveryConfig,
base_recovery_dir: &Path,
scope: &RecoveryScope,
) -> Self
pub fn with_scope( config: RecoveryConfig, base_recovery_dir: &Path, scope: &RecoveryScope, ) -> Self
Create a new recovery service scoped to a session or working directory.
Performs one-time migration of old flat-layout recovery files if needed.
Sourcepub fn is_enabled(&self) -> bool
pub fn is_enabled(&self) -> bool
Check if recovery is enabled
Sourcepub fn storage(&self) -> &RecoveryStorage
pub fn storage(&self) -> &RecoveryStorage
Get the storage backend
Sourcepub fn should_offer_recovery(&self) -> Result<bool>
pub fn should_offer_recovery(&self) -> Result<bool>
Check if we should offer recovery (crash detected)
Sourcepub fn start_session(&mut self) -> Result<()>
pub fn start_session(&mut self) -> Result<()>
Start a new session (call on editor startup after recovery handling)
Sourcepub fn end_session_preserving(&mut self, preserve_ids: &[String]) -> Result<()>
pub fn end_session_preserving(&mut self, preserve_ids: &[String]) -> Result<()>
End the session cleanly (call on normal editor shutdown)
When preserve_ids is provided, recovery files matching those IDs
are kept (used to persist unnamed buffer contents across sessions).
Sourcepub fn end_session(&mut self) -> Result<()>
pub fn end_session(&mut self) -> Result<()>
End the session cleanly (call on normal editor shutdown)
Sourcepub fn needs_auto_recovery_save(
&self,
_buffer_id: &str,
recovery_pending: bool,
) -> bool
pub fn needs_auto_recovery_save( &self, _buffer_id: &str, recovery_pending: bool, ) -> bool
Check if a buffer needs auto-recovery-save
Returns true if recovery_pending is true. The recovery_pending flag is now tracked on the buffer itself (TextBuffer.recovery_pending) rather than in this service.
Sourcepub fn get_buffer_id(&self, path: Option<&Path>) -> String
pub fn get_buffer_id(&self, path: Option<&Path>) -> String
Get buffer ID for a path
Sourcepub fn save_buffer(
&mut self,
buffer_id: &str,
chunks: Vec<RecoveryChunk>,
original_path: Option<&Path>,
buffer_name: Option<&str>,
line_count: Option<usize>,
original_file_size: usize,
final_size: usize,
) -> Result<()>
pub fn save_buffer( &mut self, buffer_id: &str, chunks: Vec<RecoveryChunk>, original_path: Option<&Path>, buffer_name: Option<&str>, line_count: Option<usize>, original_file_size: usize, final_size: usize, ) -> Result<()>
Save a buffer’s content for recovery
All recovery uses the chunked format:
- For small files/new buffers: pass a single chunk containing full content with offset=0, original_len=0, original_file_size=0
- For large files: pass only the modified chunks with their offsets
§Parameters
buffer_id: Unique identifier for the bufferchunks: The content chunks to saveoriginal_path: Path to the original file (None for new buffers)buffer_name: Display name for the bufferline_count: Number of lines in the bufferoriginal_file_size: Size of the original file (0 for new buffers)final_size: Total size after applying all modifications
Sourcepub fn delete_buffer_recovery(&mut self, buffer_id: &str) -> Result<()>
pub fn delete_buffer_recovery(&mut self, buffer_id: &str) -> Result<()>
Delete recovery for a buffer (call when buffer is saved normally or closed)
Sourcepub fn list_recoverable(&self) -> Result<Vec<RecoveryEntry>>
pub fn list_recoverable(&self) -> Result<Vec<RecoveryEntry>>
List all recoverable entries
Sourcepub fn load_recovery(&self, entry: &RecoveryEntry) -> Result<RecoveryResult>
pub fn load_recovery(&self, entry: &RecoveryEntry) -> Result<RecoveryResult>
Load recovery content for a specific entry
For entries with original_file_size > 0, returns RecoveredChunks so the caller can apply chunks directly to the buffer (more efficient than full reconstruction). For new buffer entries (original_file_size == 0), the full content is in the chunks.
Sourcepub fn load_recovery_with_original(
&self,
entry: &RecoveryEntry,
original_file: &Path,
) -> Result<RecoveryResult>
pub fn load_recovery_with_original( &self, entry: &RecoveryEntry, original_file: &Path, ) -> Result<RecoveryResult>
Load recovery with a provided original file path
Use this when the original file has moved or you want to specify a different source.
Sourcepub fn accept_recovery(
&mut self,
entry: &RecoveryEntry,
) -> Result<RecoveryResult>
pub fn accept_recovery( &mut self, entry: &RecoveryEntry, ) -> Result<RecoveryResult>
Accept recovery for an entry (load and delete recovery file)
Sourcepub fn discard_recovery(&mut self, entry: &RecoveryEntry) -> Result<()>
pub fn discard_recovery(&mut self, entry: &RecoveryEntry) -> Result<()>
Discard recovery for an entry
Sourcepub fn discard_all_recovery(&mut self) -> Result<usize>
pub fn discard_all_recovery(&mut self) -> Result<usize>
Discard all recovery files
Sourcepub fn cleanup_old(&self) -> Result<usize>
pub fn cleanup_old(&self) -> Result<usize>
Clean up old recovery files (older than max_recovery_age_secs)
Sourcepub fn cleanup_orphans(&self) -> Result<usize>
pub fn cleanup_orphans(&self) -> Result<usize>
Clean up orphaned files
Trait Implementations§
Source§impl Debug for RecoveryService
impl Debug for RecoveryService
Auto Trait Implementations§
impl Freeze for RecoveryService
impl RefUnwindSafe for RecoveryService
impl Send for RecoveryService
impl Sync for RecoveryService
impl Unpin for RecoveryService
impl UnsafeUnpin for RecoveryService
impl UnwindSafe for RecoveryService
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more