monado-gui

@Cornelius @Skull let's make the stardust discussion here
196 Replies
Cornelius
Cornelius2y ago
there I will preface my work by saying I'm not incredibly experienced with rust, I've been working with it for only a few months now. So I've just been going through and refactoring some simple error handling stuff to make it nicer So some projects handle errors differently
Nova
NovaOP2y ago
urge to ask you if you wanna make stardust clients is rising
Cornelius
Cornelius2y ago
@Skull is it possible that we could build monado-gui to be generic in terms of it's XR backend? Like you can point it to SteamVR, or Monado, or Stardust? Or do you think that's out of scope for this project?
Nova
NovaOP2y ago
stardust isn't a backend yet and it was def mostly tailored towards monado and stardust won't really be something you launch separately ideally when we can shove it onto a standalone linux headset
Cornelius
Cornelius2y ago
So stardust XR is what exactly then, sorry I'm not really familiar with the stardust project
Nova
NovaOP2y ago
ok so it's basically a system UI the idea is you run monado for the drivers and reprojection then stardust to use your 2D (eventually XR) apps through it and openxr apps connect to stardust
Skull
Skull2y ago
Monado has that autorunner merge request should anyone be willing to see what's up. You can custom tailor a monado build tree to launch stardust and serve up the XR bindings
Nova
NovaOP2y ago
i made a good description
Skull
Skull2y ago
You could cook stardust into an autorun config
Nova
NovaOP2y ago
An XR system UI to make using all your 2D—and eventually OpenXR—apps together intuitive, accessible, and fun by using community-made virtual objects as interfaces.
Skull
Skull2y ago
So it launches with the session lib
Nova
NovaOP2y ago
so what, telescope? oh i see yea
Cornelius
Cornelius2y ago
so like the steamvr overlay
Skull
Skull2y ago
It uses some xml type stuff to specify and launch binaries Kiiinda but more spatially and intuitively oriented instead of point and click flat panel
Nova
NovaOP2y ago
and it's not meant to be an overlay
Cornelius
Cornelius2y ago
It's a VR user interface meant to allow you to configure your VR setup
Skull
Skull2y ago
Your PC can be headless and stardust can be the interface for instance, it's meant to be the interface to the PC
Nova
NovaOP2y ago
XR, it can do AR too like
Cornelius
Cornelius2y ago
gotcha gotcha
Nova
NovaOP2y ago
read this description and check out #cool-demos-archive
Cornelius
Cornelius2y ago
a little vague but I think I get the general idea so it's like A XR desktop environment? like KDE plasma, or Gnome, but targeting XR devices instead
Nova
NovaOP2y ago
yea sorta
Cornelius
Cornelius2y ago
gotcha, that makes a lot of sense
Nova
NovaOP2y ago
a desktop environment is 3 things though a display server (X WMs, wayland compositors) core settings (plasma settings, gnome settings) and default apps (gnome disks, epiphany, etc) stardust is just the display server part but i want to make the other 2 along with it so we can make a DE from it
Skull
Skull2y ago
It has many use cases on top because of how modular it is, you can reconfigure it to your liking So much less about the monolithic design paradigms of those desktops.
Nova
NovaOP2y ago
yea stardust is 100% object based
Cornelius
Cornelius2y ago
Right, Monado is the compositor/XR backend, while Stardust is the UI frontend
Nova
NovaOP2y ago
yep!
Cornelius
Cornelius2y ago
that makes sense I like that
Nova
NovaOP2y ago
and like i was saying, stardust isn't like anything else everything is freeform it's all just objects
Cornelius
Cornelius2y ago
Right, that's why I was having a hard time really understanding it
Nova
NovaOP2y ago
yea, it's not like any other computer UI gonna be stupidly intuitive though but that's a show not tell intuition because i suck at explaining things
Cornelius
Cornelius2y ago
It's a XR desktop environment who's whole purpose is to improve computing via the use of 3 dimensional space as an interface That's what I'm getting
Nova
NovaOP2y ago
not just 3D space but different interfaces you can drop out a virtual laptop or place a touchscreen on a wall then drop any 2D app into them and you can yank the apps right out of them and switch too
Cornelius
Cornelius2y ago
Right, you're utilizing 3D space to interface with your computer
Nova
NovaOP2y ago
yea, but nothing else lets you swap interfaces on the fly like that
Cornelius
Cornelius2y ago
It's like the whole iron man cgi stuff you see but real
Nova
NovaOP2y ago
oh god not that
Cornelius
Cornelius2y ago
no? :kek:
Nova
NovaOP2y ago
sorry, that UI isn't really good tbh we wanna make one that is fun to use but not wildly impractical :p
Nova
NovaOP2y ago
Gil Pais
YouTube
Holo table. Marvel's agents of s.h.i.e.l.d.
Agent Ward and agent Coulson trying to use the holotable. Season 1, episode 13
Nova
NovaOP2y ago
this is why iron man UI is bad from a marvel TV show itself :p
Cornelius
Cornelius2y ago
I mean I was more thinking like what's seen in iron man 1/2 but I get what you're sayin It's an XR workspace environment
Nova
NovaOP2y ago
not just workspace the idea is that this goes all the way to all day i mean, you can drop your lists on the door so you don't forget them on the way out, then just yoink them out of the door and onto your wrist ya know? it doesn't technically let you do anything new, but it lets you do all of it at once with 1 device :p
Cornelius
Cornelius2y ago
Sounds like a desktop, but where every point in a 3D space is your desktop
Nova
NovaOP2y ago
yea i guess
Cornelius
Cornelius2y ago
So like an XR workspace environment
Nova
NovaOP2y ago
i just don't feel it gives the right impression ya know?
Cornelius
Cornelius2y ago
I'm gonna be honest
Skull
Skull2y ago
No limits on the space, no limits on where you can put the space
Cornelius
Cornelius2y ago
the term desktop environment doesn't go into detail as to what Gnome or KDE can do, but that's still the overarching description for them Same is true of stardust as far as I can tell Yes the finer details are quite complex
Nova
NovaOP2y ago
stardust is much more like wayfire than gnome get what i mean? wayfire is just a base, without anything else wayfire barely does anything also in terms of compositors, wayfire is the most extensible still has the problem of "everything is in the config file, read text like it's the 1800s you nerd" sorry, i hate config files
Cornelius
Cornelius2y ago
I mean KDE is somewhat similar with it's widgets, that sort of just sounds like that to me I would imagine one of the big things would be to just reuse software but within this environment
Nova
NovaOP2y ago
yea for sure
Cornelius
Cornelius2y ago
which would include running whole desktop environments in virtual windows
Nova
NovaOP2y ago
already done that before
Cornelius
Cornelius2y ago
well there ya go
Nova
NovaOP2y ago
No description
Cornelius
Cornelius2y ago
So, Stardust is an XR Workspace Environment
Nova
NovaOP2y ago
but it's not just for work it can do what your phone can literally
Nova
NovaOP2y ago
No description
Nova
NovaOP2y ago
it runs android via waydroid
Cornelius
Cornelius2y ago
so just XR environment
Nova
NovaOP2y ago
i guess
Cornelius
Cornelius2y ago
Yeah that sounds about right XR Environment
Nova
NovaOP2y ago
but XR environment also means a vrchat world and an HDRI ya know sorry
Cornelius
Cornelius2y ago
yeah
Nova
NovaOP2y ago
i know i'm nitpicking i just wanna make sure the description gives people the right idea
Cornelius
Cornelius2y ago
I think XR Environment gives a decent idea
Nova
NovaOP2y ago
because explaining stardust is really hard because everyone takes the system UI for granted
Cornelius
Cornelius2y ago
You could also say XR Computing Environment Though I think computing is a little redundant
Nova
NovaOP2y ago
there haven't really been any new system UIs since smartphones smartwatch UIs are just smaller smartphone UIs
Cornelius
Cornelius2y ago
there's been gesture based stuff but it's not really useful
Nova
NovaOP2y ago
that's not really new it just turns it into a cursor or something
Cornelius
Cornelius2y ago
Well like the pixel watch was going to have gesture stuff and the one pixel or nexus phone had some weird gesture thing for a while ¯\_(ツ)_/¯ goofy ahh input
Cornelius
Cornelius2y ago
So I've gone through some error handling and made some changes to make crashes more explicit and whatnot https://github.com/technobaboo/rex/compare/main...CorneliusCornbread:monado-gui-cornelius:main
GitHub
Comparing technobaboo:main...CorneliusCornbread:main · technobaboo/...
Monado Replica EX, a monado builder and runner. Contribute to technobaboo/rex development by creating an account on GitHub.
Cornelius
Cornelius2y ago
I'm not done yet but that's where I'm at currently I promised a bud of mine I'd play some Space Engineers with him today If you have questions @ me in this channel and I'll be happy to answer them
Nova
NovaOP2y ago
no questions, looks great
Cornelius
Cornelius2y ago
I figured out why that one code snippet was calling take() basically child is a structure which contains stdout: Option<File> and take was just taking ownership and replacing the structure's ownership with None It seems like that might cause issues though, as if something needs stdout for that child it won't be there
Nova
NovaOP2y ago
ahh yea :S
Cornelius
Cornelius2y ago
I didn't notice before because cargo check wasn't being ran by Clion out of the box thanks clion :bruh_klee: but I think instance.rs could use a mild refactor, not sure what your guy's opinion on that would be I'm thinking I'm going to redo the error handling I've already currently done, it would make more sense (since this is a gui app) to have a graphical pop up that prompts the user with the error and then exits out of the application, maybe we could make a macro for that the expect()s are fine if you're using a CLI app but it's gui :P nah nvm I'm just gonna write a trait for that and implement it for Results and Options
Nova
NovaOP2y ago
oooh i love that idea
Cornelius
Cornelius2y ago
ye, also throw basically most of what I've done in the trash because I'm realizing there's much better ways to do what I'm doing :kek:
Nova
NovaOP2y ago
that's progress :D
Cornelius
Cornelius2y ago
also at some point we are going to want to sit down and decide on a way to structure the progress file wise nothing crazy just how where we want to put stuff
Nova
NovaOP2y ago
yea good point
Cornelius
Cornelius2y ago
ye, figured that out, just gotta do the pop up okay the pop up is going to be quite difficult because it relies on the App update loop to create the window
Nova
NovaOP2y ago
couldn't you just do unwrap and do the popup on panic handler? oh shoot yeaa augh
Cornelius
Cornelius2y ago
yeahhhhh one workaround is to, again, ruin everything by making every error bubble up I don't like that
Nova
NovaOP2y ago
couldn't you just bubble up a result to a singular function in update? why not?
Cornelius
Cornelius2y ago
I could do that I just don't want to have to have everything return a result you know? yeah, it looks like that's gonna be the nicest option otherwise we could try and do something with async or coroutines doing this though, it's not going to be as nice as just calling .expect_gui() It's going to be by returning an error and bubbling up the error as far as it needs to go ya'lls thoughts?
Nova
NovaOP2y ago
make a global queue of errors
Cornelius
Cornelius2y ago
that you can do however
Nova
NovaOP2y ago
then push an error to it
Cornelius
Cornelius2y ago
if we want to halt execution of something to wait for a users input to a pop up, then we have to halt that thread of execution hence the need to coroutines or async for example
let pid = child.pid().expect("Newly created monado service process does not have pid.");
let pid = child.pid().expect("Newly created monado service process does not have pid.");
when you call expect it crashes the program and will not execute anything beyond that line say we call expect_gui() and we want to have a dialogue that's something like (regenerate config or exit) in the former case we need to halt execution of that thread of code, regenerate the config, load it, then continue
Nova
NovaOP2y ago
i have a horrible horrible idea god awful idea
Cornelius
Cornelius2y ago
and regardless we need to halt execution of that thread until we get to the update() loop and then update the UI with the new window :agony:
Nova
NovaOP2y ago
on panic handler you make another window with the error
Cornelius
Cornelius2y ago
like another thread?
Nova
NovaOP2y ago
just spin up a new egui instance in the panic handler
Cornelius
Cornelius2y ago
that's actually really not that bad of an idea
Nova
NovaOP2y ago
oh no i should have expected someone with barry bee benson as their pfp would be a bit ok with this
Cornelius
Cornelius2y ago
barry bee beson? But I don't see why that's a bad idea at all it's all abstracted away in an error handler of some kind
Nova
NovaOP2y ago
because what if egui panics what does it do then
Cornelius
Cornelius2y ago
just shit the bed then :skele:
Nova
NovaOP2y ago
fdnsaljkfnalsd
Cornelius
Cornelius2y ago
I mean why would egui panic? look it may be jank but fuck it we ball okay so I might have done just that
use std::ops::Deref;
use std::rc::Rc;
use eframe::egui;

