lull/src/main.rs

99 lines
2.4 KiB
Rust

use gio::prelude::*;
use gtk::prelude::*;
use gtk::Orientation;
use rodio::Source;
use std::env::args;
use std::fs::File;
use std::io::BufReader;
const SPACING: i32 = 16;
fn build_ui(application: &gtk::Application) {
let window = gtk::ApplicationWindow::new(application);
window.set_title("lull");
window.set_border_width(SPACING as u32);
window.set_position(gtk::WindowPosition::Center);
window.set_default_size(256, 256);
let vertical = gtk::Box::new(Orientation::Vertical, SPACING);
vertical.set_homogeneous(true);
window.add(&vertical);
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)
.expect("Couldn't read from lull data directory");
for path in paths {
let path = path.unwrap().path();
let name: &str = path.file_stem().unwrap().to_str().unwrap();
let file = File::open(&path)
.expect("Couldn't open audio file");
let source = rodio::Decoder::new(BufReader::new(file))
.expect("Couldn't decode audio");
rodio::play_raw(&device, source.convert_samples());
let row = gtk::Box::new(Orientation::Horizontal, SPACING);
row.set_homogeneous(true);
let label = gtk::Label::new(Some(name));
row.add(&label);
let adjustment = gtk::Adjustment::new(
0.0,
0.0,
1.0,
0.0,
0.0,
0.0
);
let slider = gtk::Scale::new(
Orientation::Horizontal,
Some(&adjustment)
);
slider.set_draw_value(false);
row.add(&slider);
vertical.add(&row);
}
let row_add = gtk::Box::new(Orientation::Horizontal, SPACING);
row_add.set_homogeneous(true);
let button_open_dir = gtk::Button::with_label("add more");
row_add.add(&button_open_dir);
vertical.add(&row_add);
window.show_all();
}
fn main() {
let application = gtk::Application::new(
Some("dev.tinybird.max.lull"),
Default::default()
).expect("Initialization failed...");
application.connect_activate(|app| {
build_ui(app);
});
application.run(&args().collect::<Vec<_>>());
}