Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 28 additions & 9 deletions app/src-tauri/src/audio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,9 @@ pub(crate) async fn blocking<T: Send + 'static>(

#[tauri::command]
pub async fn audio_assets_dir(bridge: State<'_, CoreBridge>, page: String) -> IpcResult<String> {
let dir = bridge.with(|bridge| assets_dir(bridge, &page))?;
let dir = bridge
.run(move |bridge| bridge.with(|bridge| assets_dir(bridge, &page)))
.await?;
Ok(dir.to_string_lossy().into_owned())
}

Expand All @@ -217,7 +219,10 @@ pub async fn audio_prepare(
bridge: State<'_, CoreBridge>,
mut request: StartRequest,
) -> IpcResult<Prepared> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &request.assets_dir.to_string_lossy()))?;
let assets_dir = request.assets_dir.to_string_lossy().into_owned();
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
request.assets_dir = dir;
blocking(&state, move |state| state.lock().prepare(request).map_err(audio_error)).await
}
Expand All @@ -232,12 +237,16 @@ pub async fn audio_adopt_tracks(
entry: RecordingEntry,
growing: bool,
) -> IpcResult<()> {
let (dir, page) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, page) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
let assets = blocking(&state, move |state| {
track_assets(&state.0.services, &dir, &entry, growing)
})
.await?;
bridge.with(|bridge| adopt(bridge, page, assets))
bridge
.run(move |bridge| bridge.with(|bridge| adopt(bridge, page, assets)))
.await
}

#[tauri::command]
Expand Down Expand Up @@ -291,7 +300,9 @@ pub async fn audio_recover(
assets_dir: String,
entry: RecordingEntry,
) -> IpcResult<Finished> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |state| {
state.lock().recover(&dir, &entry).map_err(audio_error)
})
Expand All @@ -306,7 +317,9 @@ pub async fn audio_open_playback(
entry: RecordingEntry,
device: Option<String>,
) -> IpcResult<PlaybackInfo> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |state| {
state
.lock()
Expand Down Expand Up @@ -381,7 +394,9 @@ pub async fn audio_trim_silence(
assets_dir: String,
entry: RecordingEntry,
) -> IpcResult<Option<Edited>> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |state| {
let services = &state.0.services;
let summary = entry.summary().map_err(audio_error)?;
Expand All @@ -402,7 +417,9 @@ pub async fn audio_remove_part(
start_ns: u64,
end_ns: u64,
) -> IpcResult<Edited> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
if end_ns <= start_ns {
return Err(IpcError::invalid("endNs", "The part to remove ends before it starts."));
}
Expand All @@ -426,7 +443,9 @@ pub async fn audio_delete_files(
assets_dir: String,
entry: RecordingEntry,
) -> IpcResult<u64> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |_| {
let summary = entry.summary().map_err(audio_error)?;
storage::delete_audio(&dir, &summary).map_err(audio_error)
Expand Down
41 changes: 28 additions & 13 deletions app/src-tauri/src/audio_more/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,9 @@ pub async fn audio_split(
entry: RecordingEntry,
at_ns: u64,
) -> IpcResult<Split> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |state| {
let services = state.services();
let summary = entry.summary().map_err(audio_error)?;
Expand All @@ -90,7 +92,9 @@ pub async fn audio_enhance(
assets_dir: String,
entry: RecordingEntry,
) -> IpcResult<Edited> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |state| {
let services = state.services();
let summary = entry.summary().map_err(audio_error)?;
Expand Down Expand Up @@ -118,7 +122,9 @@ pub async fn audio_compress(
entry: RecordingEntry,
quality: String,
) -> IpcResult<Edited> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |state| {
let services = state.services();
let summary = entry.summary().map_err(audio_error)?;
Expand Down Expand Up @@ -150,7 +156,7 @@ pub struct Stored {
/// What every recording of every open notebook takes, largest first. Pages in locked sections are left out.
#[tauri::command]
pub async fn audio_storage_scan(state: State<'_, AudioState>, bridge: State<'_, CoreBridge>) -> IpcResult<Vec<Stored>> {
let notebooks = bridge.notebooks();
let notebooks = bridge.run(|bridge| Ok(bridge.notebooks())).await?;
blocking(&state, move |_| {
let mut found = Vec::new();
for notebook in notebooks {
Expand Down Expand Up @@ -212,13 +218,17 @@ fn recordings_of(page_dir: &Path) -> Vec<RecordingEntry> {
#[tauri::command]
pub async fn audio_purge_history(bridge: State<'_, CoreBridge>, page: String) -> IpcResult<u32> {
let id = PageId::parse(&page).map_err(|_| IpcError::invalid("page", "That isn't a page ID."))?;
let notebook = bridge.with(|bridge| {
bridge
.core
.find_node(id.0)
.map(|(notebook, _)| notebook)
.ok_or_else(|| IpcError::new("notFound", "That page isn't in a notebook."))
})?;
let notebook = bridge
.run(move |bridge| {
bridge.with(|bridge| {
bridge
.core
.find_node(id.0)
.map(|(notebook, _)| notebook)
.ok_or_else(|| IpcError::new("notFound", "That page isn't in a notebook."))
})
})
.await?;
tauri::async_runtime::spawn_blocking(move || {
notebook
.delete_history(HistoryScope::Page(id), false)
Expand All @@ -241,7 +251,9 @@ pub async fn audio_export(
dest: String,
format: String,
) -> IpcResult<u64> {
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &assets_dir))?;
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
let dest = PathBuf::from(dest);
if !grants.take(&dest) {
return Err(IpcError::invalid("dest", "Choose where to save before exporting."));
Expand Down Expand Up @@ -311,7 +323,10 @@ pub async fn audio_import_file(
InvokeBody::Raw(bytes) => bytes.clone(),
InvokeBody::Json(_) => return Err(IpcError::invalid("body", "The file must come as raw bytes.")),
};
let (dir, _) = bridge.with(|bridge| checked_dir(bridge, &header.assets_dir))?;
let assets_dir = header.assets_dir.clone();
let (dir, _) = bridge
.run(move |bridge| bridge.with(|bridge| checked_dir(bridge, &assets_dir)))
.await?;
blocking(&state, move |state| {
let services = state.services();
let extension: String = Path::new(&header.name)
Expand Down
Loading
Loading