everything_plugin/data/
config.rs1use std::ffi::CString;
2
3use windows_sys::Win32::{
4 Globalization::{GetLocaleInfoW, GetThreadUILanguage, LOCALE_SNAME},
5 System::SystemServices::LOCALE_NAME_MAX_LENGTH,
6};
7
8use crate::{PluginApp, PluginHandler, PluginHost, sys};
9
10impl<A: PluginApp> PluginHandler<A> {
11 pub fn get_language_name(&self) -> String {
12 match self.get_host() {
13 Some(host) => host.config_get_language_name(),
14 None => PluginHost::get_thread_language_name(),
15 }
16 }
17}
18
19impl PluginHost {
20 pub fn config_get_int_value(&self, name: &str) -> i32 {
29 let config_get_int_value: unsafe extern "system" fn(
30 name: *const sys::everything_plugin_utf8_t,
31 ) -> i32 = unsafe { self.get("config_get_int_value").unwrap_unchecked() };
32 let name = CString::new(name).unwrap();
33 unsafe { config_get_int_value(name.as_ptr() as _) }
34 }
35
36 pub fn config_set_int_value(&self, name: &str, value: i32) -> i32 {
46 let config_set_int_value: unsafe extern "system" fn(
47 name: *const sys::everything_plugin_utf8_t,
48 value: i32,
49 ) -> i32 = unsafe { self.get("config_set_int_value").unwrap_unchecked() };
50 let name = CString::new(name).unwrap();
51 unsafe { config_set_int_value(name.as_ptr() as _, value) }
52 }
53
54 pub fn config_get_language(&self) -> Option<u16> {
58 match self.config_get_int_value("language") {
59 0 => None,
60 id => Some(id as u16),
61 }
62 }
63
64 pub fn get_language_name(language: u16) -> String {
65 let mut lcdata = [0u16; LOCALE_NAME_MAX_LENGTH as usize];
66 _ = unsafe {
67 GetLocaleInfoW(
68 language as u32,
69 LOCALE_SNAME,
70 lcdata.as_mut_ptr(),
71 size_of_val(&lcdata) as i32,
72 )
73 };
74 String::from_utf16_lossy(&lcdata)
75 .trim_end_matches('\0')
76 .to_string()
77 }
78
79 pub fn get_thread_language_name() -> String {
80 let language = unsafe { GetThreadUILanguage() };
81 Self::get_language_name(language)
82 }
83
84 pub fn config_get_language_name(&self) -> String {
85 let language = self
86 .config_get_language()
87 .unwrap_or_else(|| unsafe { GetThreadUILanguage() });
88 Self::get_language_name(language)
89 }
90}