From 3bb155e728987e484fe0018742e400e85fcaf739 Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Mon, 6 Feb 2023 15:57:51 +0100 Subject: [PATCH] read sound files from folder next to executable if it exists, instead of relying on cwd, otherwise check 2 levels up (works when running from cargo) --- src/main.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2064b30..5be5ea0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,10 +4,10 @@ use crossterm::terminal::{self, Clear, ClearType}; use crossterm::ExecutableCommand; use rodio::Sink; use rodio::{OutputStream, OutputStreamHandle}; -use std::fs; use std::io::stdout; use std::sync::{Arc, Mutex}; use std::time::Duration; +use std::{env, fs}; mod sound; use sound::Snoud; @@ -76,8 +76,19 @@ impl App { } fn run(&mut self) { - let files: Vec<_> = fs::read_dir("sound") - .unwrap() + let exe = env::current_exe().unwrap(); + let files: Vec<_> = fs::read_dir(exe.with_file_name("sound")) + .unwrap_or_else(|_err| { + // probably running from cargo + fs::read_dir( + exe.parent() + .unwrap() + .parent() + .unwrap() + .with_file_name("sound"), + ) + .unwrap() + }) .flatten() .filter(|f| f.file_type().unwrap().is_file()) .collect();