diff --git a/rust/src/cmd.rs b/rust/src/cmd.rs index e223e50..4b2ee5d 100644 --- a/rust/src/cmd.rs +++ b/rust/src/cmd.rs @@ -158,6 +158,8 @@ pub async fn init_profile( if let Some(new_profile) = Profile::new(exe_path) { new_profile.save().await; appd.profile = Some(new_profile.clone()); + fs::create_dir_all(new_profile.dir()).await + .map_err(|e| format!("Unable to create the profile directory: {}", e))?; Ok(new_profile) } else { diff --git a/rust/src/display.rs b/rust/src/display.rs index 2572cee..20e8cf0 100644 --- a/rust/src/display.rs +++ b/rust/src/display.rs @@ -5,7 +5,7 @@ use anyhow::{Result, anyhow}; pub struct DisplayInfo { primary: String, target: String, - target_rotation: displayz::Orientation + target_settings: displayz::DisplaySettings } #[cfg(not(target_os = "windows"))] @@ -15,7 +15,7 @@ pub async fn prepare_display(p: &Profile) -> Result<()> { #[cfg(target_os = "windows")] pub async fn prepare_display(p: &Profile) -> Result> { - use displayz::{query_displays, Orientation}; + use displayz::{query_displays, Orientation, Resolution}; let display_name = p.get_str("display", "default"); let rotation = p.get_int("display-rotation", 0); @@ -44,14 +44,16 @@ pub async fn prepare_display(p: &Profile) -> Result> { let res = DisplayInfo { primary: primary.name().to_owned(), target: target.name().to_owned(), - target_rotation: settings.borrow().orientation + target_settings: settings.borrow().clone() }; - match rotation { - 90 => settings.borrow_mut().orientation = Orientation::Portrait, - 270 => settings.borrow_mut().orientation = Orientation::PortraitFlipped, - _ => () - }; + if rotation == 90 || rotation == 270 { + let rez = settings.borrow_mut().resolution; + settings.borrow_mut().orientation = if rotation == 90 { Orientation::PortraitFlipped } else { Orientation::Portrait }; + if rez.height < rez.width { + settings.borrow_mut().resolution = Resolution::new(rez.height, rez.width); + } + } display_set.apply()?; displayz::refresh()?; @@ -63,7 +65,7 @@ pub async fn prepare_display(p: &Profile) -> Result> { #[cfg(target_os = "windows")] pub async fn undo_display(info: DisplayInfo) -> Result<()> { - use displayz::query_displays; + use displayz::{query_displays, Resolution}; let display_set = query_displays()?; @@ -82,7 +84,7 @@ pub async fn undo_display(info: DisplayInfo) -> Result<()> { let settings = target.settings() .as_ref() .ok_or_else(|| anyhow!("Unable to query display settings"))?; - settings.borrow_mut().orientation = info.target_rotation; + settings.replace_with(|_| info.target_settings); display_set.apply()?; displayz::refresh()?; diff --git a/src/components/OptionList.vue b/src/components/OptionList.vue index 03c80a9..191a3f4 100644 --- a/src/components/OptionList.vue +++ b/src/components/OptionList.vue @@ -5,6 +5,7 @@ import InputText from 'primevue/inputtext'; import Select from 'primevue/select'; import SelectButton from 'primevue/selectbutton'; import Toggle from 'primevue/toggleswitch'; +import { invoke as unproxied_invoke } from '@tauri-apps/api/core'; import OptionCategory from './OptionCategory.vue'; import OptionRow from './OptionRow.vue'; import { invoke } from '../invoke'; @@ -49,7 +50,7 @@ const displayList: Ref<{ title: string; value: string }[]> = ref([ }, ]); -invoke('read_profile_data', { +unproxied_invoke('read_profile_data', { path: 'aime.txt', }) .then((v: unknown) => {