mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 03:07:04 +02:00
Update settings logic for file explorer preview (#1651)
* Update logic of settings for File Explorer preview * Updated logic and added Unit tests * Fix compiler warning for powerpreview project * Update enable logic * Update Disable logic * Updated telemetry events
This commit is contained in:
@@ -15,12 +15,12 @@ namespace PowerPreviewSettings
|
||||
static LPCWSTR preview_handlers_subkey = L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers";
|
||||
|
||||
// Base Settinngs Class Implementation
|
||||
FileExplorerPreviewSettings::FileExplorerPreviewSettings(bool enabled, const std::wstring& name, const std::wstring& description, LPCWSTR clsid, const std::wstring& displayname, RegistryWrapperIface * registryWrapper) :
|
||||
m_isPreviewEnabled(enabled),
|
||||
m_name(name),
|
||||
m_description(description),
|
||||
FileExplorerPreviewSettings::FileExplorerPreviewSettings(bool toggleSettingEnabled, const std::wstring& toggleSettingName, const std::wstring& toggleSettingDescription, LPCWSTR clsid, const std::wstring& registryValueData, RegistryWrapperIface* registryWrapper) :
|
||||
m_toggleSettingEnabled(toggleSettingEnabled),
|
||||
m_toggleSettingName(toggleSettingName),
|
||||
m_toggleSettingDescription(toggleSettingDescription),
|
||||
m_clsid(clsid),
|
||||
m_displayName(displayname),
|
||||
m_registryValueData(registryValueData),
|
||||
m_registryWrapper(registryWrapper)
|
||||
{
|
||||
}
|
||||
@@ -33,68 +33,24 @@ namespace PowerPreviewSettings
|
||||
}
|
||||
}
|
||||
|
||||
bool FileExplorerPreviewSettings::GetState() const
|
||||
bool FileExplorerPreviewSettings::GetToggleSettingState() const
|
||||
{
|
||||
return this->m_isPreviewEnabled;
|
||||
return this->m_toggleSettingEnabled;
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::SetState(bool state)
|
||||
void FileExplorerPreviewSettings::UpdateToggleSettingState(bool state)
|
||||
{
|
||||
this->m_isPreviewEnabled = state;
|
||||
this->m_toggleSettingEnabled = state;
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::LoadState(PowerToysSettings::PowerToyValues& settings)
|
||||
std::wstring FileExplorerPreviewSettings::GetToggleSettingName() const
|
||||
{
|
||||
auto toggle = settings.get_bool_value(this->GetName());
|
||||
if (toggle != std::nullopt)
|
||||
{
|
||||
this->m_isPreviewEnabled = toggle.value();
|
||||
}
|
||||
return this->m_toggleSettingName;
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::UpdateState(PowerToysSettings::PowerToyValues& values)
|
||||
std::wstring FileExplorerPreviewSettings::GetToggleSettingDescription() const
|
||||
{
|
||||
auto toggle = values.get_bool_value(this->GetName());
|
||||
if (toggle != std::nullopt)
|
||||
{
|
||||
if (toggle.value())
|
||||
{
|
||||
this->EnablePreview();
|
||||
}
|
||||
else
|
||||
{
|
||||
this->DisablePreview();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpDateFailed(this->GetName().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
std::wstring FileExplorerPreviewSettings::GetName() const
|
||||
{
|
||||
return this->m_name;
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::SetName(const std::wstring& name)
|
||||
{
|
||||
this->m_name = name;
|
||||
}
|
||||
|
||||
std::wstring FileExplorerPreviewSettings::GetDescription() const
|
||||
{
|
||||
return this->m_description;
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::SetDescription(const std::wstring& description)
|
||||
{
|
||||
this->m_description = description;
|
||||
}
|
||||
|
||||
LPCWSTR FileExplorerPreviewSettings::GetSubKey() const
|
||||
{
|
||||
return preview_handlers_subkey;
|
||||
return this->m_toggleSettingDescription;
|
||||
}
|
||||
|
||||
LPCWSTR FileExplorerPreviewSettings::GetCLSID() const
|
||||
@@ -102,45 +58,73 @@ namespace PowerPreviewSettings
|
||||
return this->m_clsid;
|
||||
}
|
||||
|
||||
std::wstring FileExplorerPreviewSettings::GetDisplayName() const
|
||||
std::wstring FileExplorerPreviewSettings::GetRegistryValueData() const
|
||||
{
|
||||
return this->m_displayName;
|
||||
return this->m_registryValueData;
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::SetDisplayName(const std::wstring& displayName)
|
||||
// Load intital state of the Preview Handler. If no inital state present initialize setting with default value.
|
||||
void FileExplorerPreviewSettings::LoadState(PowerToysSettings::PowerToyValues& settings)
|
||||
{
|
||||
this->m_displayName = displayName;
|
||||
auto toggle = settings.get_bool_value(this->GetToggleSettingName());
|
||||
if (toggle)
|
||||
{
|
||||
// If no exisiting setting found leave the default intitialization value.
|
||||
this->UpdateToggleSettingState(*toggle);
|
||||
}
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::EnablePreview()
|
||||
// Manage change in state of Preview Handler settings.
|
||||
void FileExplorerPreviewSettings::UpdateState(PowerToysSettings::PowerToyValues& settings, bool enabled)
|
||||
{
|
||||
auto toggle = settings.get_bool_value(this->GetToggleSettingName());
|
||||
if (toggle)
|
||||
{
|
||||
auto lastState = this->GetToggleSettingState();
|
||||
auto newState = *toggle;
|
||||
if (lastState != newState)
|
||||
{
|
||||
this->UpdateToggleSettingState(newState);
|
||||
|
||||
// If global setting is enable. Add or remove the preview handler otherwise just change the UI and save the updated config.
|
||||
if (enabled)
|
||||
{
|
||||
LONG err;
|
||||
if (lastState)
|
||||
{
|
||||
err = this->DisablePreview();
|
||||
}
|
||||
else
|
||||
{
|
||||
err = this->EnablePreview();
|
||||
}
|
||||
|
||||
if (err == ERROR_SUCCESS)
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpdated(this->GetToggleSettingName().c_str(), lastState, newState, enabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpdateFailed(this->GetToggleSettingName().c_str(), lastState, newState, enabled);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpdated(this->GetToggleSettingName().c_str(), lastState, newState, enabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LONG FileExplorerPreviewSettings::EnablePreview()
|
||||
{
|
||||
// Add registry value to enable preview.
|
||||
LONG err = this->m_registryWrapper->SetRegistryValue(HKEY_CURRENT_USER, this->GetSubKey(), this->GetCLSID(), REG_SZ, (LPBYTE)this->GetDisplayName().c_str(), (DWORD)(this->GetDisplayName().length() * sizeof(wchar_t)));
|
||||
|
||||
if (err == ERROR_SUCCESS)
|
||||
{
|
||||
this->SetState(true);
|
||||
Trace::PreviewHandlerEnabled(true, this->GetDisplayName().c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpDateFailed(this->GetName().c_str());
|
||||
}
|
||||
return this->m_registryWrapper->SetRegistryValue(HKEY_CURRENT_USER, preview_handlers_subkey, this->GetCLSID(), REG_SZ, (LPBYTE)this->GetRegistryValueData().c_str(), (DWORD)(this->GetRegistryValueData().length() * sizeof(wchar_t)));
|
||||
}
|
||||
|
||||
void FileExplorerPreviewSettings::DisablePreview()
|
||||
LONG FileExplorerPreviewSettings::DisablePreview()
|
||||
{
|
||||
// Delete the registry key to disable preview.
|
||||
LONG err = this->m_registryWrapper->DeleteRegistryValue(HKEY_CURRENT_USER, this->GetSubKey(), this->GetCLSID());
|
||||
|
||||
if (err == ERROR_SUCCESS)
|
||||
{
|
||||
this->SetState(false);
|
||||
Trace::PreviewHandlerEnabled(false, this->GetDisplayName().c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpDateFailed(this->GetName().c_str());
|
||||
}
|
||||
return this->m_registryWrapper->DeleteRegistryValue(HKEY_CURRENT_USER, preview_handlers_subkey, this->GetCLSID());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user