|
- #[macro_use]
- extern crate cstr;
- #[macro_use]
- extern crate cpp;
- #[macro_use]
- extern crate qmetaobject;
-
- use qmetaobject::*;
-
- mod qrc;
-
- mod adapters;
- mod pairing;
- mod connection_connector;
-
- use crate::connection_connector::BridgeConnectionConnector;
- use crate::pairing::PairingManager;
-
- mod translation_src {
- include!(concat!(env!("OUT_DIR"), "/mo.rs"));
- }
-
- lazy_static! {
- static ref TRANSLATIONS: gettext::Catalog = {
- let requested = std::env::var("LANG").ok().into_iter().map(|value| {
- let mut spl = value.split('.');
- spl.next().unwrap().to_owned()
- }).collect::<Vec<_>>();
- let available: Vec<String> = translation_src::MO_FILES.keys().cloned()
- .chain(vec!["en_US".to_owned()].into_iter()).collect();
-
- println!("{:?} {:?}", requested, available);
-
- let negotiated = fluent_locale::negotiate_languages(
- &requested,
- &available,
- Some("en_US"),
- &fluent_locale::NegotiationStrategy::Lookup
- );
- println!("negotiated languages: {:?}", negotiated);
-
- let negotiated = if negotiated.len() > 0 {
- negotiated[0]
- } else {
- "en_US"
- };
-
- if let Some(src) = translation_src::MO_FILES.get(negotiated) {
- gettext::Catalog::parse(*src).unwrap()
- } else {
- gettext::Catalog::parse(&include_bytes!("../empty.mo")[..]).unwrap()
- }
- };
- }
-
- #[derive(QObject, Default)]
- struct GTTranslator {
- base: qt_base_class!(trait QObject),
- gettext: qt_method!(fn(&self, id: QString) -> QString),
- ngettext: qt_method!(fn(&self, id: QString, id2: QString, count: u64) -> QString),
- }
-
- impl GTTranslator {
- fn gettext<'a>(&self, msgid: QString) -> QString {
- let msgid: String = msgid.into();
- TRANSLATIONS.gettext(&msgid).into()
- }
- fn ngettext<'a>(&self, msgid: QString, msgid_plural: QString, n: u64) -> QString {
- let msgid: String = msgid.into();
- let msgid_plural: String = msgid_plural.into();
- TRANSLATIONS.ngettext(&msgid, &msgid_plural, n).into()
- }
- }
-
- fn main() {
- tokio::run(futures::lazy(move || {
- unsafe {
- cpp! { {
- #include <QtCore/QCoreApplication>
- }}
- cpp!{[]{
- QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
- QCoreApplication::setOrganizationName("radiate.vpzom");
- QCoreApplication::setOrganizationDomain("vpzom.click");
- QCoreApplication::setApplicationName("radiate");
- }}
- }
- if Err(std::env::VarError::NotPresent) == std::env::var("QT_QUICK_CONTROLS_STYLE") {
- QQuickStyle::set_style("Suru");
- }
- qrc::load();
- let plugin_name = cstr!("RadiateApp");
- qml_register_type::<PairingManager>(plugin_name, 0, 0, cstr!("PairingManager"));
- qml_register_type::<BridgeConnectionConnector>(plugin_name, 0, 0, cstr!("BridgeConnectionConnector"));
- qml_register_type::<GTTranslator>(plugin_name, 0, 0, cstr!("GTTranslator"));
- let mut engine = QmlEngine::new();
- engine.load_file("qrc:/qml/Main.qml".into());
- engine.exec();
- Ok(())
- }))
- }
|