twine_core/application/
files.rs1use std::path::{Path, PathBuf};
2
3use super::{Application, ApplicationError};
4use crate::files::{FileError, FileSaveOutcome, FileSaveRequest, FileSnapshot};
5
6impl Application {
7 pub fn save_file(
13 &self,
14 request: &FileSaveRequest,
15 ) -> Result<FileSaveOutcome, ApplicationError> {
16 let _commands = self
17 .commands
18 .lock()
19 .map_err(|_| ApplicationError::Poisoned)?;
20 if self.lock_inner()?.folders.state().open_folder.as_deref()
21 != Some(request.folder.as_path())
22 {
23 return Err(FileError::FolderChanged.into());
24 }
25 let result = crate::files::save(request);
26 self.files.clear();
28 Ok(result?)
29 }
30
31 pub fn poll_files(
38 &self,
39 folder: &Path,
40 directories: &[PathBuf],
41 file: Option<&Path>,
42 revision: Option<u64>,
43 ) -> Result<Option<FileSnapshot>, ApplicationError> {
44 let _commands = self
45 .commands
46 .lock()
47 .map_err(|_| ApplicationError::Poisoned)?;
48 if self.lock_inner()?.folders.state().open_folder.as_deref() != Some(folder) {
49 return Err(FileError::FolderChanged.into());
50 }
51 Ok(self.files.poll(folder, directories, file, revision)?)
52 }
53}