start work on some stuff
This commit is contained in:
parent
4d6e23980e
commit
122904369b
107
src/main.rs
107
src/main.rs
@ -30,7 +30,8 @@ fn main() -> anyhow::Result<()> {
|
||||
|
||||
let options = eframe::NativeOptions {
|
||||
viewport: egui::ViewportBuilder::default()
|
||||
.with_min_inner_size([640.0, 480.0]),
|
||||
.with_min_inner_size([640.0, 480.0])
|
||||
.with_inner_size([640.0, 480.0]),
|
||||
..Default::default()
|
||||
|
||||
};
|
||||
@ -348,45 +349,83 @@ impl eframe::App for Application {
|
||||
egui::CentralPanel::default().show(ctx, |ui| {
|
||||
top_horizontal(ui, |ui| {
|
||||
TableBuilder::new(ui)
|
||||
.column(Column::auto().at_least(100.0))
|
||||
.column(Column::exact(300.0))
|
||||
.body(|mut body| {
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod ID").size(16.0));
|
||||
.column(Column::auto().at_least(100.0))
|
||||
.column(Column::exact(300.0))
|
||||
.body(|mut body| {
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod ID").size(16.0));
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_id).font(font.clone()));
|
||||
});
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_id).font(font.clone()));
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod Name").size(16.0));
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_name).font(font.clone()));
|
||||
});
|
||||
});
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod Description").size(16.0));
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_description).font(font.clone()));
|
||||
});
|
||||
});
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod Version").size(16.0));
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_version).font(font.clone()));
|
||||
});
|
||||
});
|
||||
});
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod Name").size(16.0));
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_name).font(font.clone()));
|
||||
});
|
||||
});
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod Description").size(16.0));
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_description).font(font.clone()));
|
||||
});
|
||||
});
|
||||
body.row(24.0, |mut row| {
|
||||
row.col(|ui| {
|
||||
ui.label(RichText::new("Mod Version").size(16.0));
|
||||
});
|
||||
row.col(|ui| {
|
||||
ui.add(egui::TextEdit::singleline(&mut self.configuration.mod_version).font(font.clone()));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
ui.separator();
|
||||
|
||||
top_horizontal(ui, |ui| {
|
||||
ui.vertical(|ui| {
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_audio, RichText::new("Include /audio").size(16.0)));
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_data, RichText::new("Include /data").size(16.0)));
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_fonts, RichText::new("Include /fonts").size(16.0)));
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_icon, RichText::new("Include /icon").size(16.0)));
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_img, RichText::new("Include /img").size(16.0)));
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_languages, RichText::new("Include /languages").size(16.0)));
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_maps, RichText::new("Include /maps").size(16.0)));
|
||||
ui.add(egui::Checkbox::new(&mut self.configuration.include_movies, RichText::new("Include /movies").size(16.0)));
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: Implement performance settings here
|
||||
});
|
||||
|
||||
egui::TopBottomPanel::bottom("configuration_start").show(ctx, |ui| {
|
||||
let mut is_valid = self.configuration.include_audio || self.configuration.include_data ||
|
||||
self.configuration.include_fonts || self.configuration.include_icon ||
|
||||
self.configuration.include_img || self.configuration.include_languages ||
|
||||
self.configuration.include_maps || self.configuration.include_movies ||
|
||||
self.configuration.include_plugins;
|
||||
|
||||
if self.configuration.mod_description.len() < 2 { is_valid = false; }
|
||||
if self.configuration.mod_id.len() < 2 { is_valid = false; }
|
||||
if self.configuration.mod_name.len() < 2 { is_valid = false; }
|
||||
if self.configuration.mod_version.len() < 2 { is_valid = false; }
|
||||
|
||||
ui.with_layout(Layout::top_down(Align::Max), |ui| {
|
||||
if !is_valid {
|
||||
ui.disable();
|
||||
}
|
||||
|
||||
if ui.button("Continue").clicked() {
|
||||
self.sender.send(UiEvent::UseConfiguration(self.configuration.clone())).expect("Failed to send");
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,7 @@
|
||||
use std::{fs, path::PathBuf, sync::{atomic::{AtomicU64, Ordering}, Arc}};
|
||||
|
||||
use anyhow::Context;
|
||||
use crossbeam_channel::Sender;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
||||
@ -16,4 +20,48 @@ pub struct ModConfiguration {
|
||||
pub include_languages: bool,
|
||||
pub include_maps: bool,
|
||||
pub include_movies: bool
|
||||
}
|
||||
/*
|
||||
TODO:
|
||||
IMPORTANT!!!
|
||||
IMPLEMENT ERROR HANDLING AND PROPAGATION
|
||||
**BEFORE** MARKING 1.0.0!!!
|
||||
IMPORTANT!!
|
||||
*/
|
||||
fn walk_inner(relative_base: &PathBuf, real_filesystem_base: &PathBuf, target: &Sender<PathBuf>, counter: Arc<AtomicU64>) -> anyhow::Result<()> {
|
||||
let f = fs::read_dir(real_filesystem_base)?;
|
||||
for entry in f {
|
||||
let entry = entry?;
|
||||
let file_type = entry.file_type()?;
|
||||
let path = entry.path();
|
||||
let path = path.file_name().with_context(|| format!("The file doesn't have a name(????)"))?;
|
||||
|
||||
let mut new_base = relative_base.clone();
|
||||
new_base.push(path);
|
||||
|
||||
|
||||
if file_type.is_dir() {
|
||||
let mut new_realfs_base = real_filesystem_base.clone();
|
||||
new_realfs_base.push(path);
|
||||
|
||||
walk_inner(&new_base, &new_realfs_base, target, counter.clone())?;
|
||||
}
|
||||
if file_type.is_file() {
|
||||
counter.fetch_add(1, Ordering::Relaxed);
|
||||
target.send(new_base.clone())?;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn walk_dirs(base: &PathBuf, secondary_bases: &Vec<PathBuf>, target: Sender<PathBuf>, counter: Arc<AtomicU64>) {
|
||||
for path in secondary_bases {
|
||||
let mut real = base.clone();
|
||||
real.push(path);
|
||||
|
||||
if walk_inner(path, &real, &target, counter.clone()).is_err() {
|
||||
todo!("Implement error handling you bitch");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user