pub trait ExpectGUI<T> {
fn expect_gui(self, msg: &str) -> T;
}

impl<T, E: std::fmt::Debug> ExpectGUI<Result<T, E>> for Result<T, E> {
fn expect_gui(self, msg: &str) -> Result<T, E> {
let selection = create_pop_up();
Ok(self.expect(msg))
}
}

impl<T> ExpectGUI<Option<T>> for Option<T> {
fn expect_gui(self, msg: &str) -> Option<T> {
let selection = create_pop_up();
Some(self.expect(msg))
}
}

fn create_pop_up() -> PopUpSelection {
let options = eframe::NativeOptions {
initial_window_size: Some(egui::vec2(320.0, 240.0)),
..Default::default()
};
let popup = PopUp::new();
let option = popup.option_selected.clone();
let app = Box::new(popup);
eframe::run_native(
"Confirm exit",
options,
Box::new(|_cc| app),
);

return option.deref().clone()
}

#[derive(Clone)]
enum PopUpSelection {
O1,
O2,
O3
}

struct PopUp {
close: bool,
option_selected: Rc<PopUpSelection>,
option_1_label: String,
option_2_label: Option<String>,
option_3_label: Option<String>,
}

impl PopUp {
fn new() -> PopUp {
PopUp {
close: false,
option_selected: Rc::new(PopUpSelection::O1),
option_1_label: "".to_string(),
option_2_label: None,
option_3_label: None,
}
}
}

