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:
udit3333
2020-03-24 16:23:27 -07:00
committed by GitHub
parent badcccab76
commit 7f1a854769
9 changed files with 251 additions and 247 deletions

View File

@@ -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());
}
}