use native_dialog::FileDialog;
use tauri::{Manager, PhysicalSize, Size};
-use std::{env, io::{Error, ErrorKind}, path::PathBuf, sync::Mutex};
+use std::{env, fmt::Display, io::{Error, ErrorKind}, path::PathBuf, sync::Mutex};
+
+#[cfg(target_os = "windows")]
+use std::os::windows::process::CommandExt;
#[macro_use]
extern crate lazy_static;
// Try to format the chapters and panic if it was not able to
let formated_chapters = match format_chapter(&chapter) {
Ok(res) => res,
- Err(_error) => {
+ Err(error) => {
println!("error formating chapters, slicing aborted");
- app.emit_all("backend_error", Payload { message: "formating_issue".to_owned() }).unwrap();
+ app.emit_all("formatting_error", Payload { message: error.to_string() }).unwrap();
return;
},
};
for l in lines.iter(){
if l.is_empty() { break; }
+ if l.len() > 200 { return Err(Error::new(ErrorKind::Other, "Line is too big")); }
let splited_line = l.split(" - ").collect::<Vec<&str>>();
if splited_line.len()<2 || splited_line[1] == "" { // To avoid blank title
return Err(Error::new(ErrorKind::Other, "No title associated with the time code"));
println!("using ffmpeg binary : {}\nwith the following argument : {:?}", resource_path.display(), args);
// launch the command
+ #[cfg(target_os = "windows")]
+ let output = std::process::Command::new(resource_path.as_os_str())
+ .args(args)
+ .creation_flags(0x08000000) // avoid the terminal from showing up
+ .output()
+ .expect("failed to execute process");
+ #[cfg(not (target_os = "windows"))]
let output = std::process::Command::new(resource_path.as_os_str())
.args(args)
.output()
document.getElementById("folderLocation").innerHTML = "please select an output folder"
console.log("please select an output folder");
break;
- case "formating_issue":
- document.getElementById("errorLabel").innerHTML = "error: wrong chapter format. use 0:13 - my title"
- console.log("error: wrong chapter format. use \n0:00 - first song title \n2:13 - second song title \n3:45 - third song title \n...");
- break;
}
-})
\ No newline at end of file
+})
+
+// listen for f0rmating issue from rust backend
+const unlistenformattinginssie = await listen('formatting_error', (event) => {
+ document.getElementById("errorLabel").innerHTML = "error: wrong chapter format. "+ event.payload.message;
+ console.log("error: wrong chapter format. \n"+event.payload.message+"\nuse \n0:00 - first song title \n2:13 - second song title \n3:45 - third song title \n...");z
+})
<h3>Welcome to the Rusty slicer! <img src="assets/cat-vibe-vibe-cat.gif"></h1>
<div class="select-file">
<div>
- <p><b> Input file </b></p>
+ <h4><b> Input file </b></h4>
<p id="fileLocation"> no location choosen </p>
</div>
<button id="fileButton">choose file 📂</button>
</div>
<div>
- <textarea id="chapterList" rows="30">
-0:00 - my first song
+ <h4><b> Chapter list (timecode - song name) </b></h4>
+ <textarea id="chapterList" rows="30" cols="10000" placeholder="0:00 - my first song
3:30 - another one
-13:37 - one more time - Daft punk</textarea>
+13:37 - one more time - Daft punk"></textarea>
<p id="errorLabel" style="color: red;"></p>
</div>