feat: add some boring function in lowlevel
This commit is contained in:
@@ -615,7 +615,8 @@ impl ApplicationsKey {
|
||||
todo!()
|
||||
}
|
||||
|
||||
const NAMEOF_DEFAULT_ICON: &str = "DefaultIcon";
|
||||
const NAMEOF_DEFAULT_ICON_PART1: &str = "DefaultIcon";
|
||||
const NAMEOF_DEFAULT_ICON_PART2: &str = "";
|
||||
|
||||
pub fn get_default_icon(&self, view: View) -> Result<Option<IconResVariant>, Error> {
|
||||
todo!()
|
||||
@@ -654,18 +655,27 @@ impl ApplicationsKey {
|
||||
scope: Scope,
|
||||
tys: Option<&[&concept::Ext]>,
|
||||
) -> Result<(), Error> {
|
||||
// TODO: If given slice is empty, do not create this key.
|
||||
todo!()
|
||||
}
|
||||
|
||||
const NAMEOF_NO_OPEN_WITH: &str = "NoOpenWith";
|
||||
|
||||
pub fn get_no_open_with(&self, view: View) -> Result<bool, Error> {
|
||||
todo!()
|
||||
let key = self.open_view_for_getter(view)?;
|
||||
match regext::try_get_value::<String, _>(&key, Self::NAMEOF_NO_OPEN_WITH)? {
|
||||
Some(_) => Ok(true),
|
||||
None => Ok(false),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_no_open_with(&mut self, scope: Scope, flag: bool) -> Result<(), Error> {
|
||||
todo!()
|
||||
let key = self.open_scope_for_setter(scope)?;
|
||||
if flag {
|
||||
key.set_value(Self::NAMEOF_NO_OPEN_WITH, &"")?;
|
||||
} else {
|
||||
key.delete_value(Self::NAMEOF_NO_OPEN_WITH)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -727,16 +737,37 @@ impl ExtKey {
|
||||
Ok(OpenedKey::new(classes, this_ext))
|
||||
}
|
||||
|
||||
fn open_view_for_read(&self, view: View) -> Result<OpenedKey, Error> {
|
||||
self.open_key(view.into(), OpenKeyPurpose::Read)
|
||||
}
|
||||
|
||||
fn open_scope_for_write(&self, scope: Scope) -> Result<OpenedKey, Error> {
|
||||
self.open_key(scope.into(), OpenKeyPurpose::ReadWrite)
|
||||
}
|
||||
|
||||
pub fn is_exist(&self, view: View) -> Result<bool, Error> {
|
||||
todo!()
|
||||
let key = self.open_view_for_read(view)?.this_key;
|
||||
Ok(key.is_some())
|
||||
}
|
||||
|
||||
pub fn ensure(&mut self, scope: Scope) -> Result<bool, Error> {
|
||||
todo!()
|
||||
let key = self.open_scope_for_write(scope)?;
|
||||
if let None = key.this_key {
|
||||
let _ = key.parent_key.create_subkey_with_flags(
|
||||
regext::blank_path_guard(self.ext.dotted_inner())?,
|
||||
KEY_READ | KEY_WRITE,
|
||||
)?;
|
||||
Ok(true)
|
||||
} else {
|
||||
Ok(false)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn delete(&mut self, scope: Scope) -> Result<(), Error> {
|
||||
todo!()
|
||||
let key = self.open_scope_for_write(scope)?;
|
||||
key.parent_key
|
||||
.delete_subkey_all(regext::blank_path_guard(self.ext.dotted_inner())?)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// YYC MARK:
|
||||
@@ -744,6 +775,18 @@ impl ExtKey {
|
||||
// because current interface are enough to use,
|
||||
// and these types has not been made as concept struct in Rust.
|
||||
|
||||
fn open_view_for_getter(&self, view: View) -> Result<RegKey, Error> {
|
||||
self.open_view_for_read(view)?
|
||||
.this_key
|
||||
.ok_or(Error::InexistantKey)
|
||||
}
|
||||
|
||||
fn open_scope_for_setter(&self, scope: Scope) -> Result<RegKey, Error> {
|
||||
self.open_scope_for_write(scope)?
|
||||
.this_key
|
||||
.ok_or(Error::InexistantKey)
|
||||
}
|
||||
|
||||
const NAMEOF_DEFAULT: &str = "";
|
||||
|
||||
pub fn get_default(&self, view: View) -> Result<Option<LosseProgId>, Error> {
|
||||
@@ -809,33 +852,93 @@ impl ProgIdKey {
|
||||
territory: OpenKeyTerritory,
|
||||
purpose: OpenKeyPurpose,
|
||||
) -> Result<OpenedKey, Error> {
|
||||
todo!()
|
||||
// check privilege
|
||||
check_privilege(territory, purpose)?;
|
||||
// Fetch the permission
|
||||
let perms = match purpose {
|
||||
OpenKeyPurpose::Read => KEY_READ,
|
||||
OpenKeyPurpose::ReadWrite => KEY_READ | KEY_WRITE,
|
||||
};
|
||||
|
||||
// navigate to ProgId container
|
||||
let hk = match territory {
|
||||
OpenKeyTerritory::User => RegKey::predef(HKEY_CURRENT_USER),
|
||||
OpenKeyTerritory::System => RegKey::predef(HKEY_LOCAL_MACHINE),
|
||||
OpenKeyTerritory::Hybrid => RegKey::predef(HKEY_CLASSES_ROOT),
|
||||
};
|
||||
let classes = match territory {
|
||||
OpenKeyTerritory::User | OpenKeyTerritory::System => {
|
||||
hk.open_subkey_with_flags(Self::FULL_CLASSES, perms)?
|
||||
}
|
||||
OpenKeyTerritory::Hybrid => hk.open_subkey_with_flags(Self::PARTIAL_CLASSES, perms)?,
|
||||
};
|
||||
// open ProgId key if possible
|
||||
let this_progid = regext::try_open_subkey_with_flags(
|
||||
&classes,
|
||||
regext::blank_path_guard(self.progid.to_string())?,
|
||||
perms,
|
||||
)?;
|
||||
// okey
|
||||
Ok(OpenedKey::new(classes, this_progid))
|
||||
}
|
||||
|
||||
fn open_view_for_read(&self, view: View) -> Result<OpenedKey, Error> {
|
||||
self.open_key(view.into(), OpenKeyPurpose::Read)
|
||||
}
|
||||
|
||||
fn open_scope_for_write(&self, scope: Scope) -> Result<OpenedKey, Error> {
|
||||
self.open_key(scope.into(), OpenKeyPurpose::ReadWrite)
|
||||
}
|
||||
|
||||
pub fn is_exist(&self, view: View) -> Result<bool, Error> {
|
||||
todo!()
|
||||
let key = self.open_view_for_read(view)?.this_key;
|
||||
Ok(key.is_some())
|
||||
}
|
||||
|
||||
pub fn ensure(&mut self, scope: Scope) -> Result<bool, Error> {
|
||||
todo!()
|
||||
let key = self.open_scope_for_write(scope)?;
|
||||
if let None = key.this_key {
|
||||
let _ = key.parent_key.create_subkey_with_flags(
|
||||
regext::blank_path_guard(self.progid.to_string())?,
|
||||
KEY_READ | KEY_WRITE,
|
||||
)?;
|
||||
Ok(true)
|
||||
} else {
|
||||
Ok(false)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn delete(&mut self, scope: Scope) -> Result<(), Error> {
|
||||
todo!()
|
||||
let key = self.open_scope_for_write(scope)?;
|
||||
key.parent_key
|
||||
.delete_subkey_all(regext::blank_path_guard(self.progid.to_string())?)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// YYC MARK:
|
||||
// Currently we only support (Default), FriendlyTypeName and DefaultIcon
|
||||
// to just cover the basic usage.
|
||||
|
||||
fn open_view_for_getter(&self, view: View) -> Result<RegKey, Error> {
|
||||
self.open_view_for_read(view)?
|
||||
.this_key
|
||||
.ok_or(Error::InexistantKey)
|
||||
}
|
||||
|
||||
fn open_scope_for_setter(&self, scope: Scope) -> Result<RegKey, Error> {
|
||||
self.open_scope_for_write(scope)?
|
||||
.this_key
|
||||
.ok_or(Error::InexistantKey)
|
||||
}
|
||||
|
||||
const NAMEOF_DEFAULT: &str = "";
|
||||
|
||||
pub fn get_default(&self, view: View) -> Result<Option<StrResVariant>, Error> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
///
|
||||
/// The legacy way to set friendly name for this ProgId.
|
||||
pub fn set_default(&mut self, scope: Scope, name: Option<&StrResVariant>) -> Result<(), Error> {
|
||||
todo!()
|
||||
@@ -858,8 +961,8 @@ impl ProgIdKey {
|
||||
todo!()
|
||||
}
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
///
|
||||
/// Set this entry to a friendly name for the ProgID.
|
||||
pub fn set_friendly_type_name(
|
||||
&mut self,
|
||||
@@ -869,7 +972,8 @@ impl ProgIdKey {
|
||||
todo!()
|
||||
}
|
||||
|
||||
const NAMEOF_DEFAULT_ICON: &str = "DefaultIcon";
|
||||
const NAMEOF_DEFAULT_ICON_PART1: &str = "DefaultIcon";
|
||||
const NAMEOF_DEFAULT_ICON_PART2: &str = "";
|
||||
|
||||
pub fn get_default_icon(&self, view: View) -> Result<Option<IconResVariant>, Error> {
|
||||
todo!()
|
||||
|
||||
Reference in New Issue
Block a user