diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..91105e5cf --- /dev/null +++ b/.editorconfig @@ -0,0 +1,101 @@ +# https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/.editorconfig + +root = true + +[*.{csproj,props,targets}] +indent_style = space +indent_size = 2 + +[*.yml] +indent_style = space +indent_size = 2 + +[*.cs] +charset = utf-8-bom +insert_final_newline = true +indent_style = space +indent_size = 4 + +# Sort using and Import directives with System.* appearing first +dotnet_sort_system_directives_first = true +dotnet_separate_import_directive_groups = false +csharp_using_directive_placement = inside_namespace:none + +# Always use "this." and "Me." when applicable; let StyleCop Analyzers provide the warning and fix +dotnet_style_qualification_for_field = true:none +dotnet_style_qualification_for_property = true:none +dotnet_style_qualification_for_method = true:none +dotnet_style_qualification_for_event = true:none + +# Use language keywords where applicable; let StyleCop Analyzers provide the warning and fix +dotnet_style_predefined_type_for_locals_parameters_members = true:none +dotnet_style_predefined_type_for_member_access = true:none + +# Suggest more modern language features when available +dotnet_style_object_initializer = true:none +dotnet_style_collection_initializer = true:none +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion + +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_switch_labels = false +csharp_indent_labels = flush_left + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = do_not_ignore +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Prefer "var" only where type is obvious; disable diagnostics since no firm policy is in place yet +csharp_style_var_for_built_in_types = false:none +csharp_style_var_when_type_is_apparent = true:none +csharp_style_var_elsewhere = false:none + +# Prefer method-like constructs to have a block body +csharp_style_expression_bodied_methods = false:none +csharp_style_expression_bodied_constructors = false:none +csharp_style_expression_bodied_operators = false:none + +# Prefer property-like constructs to have an expression-body +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +# Suggest more modern language features when available +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_inlined_variable_declaration = true:none +csharp_style_throw_expression = true:none +csharp_style_conditional_delegate_call = true:suggestion \ No newline at end of file diff --git a/ConfigApp/AssemblyInfo.cs b/ConfigApp/AssemblyInfo.cs index 8b5504ecf..f60efc019 100644 --- a/ConfigApp/AssemblyInfo.cs +++ b/ConfigApp/AssemblyInfo.cs @@ -1,4 +1,4 @@ -using System.Windows; +using System.Windows; [assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located diff --git a/ConfigApp/Effects.cs b/ConfigApp/Effects.cs index 898f3527f..e5bdd3a97 100644 --- a/ConfigApp/Effects.cs +++ b/ConfigApp/Effects.cs @@ -1,4 +1,4 @@ -namespace ConfigApp +namespace ConfigApp { public static class Effects { diff --git a/ConfigApp/MainWindow.xaml.cs b/ConfigApp/MainWindow.xaml.cs index c43221a2b..49c620cca 100644 --- a/ConfigApp/MainWindow.xaml.cs +++ b/ConfigApp/MainWindow.xaml.cs @@ -1,12 +1,11 @@ -using ConfigApp.Tabs; -using ConfigApp.Tabs.Voting; -using System.IO; +using System.IO; using System.Net.Http; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; - +using ConfigApp.Tabs; +using ConfigApp.Tabs.Voting; using static ConfigApp.Effects; namespace ConfigApp @@ -271,30 +270,30 @@ private void InitEffectsTreeView() switch (effectMisc.EffectCategory) { - case EffectCategory.Player: - playerParentItem.AddChild(menuItem); - break; - case EffectCategory.Vehicle: - vehicleParentItem.AddChild(menuItem); - break; - case EffectCategory.Peds: - pedsParentItem.AddChild(menuItem); - break; - case EffectCategory.Screen: - screenParentItem.AddChild(menuItem); - break; - case EffectCategory.Time: - timeParentItem.AddChild(menuItem); - break; - case EffectCategory.Weather: - weatherParentItem.AddChild(menuItem); - break; - case EffectCategory.Misc: - miscParentItem.AddChild(menuItem); - break; - case EffectCategory.Meta: - metaParentItem.AddChild(menuItem); - break; + case EffectCategory.Player: + playerParentItem.AddChild(menuItem); + break; + case EffectCategory.Vehicle: + vehicleParentItem.AddChild(menuItem); + break; + case EffectCategory.Peds: + pedsParentItem.AddChild(menuItem); + break; + case EffectCategory.Screen: + screenParentItem.AddChild(menuItem); + break; + case EffectCategory.Time: + timeParentItem.AddChild(menuItem); + break; + case EffectCategory.Weather: + weatherParentItem.AddChild(menuItem); + break; + case EffectCategory.Misc: + miscParentItem.AddChild(menuItem); + break; + case EffectCategory.Meta: + metaParentItem.AddChild(menuItem); + break; } } @@ -427,4 +426,4 @@ public void OpenModPageEvent(object sender, RoutedEventArgs eventArgs) System.Diagnostics.Process.Start("https://www.gta5-mods.com/scripts/chaos-mod-v-beta"); } } -} \ No newline at end of file +} diff --git a/ConfigApp/OptionsManager.cs b/ConfigApp/OptionsManager.cs index d22c036c8..88b564cca 100644 --- a/ConfigApp/OptionsManager.cs +++ b/ConfigApp/OptionsManager.cs @@ -1,5 +1,5 @@ -using Shared; -using System.IO; +using System.IO; +using Shared; namespace ConfigApp { diff --git a/ConfigApp/Tabs/WorkshopTab.cs b/ConfigApp/Tabs/WorkshopTab.cs index 780c165b3..a5ac017ba 100644 --- a/ConfigApp/Tabs/WorkshopTab.cs +++ b/ConfigApp/Tabs/WorkshopTab.cs @@ -1,7 +1,4 @@ -using Microsoft.CSharp.RuntimeBinder; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.Collections.ObjectModel; +using System.Collections.ObjectModel; using System.IO; using System.Net.Http; using System.Security.Cryptography; @@ -11,9 +8,11 @@ using System.Windows.Data; using System.Windows.Markup; using System.Windows.Media; +using Microsoft.CSharp.RuntimeBinder; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using Xceed.Wpf.Toolkit; using ZstdSharp; - using MessageBox = System.Windows.MessageBox; namespace ConfigApp.Tabs @@ -494,4 +493,4 @@ public async override void OnTabSelected() } } } -} \ No newline at end of file +} diff --git a/ConfigApp/WorkshopEditDialog.xaml.cs b/ConfigApp/WorkshopEditDialog.xaml.cs index fbd1ce52a..a0457afa3 100644 --- a/ConfigApp/WorkshopEditDialog.xaml.cs +++ b/ConfigApp/WorkshopEditDialog.xaml.cs @@ -100,22 +100,22 @@ TreeMenuItem generateItem(string text, TreeMenuItem? parent = null) bool isConfigurable = false; switch (pathName[^4..]) { - case ".lua": - targetItem = luaParentItem; - isConfigurable = true; - break; - case ".mp3": - targetItem = mp3ParentItem; - break; - case ".txt": - if (m_DialogMode != WorkshopEditDialogMode.Install) - { - continue; - } - targetItem = txtParentItem; - break; - default: + case ".lua": + targetItem = luaParentItem; + isConfigurable = true; + break; + case ".mp3": + targetItem = mp3ParentItem; + break; + case ".txt": + if (m_DialogMode != WorkshopEditDialogMode.Install) + { continue; + } + targetItem = txtParentItem; + break; + default: + continue; } if (pathFragments.Length > 1) diff --git a/ConfigApp/WorkshopInstallHandler.cs b/ConfigApp/WorkshopInstallHandler.cs index b0e3a2dd3..39b5ab37b 100644 --- a/ConfigApp/WorkshopInstallHandler.cs +++ b/ConfigApp/WorkshopInstallHandler.cs @@ -1,5 +1,4 @@ -using Newtonsoft.Json.Linq; -using System.IO; +using System.IO; using System.IO.Compression; using System.Media; using System.Net.Http; @@ -7,6 +6,7 @@ using System.Text; using System.Windows; using System.Windows.Input; +using Newtonsoft.Json.Linq; using ZstdSharp; namespace ConfigApp diff --git a/ConfigApp/WorkshopSettingsHandler.cs b/ConfigApp/WorkshopSettingsHandler.cs index cd9bec87a..be7a8fcfe 100644 --- a/ConfigApp/WorkshopSettingsHandler.cs +++ b/ConfigApp/WorkshopSettingsHandler.cs @@ -1,8 +1,8 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System.IO; +using System.IO; using System.Windows; using System.Windows.Input; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace ConfigApp { diff --git a/ConfigApp/WorkshopSubmissionItem.cs b/ConfigApp/WorkshopSubmissionItem.cs index d79723b42..ef2d4bdaa 100644 --- a/ConfigApp/WorkshopSubmissionItem.cs +++ b/ConfigApp/WorkshopSubmissionItem.cs @@ -47,29 +47,29 @@ public SubmissionInstallState InstallState switch (value) { - case SubmissionInstallState.NotInstalled: - InstallButtonText = "Install"; - InstallButtonEnabled = !IsAlien; - SettingsButtonVisibility = Visibility.Hidden; - break; - case SubmissionInstallState.Installed: - InstallButtonText = "Remove"; - InstallButtonEnabled = true; - SettingsButtonVisibility = Visibility.Visible; - break; - case SubmissionInstallState.Installing: - InstallButtonText = "Installing"; - InstallButtonEnabled = false; - break; - case SubmissionInstallState.UpdateAvailable: - InstallButtonText = "Update"; - InstallButtonEnabled = !IsAlien; - SettingsButtonVisibility = Visibility.Visible; - break; - case SubmissionInstallState.Removing: - InstallButtonText = "Removing"; - InstallButtonEnabled = false; - break; + case SubmissionInstallState.NotInstalled: + InstallButtonText = "Install"; + InstallButtonEnabled = !IsAlien; + SettingsButtonVisibility = Visibility.Hidden; + break; + case SubmissionInstallState.Installed: + InstallButtonText = "Remove"; + InstallButtonEnabled = true; + SettingsButtonVisibility = Visibility.Visible; + break; + case SubmissionInstallState.Installing: + InstallButtonText = "Installing"; + InstallButtonEnabled = false; + break; + case SubmissionInstallState.UpdateAvailable: + InstallButtonText = "Update"; + InstallButtonEnabled = !IsAlien; + SettingsButtonVisibility = Visibility.Visible; + break; + case SubmissionInstallState.Removing: + InstallButtonText = "Removing"; + InstallButtonEnabled = false; + break; } PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(InstallButtonText))); diff --git a/TwitchChatVotingProxy/ChaosModController.cs b/TwitchChatVotingProxy/ChaosModController.cs index 457672856..7dc6536cd 100644 --- a/TwitchChatVotingProxy/ChaosModController.cs +++ b/TwitchChatVotingProxy/ChaosModController.cs @@ -1,9 +1,8 @@ +using System.Timers; using Serilog; -using System.Timers; using TwitchChatVotingProxy.ChaosPipe; using TwitchChatVotingProxy.OverlayServer; using TwitchChatVotingProxy.VotingReceiver; - using Timer = System.Timers.Timer; namespace TwitchChatVotingProxy @@ -130,12 +129,12 @@ private void OnGetVoteResult(object? sender, OnGetVoteResultArgs e) // Evaluate what result calculation to use switch (m_Config.VotingMode) { - case EVotingMode.MAJORITY: - e.ChosenOption = GetVoteResultByMajority(); - break; - case EVotingMode.PERCENTAGE: - e.ChosenOption = GetVoteResultByPercentage(); - break; + case EVotingMode.MAJORITY: + e.ChosenOption = GetVoteResultByMajority(); + break; + case EVotingMode.PERCENTAGE: + e.ChosenOption = GetVoteResultByPercentage(); + break; } // Vote round ended @@ -163,37 +162,37 @@ private async void OnNewVote(object? sender, OnNewVoteArgs e) // Depending on the overlay mode either inform the overlay server about the new vote or send a chat message aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa switch (m_Config.OverlayMode) { - case EOverlayMode.CHAT_MESSAGES: - string msg = "Time for a new effect! Vote between:"; - foreach (IVoteOption voteOption in m_ActiveVoteOptions) - { - msg += "\n"; - - bool firstIndex = true; - foreach (string match in voteOption.Matches) - { - msg += firstIndex ? $"{match} " : $" / {match}"; + case EOverlayMode.CHAT_MESSAGES: + string msg = "Time for a new effect! Vote between:"; + foreach (IVoteOption voteOption in m_ActiveVoteOptions) + { + msg += "\n"; - firstIndex = true; - } + bool firstIndex = true; + foreach (string match in voteOption.Matches) + { + msg += firstIndex ? $"{match} " : $" / {match}"; - msg += $": {voteOption.Label}"; + firstIndex = true; } - if (m_Config.VotingMode == EVotingMode.PERCENTAGE) - { - msg += "\nVotes will affect the chance for one of the effects to occur."; - } + msg += $": {voteOption.Label}"; + } - foreach (var votingReceiver in m_VotingReceivers) - { - await votingReceiver.SendMessage(msg); - } + if (m_Config.VotingMode == EVotingMode.PERCENTAGE) + { + msg += "\nVotes will affect the chance for one of the effects to occur."; + } - break; - case EOverlayMode.OVERLAY_OBS: - m_OverlayServer?.NewVoting(m_ActiveVoteOptions); - break; + foreach (var votingReceiver in m_VotingReceivers) + { + await votingReceiver.SendMessage(msg); + } + + break; + case EOverlayMode.OVERLAY_OBS: + m_OverlayServer?.NewVoting(m_ActiveVoteOptions); + break; } // Clear the old voted for information m_UserVotedFor.Clear(); diff --git a/TwitchChatVotingProxy/ChaosPipe/ChaosPipeClient.cs b/TwitchChatVotingProxy/ChaosPipe/ChaosPipeClient.cs index 81f10fa5b..e16c94505 100644 --- a/TwitchChatVotingProxy/ChaosPipe/ChaosPipeClient.cs +++ b/TwitchChatVotingProxy/ChaosPipe/ChaosPipeClient.cs @@ -1,8 +1,7 @@ -using Newtonsoft.Json; -using Serilog; -using System.IO.Pipes; +using System.IO.Pipes; using System.Timers; - +using Newtonsoft.Json; +using Serilog; using Timer = System.Timers.Timer; namespace TwitchChatVotingProxy.ChaosPipe @@ -201,24 +200,24 @@ private void ReadPipe() var pipe = JsonConvert.DeserializeObject(message); switch (pipe?.Identifier) { - case "hello_back": - GotHelloBack = true; - break; - case "vote": - StartNewVote(pipe.Options); - break; - case "getvoteresult": - GetVoteResult(); - break; - case "novoteround": - StartNoVotingRound(); - break; - case "getcurrentvotes": - GetCurrentVotes(); - break; - default: - m_Logger.Warning($"Unknown request: {message}"); - break; + case "hello_back": + GotHelloBack = true; + break; + case "vote": + StartNewVote(pipe.Options); + break; + case "getvoteresult": + GetVoteResult(); + break; + case "novoteround": + StartNoVotingRound(); + break; + case "getcurrentvotes": + GetCurrentVotes(); + break; + default: + m_Logger.Warning($"Unknown request: {message}"); + break; } } } diff --git a/TwitchChatVotingProxy/EVotingMode.cs b/TwitchChatVotingProxy/EVotingMode.cs index b3f53c852..548d9710b 100644 --- a/TwitchChatVotingProxy/EVotingMode.cs +++ b/TwitchChatVotingProxy/EVotingMode.cs @@ -48,4 +48,4 @@ static class VotingMode return votingMode; } } -} \ No newline at end of file +} diff --git a/TwitchChatVotingProxy/OverlayServer/OverlayServer.cs b/TwitchChatVotingProxy/OverlayServer/OverlayServer.cs index 2a3ab52a9..f6fad57d8 100644 --- a/TwitchChatVotingProxy/OverlayServer/OverlayServer.cs +++ b/TwitchChatVotingProxy/OverlayServer/OverlayServer.cs @@ -127,7 +127,8 @@ private void Request(string request, List voteOptions) msg.TotalVotes = 0; voteOptions.ForEach(_ => msg.TotalVotes += _.Votes); // Send the message to all clients - Broadcast(JsonConvert.SerializeObject(msg, new JsonSerializerSettings { + Broadcast(JsonConvert.SerializeObject(msg, new JsonSerializerSettings + { ContractResolver = new CamelCasePropertyNamesContractResolver() })); } diff --git a/TwitchChatVotingProxy/TwitchChatVotingProxy.cs b/TwitchChatVotingProxy/TwitchChatVotingProxy.cs index 7177dc70f..ee03c8fd7 100644 --- a/TwitchChatVotingProxy/TwitchChatVotingProxy.cs +++ b/TwitchChatVotingProxy/TwitchChatVotingProxy.cs @@ -125,4 +125,4 @@ private static async Task Main(string[] args) m_Logger.Information("Pipe disconnected, ending program."); } } -} \ No newline at end of file +} diff --git a/TwitchChatVotingProxy/VotingReceiver/DiscordVotingReceiver.cs b/TwitchChatVotingProxy/VotingReceiver/DiscordVotingReceiver.cs index 2db80b3e2..b36eabd34 100644 --- a/TwitchChatVotingProxy/VotingReceiver/DiscordVotingReceiver.cs +++ b/TwitchChatVotingProxy/VotingReceiver/DiscordVotingReceiver.cs @@ -113,18 +113,18 @@ private Task OnLog(LogMessage log) { switch (log.Severity) { - case LogSeverity.Critical: - m_Logger.Fatal($"{log.Message}"); - break; - case LogSeverity.Error: - m_Logger.Error($"{log.Message}"); - break; - case LogSeverity.Warning: - m_Logger.Warning($"{log.Message}"); - break; - case LogSeverity.Info: - m_Logger.Information($"{log.Message}"); - break; + case LogSeverity.Critical: + m_Logger.Fatal($"{log.Message}"); + break; + case LogSeverity.Error: + m_Logger.Error($"{log.Message}"); + break; + case LogSeverity.Warning: + m_Logger.Warning($"{log.Message}"); + break; + case LogSeverity.Info: + m_Logger.Information($"{log.Message}"); + break; } return Task.CompletedTask;