diff --git a/Bloxstrap/Bootstrapper.cs b/Bloxstrap/Bootstrapper.cs index d68c50c..2fe3a0c 100644 --- a/Bloxstrap/Bootstrapper.cs +++ b/Bloxstrap/Bootstrapper.cs @@ -229,10 +229,32 @@ namespace Bloxstrap } catch (HttpResponseException ex) { - if (ex.ResponseMessage.StatusCode != HttpStatusCode.NotFound) - throw; + // If channel does not exist + if (ex.ResponseMessage.StatusCode == HttpStatusCode.NotFound) + App.Logger.WriteLine(LOG_IDENT, $"Reverting enrolled channel to {RobloxDeployment.DefaultChannel} because a WindowsPlayer build does not exist for {App.Settings.Prop.Channel}"); + // If channel is not available to the user (private/internal release channel) + else if (ex.ResponseMessage.StatusCode == HttpStatusCode.Unauthorized) + { + App.Logger.WriteLine(LOG_IDENT, $"Channel {App.Settings.Prop.Channel} is unavailable to the user."); + // Only prompt if user has channel switching mode set to something other than Automatic. + if (App.Settings.Prop.ChannelChangeMode != ChannelChangeMode.Automatic) + { + MessageBoxResult channelChangeResult = Controls.ShowMessageBox( + $"Release channel {App.Settings.Prop.Channel} is not available to you. Would you like to reset to {RobloxDeployment.DefaultChannel}?", + MessageBoxImage.Warning, + MessageBoxButton.YesNo); + + if (channelChangeResult != MessageBoxResult.Yes) + { + Controls.ShowMessageBox($"Client cannot be launched as you are enrolled into an unavailable release channel and refused to reset.", MessageBoxImage.Error); + App.Logger.WriteLine(LOG_IDENT, $"User refused to reset channel. Aborting."); + App.Terminate(ErrorCode.ERROR_CANCELLED); + } + } + App.Logger.WriteLine(LOG_IDENT, $"Resetting release channel to {RobloxDeployment.DefaultChannel} as {App.Settings.Prop.Channel} is unavailable to the user."); + } + else throw; - App.Logger.WriteLine(LOG_IDENT, $"Reverting enrolled channel to {RobloxDeployment.DefaultChannel} because a WindowsPlayer build does not exist for {App.Settings.Prop.Channel}"); App.Settings.Prop.Channel = RobloxDeployment.DefaultChannel; clientVersion = await RobloxDeployment.GetInfo(App.Settings.Prop.Channel); }