Skip to content

Commit d74c8ef

Browse files
committed
Method for accessing VS Options found.
1 parent 2e5d76c commit d74c8ef

15 files changed

+193
-30
lines changed

Docs/Docs.projitems

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<MSBuildAllProjects Condition="'$(MSBuildVersion)' == '' Or '$(MSBuildVersion)' &lt; '16.0'">$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
5+
<HasSharedItems>true</HasSharedItems>
6+
<SharedGUID>fd05501b-d283-49cd-9751-88ff06394e99</SharedGUID>
7+
</PropertyGroup>
8+
<PropertyGroup Label="Configuration">
9+
<Import_RootNamespace>Docs</Import_RootNamespace>
10+
</PropertyGroup>
11+
<ItemGroup>
12+
<None Include="$(MSBuildThisFileDirectory)Hacks.md" />
13+
</ItemGroup>
14+
</Project>

Docs/Docs.shproj

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup Label="Globals">
4+
<ProjectGuid>fd05501b-d283-49cd-9751-88ff06394e99</ProjectGuid>
5+
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
6+
</PropertyGroup>
7+
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
8+
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.Default.props" />
9+
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.props" />
10+
<PropertyGroup />
11+
<Import Project="Docs.projitems" Label="Shared" />
12+
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.CSharp.targets" />
13+
</Project>

