Skip to content

Commit eb9353a

Browse files
committed
Closes #3861 -- introduces new setting that isn't UI-visible but allow us to ship Rubberduck with Trace as the default logging level. If the user do not edit it, at the shutdown of the Rubberduck, the log level will be changed to None.
1 parent 8d26793 commit eb9353a

File tree

7 files changed

+38
-7
lines changed

7 files changed

+38
-7
lines changed

Rubberduck.Core/App.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,24 @@ private void UpdateLoggingLevel()
105105
LogLevelHelper.SetMinimumLogLevel(LogLevel.FromOrdinal(_config.UserSettings.GeneralSettings.MinimumLogLevel));
106106
}
107107

108+
/// <summary>
109+
/// Ensure that log level is changed to "none" after a successful
110+
/// run of Rubberduck for first time. By default, we ship with
111+
/// log level set to Trace (0) but once it's installed and has
112+
/// ran without problem, it should be set to None (6)
113+
/// </summary>
114+
private void UpdateLoggingLevelOnShutdown()
115+
{
116+
if (_config.UserSettings.GeneralSettings.UserEditedLogLevel ||
117+
_config.UserSettings.GeneralSettings.MinimumLogLevel != LogLevel.Trace.Ordinal)
118+
{
119+
return;
120+
}
121+
122+
_config.UserSettings.GeneralSettings.MinimumLogLevel = LogLevel.Off.Ordinal;
123+
_configService.SaveConfiguration(_config);
124+
}
125+
108126
public void Startup()
109127
{
110128
EnsureLogFolderPathExists();
@@ -131,6 +149,8 @@ public void Shutdown()
131149
{
132150
Debug.WriteLine("App calling Hooks.Detach.");
133151
_hooks.Detach();
152+
153+
UpdateLoggingLevelOnShutdown();
134154
}
135155
catch
136156
{

Rubberduck.Core/Properties/Settings.Designer.cs

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Rubberduck.Core/Properties/Settings.settings

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@
178178
&lt;IsSmartIndenterPrompted&gt;false&lt;/IsSmartIndenterPrompted&gt;
179179
&lt;IsAutoSaveEnabled&gt;false&lt;/IsAutoSaveEnabled&gt;
180180
&lt;AutoSavePeriod&gt;10&lt;/AutoSavePeriod&gt;
181-
&lt;MinimumLogLevel&gt;6&lt;/MinimumLogLevel&gt;
181+
&lt;UserEditedLogLevel&gt;false&lt;/UserEditedLogLevel&gt;
182+
&lt;MinimumLogLevel&gt;0&lt;/MinimumLogLevel&gt;
182183
&lt;EnableExperimentalFeatures /&gt;
183184
&lt;/GeneralSettings&gt;</Value>
184185
</Setting>

Rubberduck.Core/Rubberduck.Core.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,10 @@
123123
<AutoGen>True</AutoGen>
124124
<DesignTimeSharedInput>True</DesignTimeSharedInput>
125125
<DependentUpon>Settings.settings</DependentUpon>
126+
<DesignTime>True</DesignTime>
126127
</Compile>
127128
<None Include="Properties\Settings.settings">
128-
<Generator>PublicSettingsSingleFileGenerator</Generator>
129+
<Generator>SettingsSingleFileGenerator</Generator>
129130
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
130131
</None>
131132
</ItemGroup>

Rubberduck.Core/Settings/GeneralSettings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public interface IGeneralSettings
1616
bool IsSmartIndenterPrompted { get; set; }
1717
bool IsAutoSaveEnabled { get; set; }
1818
int AutoSavePeriod { get; set; }
19+
bool UserEditedLogLevel { get; set; }
1920
int MinimumLogLevel { get; set; }
2021
List<ExperimentalFeatures> EnableExperimentalFeatures { get; set; }
2122
}
@@ -32,6 +33,8 @@ public class GeneralSettings : IGeneralSettings, IEquatable<GeneralSettings>
3233
public bool IsAutoSaveEnabled { get; set; }
3334
public int AutoSavePeriod { get; set; }
3435

36+
public bool UserEditedLogLevel { get; set; }
37+
3538
private int _logLevel;
3639
public int MinimumLogLevel
3740
{
@@ -73,6 +76,7 @@ public bool Equals(GeneralSettings other)
7376
IsSmartIndenterPrompted == other.IsSmartIndenterPrompted &&
7477
IsAutoSaveEnabled == other.IsAutoSaveEnabled &&
7578
AutoSavePeriod == other.AutoSavePeriod &&
79+
UserEditedLogLevel == other.UserEditedLogLevel &&
7680
MinimumLogLevel == other.MinimumLogLevel &&
7781
EnableExperimentalFeatures.All(a => other.EnableExperimentalFeatures.Contains(a)) &&
7882
EnableExperimentalFeatures.Count == other.EnableExperimentalFeatures.Count;

Rubberduck.Core/UI/Settings/GeneralSettingsViewModel.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ public DelimiterOptions Delimiter
200200

201201
public ObservableCollection<MinimumLogLevel> LogLevels { get; set; }
202202
private MinimumLogLevel _selectedLogLevel;
203+
private bool _userEditedLogLevel;
203204

204205
public MinimumLogLevel SelectedLogLevel
205206
{
@@ -208,6 +209,7 @@ public MinimumLogLevel SelectedLogLevel
208209
{
209210
if (!Equals(_selectedLogLevel, value))
210211
{
212+
_userEditedLogLevel = true;
211213
_selectedLogLevel = value;
212214
OnPropertyChanged();
213215
}
@@ -243,7 +245,8 @@ private Rubberduck.Settings.GeneralSettings GetCurrentGeneralSettings()
243245
IsSmartIndenterPrompted = _indenterPrompted,
244246
IsAutoSaveEnabled = AutoSaveEnabled,
245247
AutoSavePeriod = AutoSavePeriod,
246-
MinimumLogLevel = SelectedLogLevel.Ordinal,
248+
UserEditedLogLevel = _userEditedLogLevel,
249+
MinimumLogLevel = _selectedLogLevel.Ordinal,
247250
EnableExperimentalFeatures = ExperimentalFeatures
248251
};
249252
}
@@ -258,7 +261,8 @@ private void TransferSettingsToView(IGeneralSettings general, IHotkeySettings ho
258261
_indenterPrompted = general.IsSmartIndenterPrompted;
259262
AutoSaveEnabled = general.IsAutoSaveEnabled;
260263
AutoSavePeriod = general.AutoSavePeriod;
261-
SelectedLogLevel = LogLevels.First(l => l.Ordinal == general.MinimumLogLevel);
264+
_userEditedLogLevel = general.UserEditedLogLevel;
265+
_selectedLogLevel = LogLevels.First(l => l.Ordinal == general.MinimumLogLevel);
262266

263267
ExperimentalFeatures = _experimentalFeatureTypes
264268
.SelectMany(s => s.CustomAttributes.Where(a => a.ConstructorArguments.Any()).Select(a => (string)a.ConstructorArguments.First().Value))

Rubberduck.Core/app.config

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,8 @@
228228
<IsSmartIndenterPrompted>false</IsSmartIndenterPrompted>
229229
<IsAutoSaveEnabled>false</IsAutoSaveEnabled>
230230
<AutoSavePeriod>10</AutoSavePeriod>
231-
<MinimumLogLevel>6</MinimumLogLevel>
231+
<UserEditedLogLevel>false</UserEditedLogLevel>
232+
<MinimumLogLevel>0</MinimumLogLevel>
232233
<EnableExperimentalFeatures />
233234
</GeneralSettings>
234235
</value>

0 commit comments

Comments
 (0)