Files
OwnCord/Client/OwnCord.Client.sln
T
jevb 9707c4d4af feat: scaffold Phase 3 WPF client shell with MVVM and TDD structure
- WPF (.NET 8) project targeting net8.0-windows
- Models: ServerProfile (record), Channel, Message, User, Role
- ViewModels: ViewModelBase (INotifyPropertyChanged), RelayCommand<T>,
  ConnectViewModel (profiles, login/register toggle, connect command),
  MainViewModel (channels, messages, typing indicator, send command),
  SettingsViewModel (dark theme, notifications, PTT key)
- Services: IProfileService + ProfileService (AppData JSON, immutable ops),
  ICredentialService + CredentialService (DPAPI via ProtectedData),
  IWebSocketService + WebSocketService (ClientWebSocket stub)
- Views: ConnectPage (server address, login/register, profile selector),
  MainPage (3-column: channel list, message area, member list),
  App.xaml wires converters and startup
- Converters: BoolToVisibilityConverter, IntToVisibilityConverter
- Tests: ConnectViewModelTests (11 cases), MainViewModelTests (11 cases),
  ProfileServiceTests (6 cases) — ready to run once NuGet accessible
  (run: dotnet restore && dotnet test OwnCord.Client.Tests/)

Build: dotnet build OwnCord.Client/ succeeds with 0 warnings
2026-03-14 21:07:07 +01:00

29 lines
1.5 KiB
Plaintext

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OwnCord.Client", "OwnCord.Client\OwnCord.Client.csproj", "{A25E4856-BF72-4C5C-940C-808B3694F1A1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OwnCord.Client.Tests", "OwnCord.Client.Tests\OwnCord.Client.Tests.csproj", "{14D58A32-A395-4278-AC89-88910F1FE2F8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A25E4856-BF72-4C5C-940C-808B3694F1A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A25E4856-BF72-4C5C-940C-808B3694F1A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A25E4856-BF72-4C5C-940C-808B3694F1A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A25E4856-BF72-4C5C-940C-808B3694F1A1}.Release|Any CPU.Build.0 = Release|Any CPU
{14D58A32-A395-4278-AC89-88910F1FE2F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{14D58A32-A395-4278-AC89-88910F1FE2F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{14D58A32-A395-4278-AC89-88910F1FE2F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{14D58A32-A395-4278-AC89-88910F1FE2F8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal