Added return value to CurrentUserSetBoolValue that indicates success

This commit is contained in:
Joshua Askharoun
2021-05-06 02:36:14 -05:00
parent 8fc552c1e8
commit b513292813
3 changed files with 67 additions and 27 deletions
+28 -6
View File
@@ -57,20 +57,42 @@ namespace ZuneModCore.Mods
public override Task Init() public override Task Init()
{ {
foreach (AbstractUIElement uiElem in OptionsUI.Items) foreach (AbstractUIElement uiElem in OptionsUI.Items)
{
if (uiElem is AbstractBooleanUIElement boolElem) if (uiElem is AbstractBooleanUIElement boolElem)
boolElem.ChangeState(GetFeatureOverride(boolElem.Id)); {
bool? featureOverride = GetFeatureOverride(boolElem.Id);
boolElem.ChangeState(featureOverride ?? false);
}
}
return Task.CompletedTask; return Task.CompletedTask;
} }
public override Task<string?> Apply() public override async Task<string?> Apply()
{ {
// TODO: Use user choices from AbstractUI // TODO: Use user choices from AbstractUI
foreach (AbstractUIElement uiElem in OptionsUI.Items) foreach (AbstractUIElement uiElem in OptionsUI.Items)
{
if (uiElem is AbstractBooleanUIElement boolElem)// && boolElem.State) if (uiElem is AbstractBooleanUIElement boolElem)// && boolElem.State)
SetFeatureOverride(boolElem.Id, true); {
bool isSuccess = SetFeatureOverride(boolElem.Id, true);
if (!isSuccess)
{
string? resetStatus = await Reset();
if (resetStatus != null)
{
// The reset failed as well, return both errors
return "Failed to set registry keys. Unable to clean up partial overrides:\r\n" + resetStatus;
}
else
{
return "Failed to set registry keys. Automatically cleaned up partial changes.";
}
}
}
}
return Task.FromResult<string?>(null); return null;
} }
public override Task<string?> Reset() public override Task<string?> Reset()
@@ -82,10 +104,10 @@ namespace ZuneModCore.Mods
return Task.FromResult<string?>(null); return Task.FromResult<string?>(null);
} }
public static void SetFeatureOverride(string feature, bool value) => public static bool SetFeatureOverride(string feature, bool value) =>
RegEdit.CurrentUserSetBoolValue(ZUNE_FEATURESOVERRIDE_REGKEY, feature, value); RegEdit.CurrentUserSetBoolValue(ZUNE_FEATURESOVERRIDE_REGKEY, feature, value);
public static bool GetFeatureOverride(string feature) => public static bool? GetFeatureOverride(string feature) =>
RegEdit.CurrentUserGetBoolValue(ZUNE_FEATURESOVERRIDE_REGKEY, feature); RegEdit.CurrentUserGetBoolValue(ZUNE_FEATURESOVERRIDE_REGKEY, feature);
public static void ResetFeatureOverride(string feature) => public static void ResetFeatureOverride(string feature) =>
+28 -18
View File
@@ -66,15 +66,20 @@ namespace ZuneModCore.Mods
// Enable all feature overrides affected by new servers // Enable all feature overrides affected by new servers
SetFeatureOverride("Apps", true); bool setOverrideSuccess = true;
SetFeatureOverride("Channels", true); setOverrideSuccess &= SetFeatureOverride("Apps", true);
SetFeatureOverride("Games", true); setOverrideSuccess &= SetFeatureOverride("Channels", true);
SetFeatureOverride("Marketplace", true); setOverrideSuccess &= SetFeatureOverride("Games", true);
SetFeatureOverride("Music", true); setOverrideSuccess &= SetFeatureOverride("Marketplace", true);
SetFeatureOverride("MusicVideos", true); setOverrideSuccess &= SetFeatureOverride("Music", true);
SetFeatureOverride("Podcasts", true); setOverrideSuccess &= SetFeatureOverride("MusicVideos", true);
SetFeatureOverride("Social", true); setOverrideSuccess &= SetFeatureOverride("Podcasts", true);
SetFeatureOverride("Videos", true); setOverrideSuccess &= SetFeatureOverride("Social", true);
setOverrideSuccess &= SetFeatureOverride("Videos", true);
if (setOverrideSuccess != true)
{
return Task.FromResult<string?>("Unable to set feature overrides. The mod was successful, but you may not be able to see it in the Zune Software.");
}
return Task.FromResult<string?>(null); return Task.FromResult<string?>(null);
} }
@@ -97,15 +102,20 @@ namespace ZuneModCore.Mods
File.Copy(Path.Combine(StorageDirectory, "ZuneService.original.dll"), zsDllPath, true); File.Copy(Path.Combine(StorageDirectory, "ZuneService.original.dll"), zsDllPath, true);
// Disable all feature overrides affected by new servers // Disable all feature overrides affected by new servers
SetFeatureOverride("Apps", false); bool setOverrideSuccess = true;
SetFeatureOverride("Channels", false); setOverrideSuccess &= SetFeatureOverride("Apps", false);
SetFeatureOverride("Games", false); setOverrideSuccess &= SetFeatureOverride("Channels", false);
SetFeatureOverride("Marketplace", false); setOverrideSuccess &= SetFeatureOverride("Games", false);
SetFeatureOverride("Music", false); setOverrideSuccess &= SetFeatureOverride("Marketplace", false);
SetFeatureOverride("MusicVideos", false); setOverrideSuccess &= SetFeatureOverride("Music", false);
SetFeatureOverride("Podcasts", false); setOverrideSuccess &= SetFeatureOverride("MusicVideos", false);
SetFeatureOverride("Social", false); setOverrideSuccess &= SetFeatureOverride("Podcasts", false);
SetFeatureOverride("Videos", false); setOverrideSuccess &= SetFeatureOverride("Social", false);
setOverrideSuccess &= SetFeatureOverride("Videos", false);
if (setOverrideSuccess != true)
{
return Task.FromResult<string?>("Unable to reset feature overrides. The mod was successfully removed, but you may still be able to see it in the Zune Software.");
}
return Task.FromResult<string?>(null); return Task.FromResult<string?>(null);
} }
+11 -3
View File
@@ -9,7 +9,7 @@ namespace ZuneModCore
{ {
public const string ZUNE_REG_PATH = @"SOFTWARE\Microsoft\Zune\"; public const string ZUNE_REG_PATH = @"SOFTWARE\Microsoft\Zune\";
public static void CurrentUserSetBoolValue(string key, string name, bool value) public static bool CurrentUserSetBoolValue(string key, string name, bool value)
{ {
RegistryKey? regKey = Registry.CurrentUser.OpenSubKey(key, true); RegistryKey? regKey = Registry.CurrentUser.OpenSubKey(key, true);
if (regKey == null) if (regKey == null)
@@ -18,16 +18,24 @@ namespace ZuneModCore
regKey.SetValue(name, value, RegistryValueKind.DWord); regKey.SetValue(name, value, RegistryValueKind.DWord);
regKey.Close(); regKey.Close();
regKey.Dispose(); regKey.Dispose();
// Read the key to make sure it was set properly
if (CurrentUserGetBoolValue(key, name) == null)
return false;
return true;
} }
public static bool CurrentUserGetBoolValue(string key, string name) public static bool? CurrentUserGetBoolValue(string key, string name)
{ {
using RegistryKey? regKey = Registry.CurrentUser.OpenSubKey(key, true); using RegistryKey? regKey = Registry.CurrentUser.OpenSubKey(key, true);
if (regKey == null) if (regKey == null)
return false; return false;
// Return null if a boolean value couldn't be read from the key
int? value = regKey.GetValue(name, false) as int?; int? value = regKey.GetValue(name, false) as int?;
return value.HasValue && value != 0; if (!value.HasValue)
return null;
return value != 0;
} }
public static void CurrentUserDeleteKey(string key) public static void CurrentUserDeleteKey(string key)