mirror of
https://github.com/kavishdevar/librepods.git
synced 2026-04-29 09:33:04 +00:00
linux-rust: show device info in UI
This commit is contained in:
130
linux-rust/src/utils.rs
Normal file
130
linux-rust/src/utils.rs
Normal file
@@ -0,0 +1,130 @@
|
||||
use aes::cipher::generic_array::GenericArray;
|
||||
use aes::cipher::{BlockEncrypt, KeyInit};
|
||||
use aes::Aes128;
|
||||
use iced::Theme;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::path::PathBuf;
|
||||
|
||||
pub fn get_devices_path() -> PathBuf {
|
||||
let data_dir = std::env::var("XDG_DATA_HOME")
|
||||
.unwrap_or_else(|_| format!("{}/.local/share", std::env::var("HOME").unwrap_or_default()));
|
||||
PathBuf::from(data_dir).join("librepods").join("devices.json")
|
||||
}
|
||||
|
||||
pub fn get_preferences_path() -> PathBuf {
|
||||
let config_dir = std::env::var("XDG_CONFIG_HOME")
|
||||
.unwrap_or_else(|_| format!("{}/.local/share", std::env::var("HOME").unwrap_or_default()));
|
||||
PathBuf::from(config_dir).join("librepods").join("preferences.json")
|
||||
}
|
||||
|
||||
pub fn get_app_settings_path() -> PathBuf {
|
||||
let config_dir = std::env::var("XDG_CONFIG_HOME")
|
||||
.unwrap_or_else(|_| format!("{}/.local/share", std::env::var("HOME").unwrap_or_default()));
|
||||
PathBuf::from(config_dir).join("librepods").join("app_settings.json")
|
||||
}
|
||||
|
||||
fn e(key: &[u8; 16], data: &[u8; 16]) -> [u8; 16] {
|
||||
let mut swapped_key = *key;
|
||||
swapped_key.reverse();
|
||||
let mut swapped_data = *data;
|
||||
swapped_data.reverse();
|
||||
let cipher = Aes128::new(&GenericArray::from(swapped_key));
|
||||
let mut block = GenericArray::from(swapped_data);
|
||||
cipher.encrypt_block(&mut block);
|
||||
let mut result: [u8; 16] = block.into();
|
||||
result.reverse();
|
||||
result
|
||||
}
|
||||
|
||||
pub fn ah(k: &[u8; 16], r: &[u8; 3]) -> [u8; 3] {
|
||||
let mut r_padded = [0u8; 16];
|
||||
r_padded[..3].copy_from_slice(r);
|
||||
let encrypted = e(k, &r_padded);
|
||||
let mut hash = [0u8; 3];
|
||||
hash.copy_from_slice(&encrypted[..3]);
|
||||
hash
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
|
||||
pub enum MyTheme {
|
||||
Light,
|
||||
Dark,
|
||||
Dracula,
|
||||
Nord,
|
||||
SolarizedLight,
|
||||
SolarizedDark,
|
||||
GruvboxLight,
|
||||
GruvboxDark,
|
||||
CatppuccinLatte,
|
||||
CatppuccinFrappe,
|
||||
CatppuccinMacchiato,
|
||||
CatppuccinMocha,
|
||||
TokyoNight,
|
||||
TokyoNightStorm,
|
||||
TokyoNightLight,
|
||||
KanagawaWave,
|
||||
KanagawaDragon,
|
||||
KanagawaLotus,
|
||||
Moonfly,
|
||||
Nightfly,
|
||||
Oxocarbon,
|
||||
Ferra,
|
||||
}
|
||||
|
||||
impl std::fmt::Display for MyTheme {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.write_str(match self {
|
||||
Self::Light => "Light",
|
||||
Self::Dark => "Dark",
|
||||
Self::Dracula => "Dracula",
|
||||
Self::Nord => "Nord",
|
||||
Self::SolarizedLight => "Solarized Light",
|
||||
Self::SolarizedDark => "Solarized Dark",
|
||||
Self::GruvboxLight => "Gruvbox Light",
|
||||
Self::GruvboxDark => "Gruvbox Dark",
|
||||
Self::CatppuccinLatte => "Catppuccin Latte",
|
||||
Self::CatppuccinFrappe => "Catppuccin Frappé",
|
||||
Self::CatppuccinMacchiato => "Catppuccin Macchiato",
|
||||
Self::CatppuccinMocha => "Catppuccin Mocha",
|
||||
Self::TokyoNight => "Tokyo Night",
|
||||
Self::TokyoNightStorm => "Tokyo Night Storm",
|
||||
Self::TokyoNightLight => "Tokyo Night Light",
|
||||
Self::KanagawaWave => "Kanagawa Wave",
|
||||
Self::KanagawaDragon => "Kanagawa Dragon",
|
||||
Self::KanagawaLotus => "Kanagawa Lotus",
|
||||
Self::Moonfly => "Moonfly",
|
||||
Self::Nightfly => "Nightfly",
|
||||
Self::Oxocarbon => "Oxocarbon",
|
||||
Self::Ferra => "Ferra",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl From<MyTheme> for Theme {
|
||||
fn from(my_theme: MyTheme) -> Self {
|
||||
match my_theme {
|
||||
MyTheme::Light => Theme::Light,
|
||||
MyTheme::Dark => Theme::Dark,
|
||||
MyTheme::Dracula => Theme::Dracula,
|
||||
MyTheme::Nord => Theme::Nord,
|
||||
MyTheme::SolarizedLight => Theme::SolarizedLight,
|
||||
MyTheme::SolarizedDark => Theme::SolarizedDark,
|
||||
MyTheme::GruvboxLight => Theme::GruvboxLight,
|
||||
MyTheme::GruvboxDark => Theme::GruvboxDark,
|
||||
MyTheme::CatppuccinLatte => Theme::CatppuccinLatte,
|
||||
MyTheme::CatppuccinFrappe => Theme::CatppuccinFrappe,
|
||||
MyTheme::CatppuccinMacchiato => Theme::CatppuccinMacchiato,
|
||||
MyTheme::CatppuccinMocha => Theme::CatppuccinMocha,
|
||||
MyTheme::TokyoNight => Theme::TokyoNight,
|
||||
MyTheme::TokyoNightStorm => Theme::TokyoNightStorm,
|
||||
MyTheme::TokyoNightLight => Theme::TokyoNightLight,
|
||||
MyTheme::KanagawaWave => Theme::KanagawaWave,
|
||||
MyTheme::KanagawaDragon => Theme::KanagawaDragon,
|
||||
MyTheme::KanagawaLotus => Theme::KanagawaLotus,
|
||||
MyTheme::Moonfly => Theme::Moonfly,
|
||||
MyTheme::Nightfly => Theme::Nightfly,
|
||||
MyTheme::Oxocarbon => Theme::Oxocarbon,
|
||||
MyTheme::Ferra => Theme::Ferra,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user