impl eframe::App for PopUp {
fn on_close_event(&mut self) -> bool {
false
}

fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Try to close the window");
});

// Show confirmation dialog:
egui::Window::new("Do you want to quit?")
.collapsible(false)
.resizable(false)
.show(ctx, |ui| {
ui.horizontal(|ui| {
if ui.button(&self.option_1_label).clicked() {
self.option_selected = Rc::new(PopUpSelection::O1);
frame.close();
return;
}

if let Some(label2) = &self.option_2_label {
if ui.button(label2).clicked() {
self.option_selected = Rc::new(PopUpSelection::O2);
frame.close();
return;
}
}

if let Some(label3) = &self.option_3_label {
if ui.button(label3).clicked() {
self.option_selected = Rc::new(PopUpSelection::O3);
frame.close();
return;
}
}
});
});
}
}
use std::ops::Deref;
use std::rc::Rc;
use eframe::egui;

pub trait ExpectGUI<T> {
fn expect_gui(self, msg: &str) -> T;
}

impl<T, E: std::fmt::Debug> ExpectGUI<Result<T, E>> for Result<T, E> {
fn expect_gui(self, msg: &str) -> Result<T, E> {
let selection = create_pop_up();
Ok(self.expect(msg))
}
}

impl<T> ExpectGUI<Option<T>> for Option<T> {
fn expect_gui(self, msg: &str) -> Option<T> {
let selection = create_pop_up();
Some(self.expect(msg))
}
}

