-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathSettingsViewModel.cs
156 lines (130 loc) · 4.57 KB
/
SettingsViewModel.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using SoftdocMusicPlayer.Core.Helpers;
using SoftdocMusicPlayer.Core.Services;
using SoftdocMusicPlayer.Helpers;
using SoftdocMusicPlayer.Services;
using System;
using System.Threading.Tasks;
using System.Windows.Input;
using Windows.ApplicationModel;
using Windows.UI.Xaml;
namespace SoftdocMusicPlayer.ViewModels
{
// TODO WTS: Add other settings as necessary. For help see https://github.com/Microsoft/WindowsTemplateStudio/blob/master/docs/pages/settings.md
public class SettingsViewModel : Observable
{
private UserDataService UserDataService => Singleton<UserDataService>.Instance;
private IdentityService IdentityService => Singleton<IdentityService>.Instance;
private ElementTheme _elementTheme = ThemeSelectorService.Theme;
private RelayCommand _logInCommand;
private RelayCommand _logOutCommand;
private bool _isLoggedIn;
private bool _isBusy;
private UserViewModel _user;
public ElementTheme ElementTheme
{
get { return _elementTheme; }
set { Set(ref _elementTheme, value); }
}
private string _versionDescription;
public string VersionDescription
{
get { return _versionDescription; }
set { Set(ref _versionDescription, value); }
}
private ICommand _switchThemeCommand;
public ICommand SwitchThemeCommand
{
get
{
if (_switchThemeCommand == null)
{
_switchThemeCommand = new RelayCommand<ElementTheme>(
async (param) =>
{
ElementTheme = param;
await ThemeSelectorService.SetThemeAsync(param);
});
}
return _switchThemeCommand;
}
}
public RelayCommand LogInCommand => _logInCommand ?? (_logInCommand = new RelayCommand(OnLogIn, () => !IsBusy));
public RelayCommand LogOutCommand => _logOutCommand ?? (_logOutCommand = new RelayCommand(OnLogOut, () => !IsBusy));
public bool IsLoggedIn
{
get { return _isLoggedIn; }
set { Set(ref _isLoggedIn, value); }
}
public bool IsBusy
{
get => _isBusy;
set
{
Set(ref _isBusy, value);
LogInCommand.OnCanExecuteChanged();
LogOutCommand.OnCanExecuteChanged();
}
}
public UserViewModel User
{
get { return _user; }
set { Set(ref _user, value); }
}
public SettingsViewModel()
{
}
public async Task InitializeAsync()
{
VersionDescription = GetVersionDescription();
IdentityService.LoggedIn += OnLoggedIn;
IdentityService.LoggedOut += OnLoggedOut;
UserDataService.UserDataUpdated += OnUserDataUpdated;
IsLoggedIn = IdentityService.IsLoggedIn();
User = await UserDataService.GetUserAsync();
}
private string GetVersionDescription()
{
var appName = "AppDisplayName".GetLocalized();
var package = Package.Current;
var packageId = package.Id;
var version = packageId.Version;
return $"{appName} - {version.Major}.{version.Minor}.{version.Build}.{version.Revision}";
}
public void UnregisterEvents()
{
IdentityService.LoggedIn -= OnLoggedIn;
IdentityService.LoggedOut -= OnLoggedOut;
UserDataService.UserDataUpdated -= OnUserDataUpdated;
}
private void OnUserDataUpdated(object sender, UserViewModel userData)
{
User = userData;
}
private async void OnLogIn()
{
IsBusy = true;
var loginResult = await IdentityService.LoginAsync();
if (loginResult != LoginResultType.Success)
{
await AuthenticationHelper.ShowLoginErrorAsync(loginResult);
IsBusy = false;
}
}
private async void OnLogOut()
{
IsBusy = true;
await IdentityService.LogoutAsync();
}
private void OnLoggedIn(object sender, EventArgs e)
{
IsLoggedIn = true;
IsBusy = false;
}
private void OnLoggedOut(object sender, EventArgs e)
{
User = null;
IsLoggedIn = false;
IsBusy = false;
}
}
}