Docs/Hacks.md

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Hacks/Workarounds
2+
3+
## Integration of MVVM Toolkit and VSIX
4+
5+
The two don't play nicely together, thus had to separate out VMs etc into a separate class. The `[ObservableProperty]` auto-generated Public properties whilst available through code do not compile. Did contact the author, but his solution was to separate out the concerns. Links:
6+
7+
[Github](https://github.com/CommunityToolkit/dotnet/issues/889) |
8+
[StackOverflow](https://stackoverflow.com/questions/78619310/build-errors-when-using-communitytoolkit-mvvm-with-visual-studio-extensions?noredirect=1#comment138656325_78619310)
9+
10+
## VisGit.OptionsPage
11+
12+
Due to above, tried to put the OptionsPage in VisGit.Core. However, no end of compile errors - likely to do with VSIX. Tried to access this in VisGit via interface, but again, got strange errors at compile time. Thus, had to leverage the Settings system.

VisGit.Core/Interfaces/IUserSettings.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
namespace VisGit.Core.Interfaces
88
{
9-
public interface IUserSettings
9+
public class IUserSettings
1010
{
11-
string PersonalAccessToken { get; }
11+
private string PersonalAccessToken { get; set; }
1212
}
1313
}

VisGit.Core/Properties/Settings.Designer.cs

+50
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version='1.0' encoding='utf-8'?>
2+
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="VisGit.Core.Properties" GeneratedClassName="Settings">
3+
<Profiles />
4+
<Settings>
5+
<Setting Name="PersonalAccessTokenEncrypted" Type="System.String" Scope="User">
6+
<Value Profile="(Default)">{Not Set}</Value>
7+
</Setting>
8+
<Setting Name="TestSetting" Type="System.String" Scope="User">
9+
<Value Profile="(Default)">{Not Set}</Value>
10+
</Setting>
11+
</Settings>
12+
</SettingsFile>

VisGit.Core/ViewModels/MainViewModel.cs

+19-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
using Community.VisualStudio.Toolkit;
22
using CommunityToolkit.Mvvm.ComponentModel;
33
using CommunityToolkit.Mvvm.Input;
4+
using Newtonsoft.Json.Linq;
5+
using System.Diagnostics;
46
using System.Threading.Tasks;
57
using VisGit.Core.Controllers;
6-
using VisGit.Core.Services;
7-
using System.Diagnostics;
88
using VisGit.Core.Interfaces;
9+
using VisGit.Core.Services;
910

1011
namespace VisGit.Core.ViewModels
1112
{
@@ -21,9 +22,20 @@ public partial class MainViewModel : ObservableObject
2122

2223
#endregion End: Properties
2324

25+
#region Property Changed Methods =========================================================================================
26+
27+
partial void OnVisualStudioStatusTextChanged(string value)
28+
{
29+
_ = VS.StatusBar.ShowMessageAsync(value);
30+
}
31+
32+
#endregion End: Property Changed Methods
33+
2434
#region Operational Vars =========================================================================================
2535

26-
public IUserSettings UserSettings;
36+
//public IUserSettings UserSettings;
37+
38+
public string personalAccessToken = string.Empty;
2739

2840
private GitService gitClient = new GitService();
2941
private GitController gitController;
@@ -42,7 +54,10 @@ private void InitialiseView()
4254
[RelayCommand]
4355
private async Task AuthenticateUserAsync()
4456
{
45-
UserAuthenicated = await gitController.AuthenticateUserAsync(UserSettings.PersonalAccessToken);
57+
UserAuthenicated = await gitController.AuthenticateUserAsync(
58+
Encryption.DpapiToInsecureString(
59+
Encryption.DpapiDecryptString(Properties.Settings.Default.PersonalAccessTokenEncrypted)));
60+
4661
if (UserAuthenicated) UpdateVsStatusText("Login Successful");
4762
else UpdateVsStatusText("Login error. Check connection and PAT.");
4863
}

VisGit.Core/VisGit.Core.csproj

+12-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
<Compile Include="Data\Constants.cs" />
5252
<Compile Include="Interfaces\IUserSettings.cs" />
5353
<Compile Include="Properties\AssemblyInfo.cs" />
54+
<Compile Include="Properties\Settings.Designer.cs">
55+
<AutoGen>True</AutoGen>
56+
<DesignTimeSharedInput>True</DesignTimeSharedInput>
57+
<DependentUpon>Settings.settings</DependentUpon>
58+
</Compile>
5459
<Compile Include="Services\Encryption.cs" />
5560
<Compile Include="Services\GitService.cs" />
5661
<Compile Include="ViewModels\MainViewModel.cs" />
@@ -67,6 +72,12 @@
6772
<Version>12.0.0</Version>
6873
</PackageReference>
6974
</ItemGroup>
70-
<ItemGroup />
75+
<ItemGroup>
76+
<None Include="app.config" />
77+
<None Include="Properties\Settings.settings">
78+
<Generator>PublicSettingsSingleFileGenerator</Generator>
79+
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
80+
</None>
81+
</ItemGroup>
7182
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
7283
</Project>

VisGit.Core/app.config

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<configSections>
4+
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
5+
<section name="VisGit.Core.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
6+
</sectionGroup>
7+
</configSections>
8+
<userSettings>
9+
<VisGit.Core.Properties.Settings>
10+
<setting name="PersonalAccessTokenEncrypted" serializeAs="String">
11+
<value>{Not Set}</value>
12+
</setting>
13+
<setting name="TestSetting" serializeAs="String">
14+
<value>{Not Set}</value>
15+
</setting>
16+
</VisGit.Core.Properties.Settings>
17+
</userSettings>
18+
</configuration>

VisGit.sln

+5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisGit", "VisGit\VisGit.csp
1010
EndProject
1111
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisGit.Core", "VisGit.Core\VisGit.Core.csproj", "{54FEA1BA-85CF-4ADA-8A10-CA63F6707E1A}"
1212
EndProject
13+
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Docs", "Docs\Docs.shproj", "{FD05501B-D283-49CD-9751-88FF06394E99}"
14+
EndProject
1315
Global
1416
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1517
Debug|Any CPU = Debug|Any CPU
@@ -51,4 +53,7 @@ Global
5153
GlobalSection(ExtensibilityGlobals) = postSolution
5254
SolutionGuid = {84F9F4E9-0F73-4A02-A307-C25F653ED0E3}
5355
EndGlobalSection
56+
GlobalSection(SharedMSBuildProjectFiles) = preSolution
57+
Docs\Docs.projitems*{fd05501b-d283-49cd-9751-88ff06394e99}*SharedItemsImports = 13
58+
EndGlobalSection
5459
EndGlobal

VisGit/Options/OptionsPage.cs

+26-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ public class OptionsPageOptions : BaseOptionPage<OptionsPage>
1313
{ }
1414
}
1515

16+
/// <summary>
17+
/// HACK: Having to leverage Properties.Settings in VisGit.Core due to no end of issues
18+
/// splitting VMs into separate lib (due to mvvm toolkit peculiarities) and also VSIX environ
19+
/// making leveraging Interfaces weird.
20+
/// </summary>
1621
public class OptionsPage : BaseOptionModel<OptionsPage>
1722
{
1823
private string personalAccessToken = "{UNSET}";
@@ -25,7 +30,27 @@ public class OptionsPage : BaseOptionModel<OptionsPage>
2530
public string PersonalAccessToken
2631
{
2732
get => Encryption.DpapiToInsecureString(Encryption.DpapiDecryptString(personalAccessToken));
28-
set => personalAccessToken = Encryption.DpapiEncryptString(Encryption.DpapiToSecureString(value));
33+
set
34+
{
35+
personalAccessToken = Encryption.DpapiEncryptString(Encryption.DpapiToSecureString(value));
36+
Core.Properties.Settings.Default.PersonalAccessTokenEncrypted = personalAccessToken;
37+
Core.Properties.Settings.Default.Save();
38+
}
39+
}
40+
41+
private string _testSetting;
42+
43+
[Category("Github Settings")]
44+
[DisplayName("Test")]
45+
public string TestSetting
46+
{
47+
get { return _testSetting; }
48+
set
49+
{
50+
_testSetting = value;
51+
Core.Properties.Settings.Default.TestSetting = _testSetting;
52+
Core.Properties.Settings.Default.Save();
53+
}
2954
}
3055
}
3156
}

VisGit/Options/UserSettings.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@
33
using System.Linq;
44
using System.Text;
55
using System.Threading.Tasks;
6+
using VisGit.Core.Interfaces;
67

78
namespace VisGit.Core.Data
89
{
9-
internal class UserSettings : VisGit.Core.Interfaces.IUserSettings
10+
internal class UserSettings : IUserSettings
1011
{
11-
private OptionsPage optionsPage;
12+
//private OptionsPage optionsPage;
1213

13-
public string PersonalAccessToken { get => optionsPage.PersonalAccessToken; }
14+
public string PersonalAccessToken { get; set; }
1415

1516
public UserSettings()
1617
{
17-
optionsPage = OptionsPage.Instance;
18+
//optionsPage = OptionsPage.Instance;
1819
}
1920
}
2021
}

VisGit/TestViewModel.cs

-15
This file was deleted.

VisGit/Views/MainView.xaml.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ public MainView()
1616
InitializeComponent();
1717

1818
viewModel = (MainViewModel)this.DataContext;
19-
viewModel.UserSettings = new UserSettings();
19+
20+
//var dave = OptionsPage.Instance;
21+
22+
//viewModel.UserSettings = new UserSettings();
23+
//viewModel.UserSettings.PersonalAccessToken = dave.PersonalAccessToken;
2024
}
2125

2226
private void CouldNotLoadFileOrAssemblyHack()

VisGit/VisGit.csproj

-2
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,8 @@
4747
<ItemGroup>
4848
<Compile Include="Controls\ToolBar.cs" />
4949
<Compile Include="Options\OptionsPage.cs" />
50-
<Compile Include="Options\UserSettings.cs" />
5150
<Compile Include="Properties\AssemblyInfo.cs" />
5251
<Compile Include="Commands\MyToolWindowCommand.cs" />
53-
<Compile Include="TestViewModel.cs" />
5452
<Compile Include="VisGitPackage.cs" />
5553
<Compile Include="source.extension.cs">
5654
<AutoGen>True</AutoGen>

0 commit comments

Comments
 (0)