diff --git a/src/main.rs b/src/main.rs index c3d6796..cb734bb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,27 @@ use gio::prelude::*; use gtk::prelude::*; use gtk::Orientation; -use rodio::Sink; +use rodio::{Sink, Source}; use std::env::args; use std::fs::File; use std::io::BufReader; +use std::path::PathBuf; +use std::process::Command; const SPACING: i32 = 16; +fn get_data_dir() -> PathBuf { + let mut data_dir = dirs::data_dir().expect("Couldn't find user data directory"); + + data_dir.push("ruin/lull"); + + if !data_dir.exists() { + std::fs::create_dir_all(&data_dir).expect("Couldn't create lull data directory"); + } + + data_dir +} + fn build_ui(application: >k::Application) { let window = gtk::ApplicationWindow::new(application); @@ -23,15 +37,7 @@ fn build_ui(application: >k::Application) { let device = rodio::default_output_device().unwrap(); - let mut data_dir = dirs::data_dir().expect("Couldn't find user data directory"); - - data_dir.push("ruin/lull"); - - if !data_dir.exists() { - std::fs::create_dir_all(&data_dir).expect("Couldn't create lull data directory"); - } - - let paths = std::fs::read_dir(&data_dir) + let paths = std::fs::read_dir(get_data_dir()) .expect("Couldn't read from lull data directory"); for path in paths { @@ -44,6 +50,8 @@ fn build_ui(application: >k::Application) { let source = rodio::Decoder::new(BufReader::new(file)) .expect("Couldn't decode audio"); + let source = source.repeat_infinite(); + let sink = Sink::new(&device); sink.append(source); sink.pause(); @@ -72,7 +80,6 @@ fn build_ui(application: >k::Application) { slider.connect_value_changed(move |scale| { let volume = scale.get_value(); - println!("volume: {}", volume); if volume == 0. { sink.pause(); @@ -90,7 +97,12 @@ fn build_ui(application: >k::Application) { let row_add = gtk::Box::new(Orientation::Horizontal, SPACING); row_add.set_homogeneous(true); - let button_open_dir = gtk::Button::with_label("add more"); + let button_open_dir = gtk::Button::with_label("manage sounds"); + button_open_dir.connect_clicked(|_|{ + let mut file_manager = Command::new("xdg-open"); + file_manager.arg(get_data_dir()); + file_manager.output().unwrap(); + }); row_add.add(&button_open_dir); vertical.add(&row_add);