summaryrefslogtreecommitdiff
path: root/crates/flasher-qt/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/flasher-qt/src/main.rs')
-rw-r--r--crates/flasher-qt/src/main.rs50
1 files changed, 36 insertions, 14 deletions
diff --git a/crates/flasher-qt/src/main.rs b/crates/flasher-qt/src/main.rs
index f131bc5..e304418 100644
--- a/crates/flasher-qt/src/main.rs
+++ b/crates/flasher-qt/src/main.rs
@@ -1,21 +1,43 @@
-use qmetaobject::{QmlEngine, QString, QVariant};
-use std::fs;
+use std::{
+ env,
+ ffi::CString,
+ fs,
+ os::raw::{c_char, c_int},
+};
const BOARDS: &str = include_str!("../../../alt-rootfs-installer/SUPPORTED-BOARDS");
-const QML: &str = include_str!("../qml/Main.qml");
+
+unsafe extern "C" {
+ fn run_qt_app(
+ argc: c_int,
+ argv: *mut *mut c_char,
+ boards: *const c_char,
+ drives: *const c_char,
+ ) -> c_int;
+}
fn main() {
- let mut engine = QmlEngine::new();
- engine.set_property(
- QString::from("supportedBoardsText"),
- QVariant::from(QString::from(BOARDS)),
- );
- engine.set_property(
- QString::from("availableDrivesText"),
- QVariant::from(QString::from(available_drives().join("\n"))),
- );
- engine.load_data(QML.into());
- engine.exec();
+ let arguments: Vec<CString> = env::args()
+ .map(|arg| CString::new(arg).expect("application argument contains a NUL byte"))
+ .collect();
+ let mut argument_pointers: Vec<*mut c_char> = arguments
+ .iter()
+ .map(|arg| arg.as_ptr().cast_mut())
+ .collect();
+ let boards = CString::new(BOARDS).expect("board list contains a NUL byte");
+ let drives = CString::new(available_drives().join("\n"))
+ .expect("drive description contains a NUL byte");
+
+ // QApplication only borrows argv and the two strings for the duration of
+ // this call; all backing CStrings remain alive until the event loop exits.
+ unsafe {
+ run_qt_app(
+ argument_pointers.len() as c_int,
+ argument_pointers.as_mut_ptr(),
+ boards.as_ptr(),
+ drives.as_ptr(),
+ );
+ }
}
fn available_drives() -> Vec<String> {