fn create_pop_up() -> PopUpSelection {
let options = eframe::NativeOptions {
initial_window_size: Some(egui::vec2(320.0, 240.0)),
..Default::default()
};
let popup = PopUp::new();
let option = popup.option_selected.clone();
let app = Box::new(popup);
eframe::run_native(
"Confirm exit",
options,
Box::new(|_cc| app),
);

return option.deref().clone()
}

#[derive(Clone)]
enum PopUpSelection {
O1,
O2,
O3
}

struct PopUp {
close: bool,
option_selected: Rc<PopUpSelection>,
option_1_label: String,
option_2_label: Option<String>,
option_3_label: Option<String>,
}

impl PopUp {
fn new() -> PopUp {
PopUp {
close: false,
option_selected: Rc::new(PopUpSelection::O1),
option_1_label: "".to_string(),
option_2_label: None,
option_3_label: None,
}
}
}

impl eframe::App for PopUp {
fn on_close_event(&mut self) -> bool {
false
}

fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Try to close the window");
});

// Show confirmation dialog:
egui::Window::new("Do you want to quit?")
.collapsible(false)
.resizable(false)
.show(ctx, |ui| {
ui.horizontal(|ui| {
if ui.button(&self.option_1_label).clicked() {
self.option_selected = Rc::new(PopUpSelection::O1);
frame.close();
return;
}

if let Some(label2) = &self.option_2_label {
if ui.button(label2).clicked() {
self.option_selected = Rc::new(PopUpSelection::O2);
frame.close();
return;
}
}

if let Some(label3) = &self.option_3_label {
if ui.button(label3).clicked() {
self.option_selected = Rc::new(PopUpSelection::O3);
frame.close();
return;
}
}
});
});
}
}
if it works :skele: it does not it panics :cat_pain: https://crates.io/crates/native-dialog 👀 let's try that
Nova
NovaOP2y ago
who could have seen that coming
Cornelius
Cornelius2y ago
it was worth a shot :kek:
Cornelius
Cornelius2y ago
No description
Cornelius
Cornelius2y ago
:hypers: not sure why the message is goofy :Thonk: okay the one library is borked but I found another
Cornelius
Cornelius2y ago
No description
Cornelius
Cornelius2y ago
this one works for now and I'm probably gonna fork the other one because I'm pretty sure I can see where it's bugged by just looking through the source code mildly
Nova
NovaOP2y ago
that looks great
Cornelius
Cornelius2y ago
AND it halts the app
let s: Option<String> = None;
s.expect_gui("No string found");
let s: Option<String> = None;
s.expect_gui("No string found");
that's the code that's ALL you have to do :ah_yes_bottled_water:
Nova
NovaOP2y ago
amazinggg i LOVE IT
Cornelius
Cornelius2y ago
same easy API Don't gotta worry about it
Nova
NovaOP2y ago
can you turn that into a crate and give me the ability to set a title and such?
Cornelius
Cornelius2y ago
you mean the dialog? https://crates.io/crates/dialog
Nova
NovaOP2y ago
the .expect_gui
Cornelius
Cornelius2y ago
ohhh I mean I could yeah
Nova
NovaOP2y ago
i would love that
Cornelius
Cornelius2y ago
it's literally just 43 lines of code :kek:
Nova
NovaOP2y ago
i'd use it in stardust all the time
Cornelius
Cornelius2y ago
The only problem is it has an extra dependency so maybe I'll make it it's own crate, based on the fork of https://crates.io/crates/native-dialog native dialogue interfaces with KDE much nicer but it borked
Cornelius
Cornelius2y ago
GitHub
Dialog box text formatted incorrectly? · Issue #41 · balthild/nativ...
So I tried this out on KDE on Wayland and doing a basic message dialog no matter what I put in for the message it's malformed: message code MessageDialog::new() .set_type(MessageType::Error) .s...
Cornelius
Cornelius2y ago
It seems to be a change within Qt which sucks doodoo but yeah I'll get around to doing that eventually also I changed the name expect_dialog just to be more descript
Nova
NovaOP2y ago
ah yee
Cornelius
Cornelius2y ago
okay now to go around in find ALL uses of expect
Nova
NovaOP2y ago
control shift f in vscode :3
Cornelius
Cornelius2y ago
ye ye but clion :skele: done okay I also fixed the gitignore for the project it pretty much empty which it shouldn't be for a rust project
Cornelius
Cornelius2y ago
GitHub
Comparing technobaboo:main...CorneliusCornbread:main · technobaboo/...
Monado Replica EX, a monado builder and runner. Contribute to technobaboo/rex development by creating an account on GitHub.
Cornelius
Cornelius2y ago
current changes more to be made
Nova
NovaOP2y ago
:D
Cornelius
Cornelius2y ago
I
Nova
NovaOP2y ago
make a PR?
Cornelius
Cornelius2y ago
you want one now?
Nova
NovaOP2y ago
i mean... whenever you're ready
Cornelius
Cornelius2y ago
I mean I think there's more to be done tbh also I forked off of @Skull :kek: so I dunno how that works oh nah I can just PR direct into malekiRe's repo
Nova
NovaOP2y ago
forks are really just new remotes
Cornelius
Cornelius2y ago
neat
Nova
NovaOP2y ago
do it into mine malek's abandoned his afaik
Cornelius
Cornelius2y ago
are you spookyskeletons?
Nova
NovaOP2y ago
no technobaboo
Cornelius
Cornelius2y ago
wait asfkljasdgf I wanted to make it a draft there
Cornelius
Cornelius2y ago
GitHub
Improved error handling and general clean ups by CorneliusCornbread...
Added panic error handling that will pop up a dialog before exit Fixed some issues with gitignore update dependencies refactor main.rs?
Nova
NovaOP2y ago
:D yayyy
Cornelius
Cornelius2y ago
draft PR created
Nova
NovaOP2y ago
feel free to update it and i'll merge it when you want
Cornelius
Cornelius2y ago
sounds good I'll upgrade it to a full PR when it's ready keep an eye on it if you wanna review changes as they happen also, I highly recommend when you merge it to squash commits dunno if you knew that it just makes dealing with commit history sooo much easier
Nova
NovaOP2y ago
yes of course
Cornelius
Cornelius2y ago
So I just forked that one native dialog project and fixed the formatting issue
Cornelius
Cornelius2y ago
GitHub
GitHub - CorneliusCornbread/expect-dialog-rs: A simple utility for ...
A simple utility for error handling that uses a dialog for it&#39;s notification as opposed to just stdout - GitHub - CorneliusCornbread/expect-dialog-rs: A simple utility for error handling th...
Cornelius
Cornelius2y ago
it's not a crate due to the fact that it relies on a patched version of native-dialog Which I don't really want to publish, stepping on the toes of the original creator if they come back I'm thinking about reaching out to them to take over managing the project
Nova
NovaOP2y ago
ah fair
Cornelius
Cornelius2y ago
but just
expect-dialog = { git = "https://github.com/CorneliusCornbread/expect-dialog-rs" }
expect-dialog = { git = "https://github.com/CorneliusCornbread/expect-dialog-rs" }
will do for now so feel free to use it in whatever project I've updated it as a dependency in monado-gui so it relies on the same repo
Nova
NovaOP2y ago
nice
Cornelius
Cornelius2y ago
i'm reaching out to the repo owner of native-dialog-rs rn about whether or not they're going to pick the repo back up or if they're wanting to pass on maintaining it to someone else.
Cornelius
Cornelius2y ago
No description
Cornelius
Cornelius2y ago
:polishcow:
Skull
Skull2y ago
Woot! That's slick
Cornelius
Cornelius2y ago
yessir and the implementation is very simple, I didn't really know where to put the function, *we still gotta figure out some organization for the project.
let config: LoggingEnvVars = RexApp::load_tolerant("monado", "logging")
let config: LoggingEnvVars = RexApp::load_tolerant("monado", "logging")
gets rid of any error handling when you want to load any config, it will automagically gib that behaviour @Nova @Skull sorry for the ping, but how is logging/terminal output done in this project? I noticed instance.rs was using println! but that was it? And when I mean logging I mean logging for the gui app itself, not monado
Skull
Skull2y ago
Easy to stick an svg into the egui?
Cornelius
Cornelius2y ago
?
Skull
Skull2y ago
Curious about some equipment icons for attached devices in the session
Cornelius
Cornelius2y ago
ahh, I have no idea so I'm going to assume all the logging stuff is exclusive to logging monado's output and this app has no special logging. In future we should probably create our own logging system which writes to some log files but I'm just gonna use println!() for debugging errors also I think I spotted a bug with load_instances()
pub fn load_instances(&mut self) -> Result<(), Box<dyn Error>> {
self.instances = FxHashMap::from_iter(
std::fs::read_dir(&self.monado_instance_dir)?
.filter_map(|d| Some(d.ok()?.file_name().to_str()?.to_string()))
.filter_map(|n| Some((n.clone(), MonadoInstance::create_load(self, n).ok()?))),
);

Ok(())
}
pub fn load_instances(&mut self) -> Result<(), Box<dyn Error>> {
self.instances = FxHashMap::from_iter(
std::fs::read_dir(&self.monado_instance_dir)?
.filter_map(|d| Some(d.ok()?.file_name().to_str()?.to_string()))
.filter_map(|n| Some((n.clone(), MonadoInstance::create_load(self, n).ok()?))),
);

Ok(())
}
so this function uses the error coalescing operator ? Which from my understanding, will early return, meaning in this iterator it will quit before it finishes if one of the items can't be loaded I thought it might only skip some items, but now I'm realizing that it will quit before the iterator finishes and returns an object, so if one instance is invalid nothing will be loaded or would it? :Thonk: hmmmm okay I think it does actually coalesce properly I'd have to test it to find it, I'll do that later @Skull question for you, is monado-gui working in terms of running monado itself? I'm trying to give it a monado runtime to use and I'm really sure what from my builds I'm supposed to be copying into monado's instances folder
Nova
NovaOP2y ago
you don't just make a new folder in the instances folder with the name of the instance and restart the gui and you can set setting and launch from there
Cornelius
Cornelius2y ago
so it's currently just a folder with a toml file in it?
Nova
NovaOP2y ago
yes
Cornelius
Cornelius2y ago
👍
Skull
Skull2y ago
If I set env vars on the GUI will they carry through to the Monado runtime?
Nova
NovaOP2y ago
yes!
Skull
Skull2y ago
Oh thank god Alrighty that makes this very interesting now
Cornelius
Cornelius2y ago
yeah no that works properly, just checked I didn't figure error coalescing operators would work that nicely, though I guess it makes sense considering they're lambda statements :polishcow:
Skull
Skull2y ago
We got any tools to interface with the Monado instance live already in or is the infrastructure just fire and forget for now?
Cornelius
Cornelius2y ago
I'm finishing up my PR, I'm gonna update the dependecies and call it for this PR so it can be merged. Next thing would probably be to decide upon a project file structure
Cornelius
Cornelius2y ago
No description
Cornelius
Cornelius2y ago
ignore the output of monado itself, I'm on my laptop with nothing on monado configured but :polishcow: no more looking through old docs it's all up to date
Cornelius
Cornelius2y ago
https://github.com/technobaboo/rex/pull/1 @Nova @Skull she's ready for review
GitHub
Improved error handling and general clean ups by CorneliusCornbread...
Added panic error handling that will pop up a dialog before exit Fixed some issues with gitignore update dependencies refactor main.rs? Dropping this to decrease the scope of this PR
Cornelius
Cornelius2y ago
aw crap I just realized I didn't put the right link for the expect-dialog repo
Nova
NovaOP2y ago
oop uh
Cornelius
Cornelius2y ago
my b In future I'm going to have to self review my PR's more closely wait why does this PR say a bunch of files changed :Thonk:
Nova
NovaOP2y ago
idk it's not a problem tho uh
Nova
NovaOP2y ago
GitHub
rex/Cargo.toml at main · technobaboo/rex
Monado Replica EX, a monado builder and runner. Contribute to technobaboo/rex development by creating an account on GitHub.
Cornelius
Cornelius2y ago
yes I forgor to push sorry I'm in class multi tasking :skul: lemme make another PR
Nova
NovaOP2y ago
ok then i'm gonna hold off merging anymore you test it and make sure it works :p
Cornelius
Cornelius2y ago
I'm sorry :kek: it's a small issue but it's nonetheless the difference of it compiling or not compiling
Nova
NovaOP2y ago
you double check it to make sure it works
Cornelius
Cornelius2y ago
it works 👍 just checked apologies for the goof up again
Nova
NovaOP2y ago
@HydraLM this is the WIP description
HydraLM
HydraLM2y ago
thanks
Nova
NovaOP2y ago
but that is a short one a more accurate and longer one is good too that description is more like the elevator pitch
Cornelius
Cornelius2y ago
@Nova Figured I'd mention this if you're using expect-dialog-rs I added a macro to it called panic_dialog that does exactly what it sounds like. works just like panic too but with a dialog
Nova
NovaOP2y ago
nicee
Want results from more Discord servers?
Add your server