start work on some stuff

This commit is contained in:
Rph :3 2025-04-18 22:15:32 +02:00
parent 4d6e23980e
commit 122904369b
No known key found for this signature in database
2 changed files with 121 additions and 34 deletions

View File

@ -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");
}
})
});
}
}

View File

@ -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");
}
}
}