Skip to content

Commit

Permalink
Merge pull request #21 from nordic-dev-net/cargo_workspace
Browse files Browse the repository at this point in the history
Cargo workspace
  • Loading branch information
Danielprobst22 authored Dec 22, 2023
2 parents 846de4b + 5683389 commit d215689
Show file tree
Hide file tree
Showing 9 changed files with 130 additions and 78 deletions.
12 changes: 12 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 9 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
[package]
name = "hydrophonitor-cli"
version = "0.1.0"
edition = "2021"
[workspace]

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
members = [
"cli",
"lib",
]

[dependencies]
[workspace.dependencies]
anyhow = "1.0.70"
clap = { version = "4.1.11", features = ["derive"] }
clap-verbosity-flag = "2.1.0"
env_logger = "0.10.1"
hound = "3.5.0"
indicatif = "0.17.3"
walkdir = "2.3.3"
log = "0.4"
env_logger = "0.10.1"
clap-verbosity-flag = "2.1.0"
walkdir = "2.3.3"
17 changes: 17 additions & 0 deletions cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[package]
name = "hydrophonitor-cli"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
hydrophonitor-lib = { path = "../lib" }
anyhow.workspace = true
clap.workspace = true
clap-verbosity-flag.workspace = true
env_logger.workspace = true
hound.workspace = true
indicatif.workspace = true
log.workspace = true
walkdir.workspace = true
File renamed without changes.
34 changes: 34 additions & 0 deletions cli/src/import.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
use std::path::PathBuf;

use clap::Parser;

use hydrophonitor_lib::import::import;

#[derive(Parser, Debug)]
#[clap(about = "Import audio from an SD card.")]
pub struct Import {
/// Path to USB mass storage or SD where data will be imported from. You can find the path to
/// the SD card by running `lsblk` in the terminal.
#[clap(short, long, required = true)]
pub device: PathBuf,

/// Path to the output folder. If not specified, the output folder will be
/// the current directory.
#[clap(short, long)]
pub output: Option<PathBuf>,

///Runs a clean after import is complete.
#[clap(long, action)]
pub clean_imported: bool,

///Generates compressed previews of audio files.
#[clap(long, action)]
pub audio_previews: bool,
}

impl Import {
//TODO old logic; has to be changed to match new commands
pub fn import(&mut self) {
import(&mut self.device, self.output.clone())
}
}
File renamed without changes.
13 changes: 13 additions & 0 deletions lib/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[package]
name = "hydrophonitor-lib"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
anyhow.workspace = true
hound.workspace = true
indicatif.workspace = true
log.workspace = true
walkdir.workspace = true
113 changes: 44 additions & 69 deletions src/import.rs → lib/src/import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,84 +2,59 @@ use std::error::Error;
use std::fs;
use std::path::PathBuf;

use clap::Parser;
use hound::{WavReader, WavWriter};
use indicatif::ProgressBar;
use log::{error, info};
use walkdir::WalkDir;

const DATA_FOLDER: &str = "home/pi/data";

#[derive(Parser, Debug)]
#[clap(about = "Import audio from an SD card.")]
pub struct Import {
/// Path to USB mass storage or SD where data will be imported from. You can find the path to
/// the SD card by running `lsblk` in the terminal.
#[clap(short, long, required = true)]
pub device: PathBuf,

/// Path to the output folder. If not specified, the output folder will be
/// the current directory.
#[clap(short, long)]
pub output: Option<PathBuf>,

///Runs a clean after import is complete.
#[clap(long, action)]
pub clean_imported: bool,

///Generates compressed previews of audio files.
#[clap(long, action)]
pub audio_previews: bool,
}
//TODO old logic
pub fn import(device: &mut PathBuf, output: Option<PathBuf>) {
info!("Importing audio from SD card at {:?}", device);

impl Import {
//TODO old logic; has to be changed to match new commands
pub fn import(&mut self) {
info!("Importing audio from SD card at {:?}", self.device);

if let Some(output_folder) = &self.output {
info!("Output folder: {:?}", output_folder);
import_from_sd(&mut self.device, Some(output_folder.clone())).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
} else {
info!("Output folder: current directory");
import_from_sd(&mut self.device, None).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
}
if let Some(output_folder) = &output {
info!("Output folder: {:?}", output_folder);
import_from_sd(device, Some(output_folder.clone())).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
} else {
info!("Output folder: current directory");
import_from_sd(device, None).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
}

// Iterate folders inside output folder. Inside each iterated folder there is
// a folder called "audio" which contains the wav files. Merge them into a single
// wav file and delete the "audio" folder.
let output_folder = match self.output.clone() {
Some(output_folder) => output_folder,
None => std::env::current_dir().unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
})
};

for entry in WalkDir::new(output_folder.clone()) {
let entry = entry.unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
let path = entry.path();
if path.is_dir() {
let audio_folder = path.join("audio");
if audio_folder.exists() {
merge_wavs(&audio_folder, &PathBuf::from(path)).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
fs::remove_dir_all(audio_folder).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
}
// Iterate folders inside output folder. Inside each iterated folder there is
// a folder called "audio" which contains the wav files. Merge them into a single
// wav file and delete the "audio" folder.
let output_folder = match output.clone() {
Some(output_folder) => output_folder,
None => std::env::current_dir().unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
})
};

for entry in WalkDir::new(output_folder.clone()) {
let entry = entry.unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
let path = entry.path();
if path.is_dir() {
let audio_folder = path.join("audio");
if audio_folder.exists() {
merge_wavs(&audio_folder, &PathBuf::from(path)).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
fs::remove_dir_all(audio_folder).unwrap_or_else(|err| {
error!("Error: {}", err);
std::process::exit(1);
});
}
}
}
Expand Down
1 change: 1 addition & 0 deletions lib/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub mod import;

0 comments on commit d215689

Please sign in to comment.