root / trunk / Pithos.Client.WPF / Preferences / PreferencesViewModel.cs @ 2f5fcd2f
History | View | Annotate | Download (29.9 kB)
1 | d31e609c | Panagiotis Kanavos | #region |
---|---|---|---|
2 | d31e609c | Panagiotis Kanavos | /* ----------------------------------------------------------------------- |
3 | d31e609c | Panagiotis Kanavos | * <copyright file="PreferencesViewModel.cs" company="GRNet"> |
4 | d31e609c | Panagiotis Kanavos | * |
5 | d31e609c | Panagiotis Kanavos | * Copyright 2011-2012 GRNET S.A. All rights reserved. |
6 | d31e609c | Panagiotis Kanavos | * |
7 | d31e609c | Panagiotis Kanavos | * Redistribution and use in source and binary forms, with or |
8 | d31e609c | Panagiotis Kanavos | * without modification, are permitted provided that the following |
9 | d31e609c | Panagiotis Kanavos | * conditions are met: |
10 | d31e609c | Panagiotis Kanavos | * |
11 | d31e609c | Panagiotis Kanavos | * 1. Redistributions of source code must retain the above |
12 | d31e609c | Panagiotis Kanavos | * copyright notice, this list of conditions and the following |
13 | d31e609c | Panagiotis Kanavos | * disclaimer. |
14 | d31e609c | Panagiotis Kanavos | * |
15 | d31e609c | Panagiotis Kanavos | * 2. Redistributions in binary form must reproduce the above |
16 | d31e609c | Panagiotis Kanavos | * copyright notice, this list of conditions and the following |
17 | d31e609c | Panagiotis Kanavos | * disclaimer in the documentation and/or other materials |
18 | d31e609c | Panagiotis Kanavos | * provided with the distribution. |
19 | d31e609c | Panagiotis Kanavos | * |
20 | d31e609c | Panagiotis Kanavos | * |
21 | d31e609c | Panagiotis Kanavos | * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
22 | d31e609c | Panagiotis Kanavos | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
23 | d31e609c | Panagiotis Kanavos | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
24 | d31e609c | Panagiotis Kanavos | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
25 | d31e609c | Panagiotis Kanavos | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
26 | d31e609c | Panagiotis Kanavos | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
27 | d31e609c | Panagiotis Kanavos | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
28 | d31e609c | Panagiotis Kanavos | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
29 | d31e609c | Panagiotis Kanavos | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
30 | d31e609c | Panagiotis Kanavos | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
31 | d31e609c | Panagiotis Kanavos | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
32 | d31e609c | Panagiotis Kanavos | * POSSIBILITY OF SUCH DAMAGE. |
33 | d31e609c | Panagiotis Kanavos | * |
34 | d31e609c | Panagiotis Kanavos | * The views and conclusions contained in the software and |
35 | d31e609c | Panagiotis Kanavos | * documentation are those of the authors and should not be |
36 | d31e609c | Panagiotis Kanavos | * interpreted as representing official policies, either expressed |
37 | d31e609c | Panagiotis Kanavos | * or implied, of GRNET S.A. |
38 | d31e609c | Panagiotis Kanavos | * </copyright> |
39 | d31e609c | Panagiotis Kanavos | * ----------------------------------------------------------------------- |
40 | d31e609c | Panagiotis Kanavos | */ |
41 | d31e609c | Panagiotis Kanavos | #endregion |
42 | d31e609c | Panagiotis Kanavos | |
43 | d31e609c | Panagiotis Kanavos | |
44 | d31e609c | Panagiotis Kanavos | using System.Collections.Concurrent; |
45 | d31e609c | Panagiotis Kanavos | using System.Collections.Generic; |
46 | d31e609c | Panagiotis Kanavos | using System.Collections.Specialized; |
47 | d31e609c | Panagiotis Kanavos | using System.ComponentModel.Composition; |
48 | d31e609c | Panagiotis Kanavos | using System.Diagnostics; |
49 | d31e609c | Panagiotis Kanavos | using System.IO; |
50 | d31e609c | Panagiotis Kanavos | using System.Net; |
51 | d31e609c | Panagiotis Kanavos | using System.Reflection; |
52 | d31e609c | Panagiotis Kanavos | using System.Threading.Tasks; |
53 | d31e609c | Panagiotis Kanavos | using System.Windows; |
54 | d31e609c | Panagiotis Kanavos | using System.Windows.Forms; |
55 | d31e609c | Panagiotis Kanavos | using Caliburn.Micro; |
56 | d31e609c | Panagiotis Kanavos | using Pithos.Client.WPF.Configuration; |
57 | d31e609c | Panagiotis Kanavos | using Pithos.Client.WPF.Properties; |
58 | d31e609c | Panagiotis Kanavos | using Pithos.Client.WPF.SelectiveSynch; |
59 | d31e609c | Panagiotis Kanavos | using Pithos.Client.WPF.Utils; |
60 | d31e609c | Panagiotis Kanavos | using Pithos.Core; |
61 | 368e06fd | pkanavos | using Pithos.Core.Agents; |
62 | d31e609c | Panagiotis Kanavos | using Pithos.Interfaces; |
63 | d31e609c | Panagiotis Kanavos | using System; |
64 | d31e609c | Panagiotis Kanavos | using System.Linq; |
65 | d31e609c | Panagiotis Kanavos | using Pithos.Network; |
66 | d31e609c | Panagiotis Kanavos | using MessageBox = System.Windows.MessageBox; |
67 | d31e609c | Panagiotis Kanavos | using Screen = Caliburn.Micro.Screen; |
68 | d31e609c | Panagiotis Kanavos | |
69 | d31e609c | Panagiotis Kanavos | namespace Pithos.Client.WPF.Preferences |
70 | d31e609c | Panagiotis Kanavos | { |
71 | d31e609c | Panagiotis Kanavos | /// <summary> |
72 | d31e609c | Panagiotis Kanavos | /// The preferences screen displays user and account settings and updates the PithosMonitor |
73 | d31e609c | Panagiotis Kanavos | /// classes when account settings change. |
74 | d31e609c | Panagiotis Kanavos | /// </summary> |
75 | d31e609c | Panagiotis Kanavos | /// <remarks> |
76 | d31e609c | Panagiotis Kanavos | /// The class is a single ViewModel for all Preferences tabs. It can be broken in separate |
77 | d31e609c | Panagiotis Kanavos | /// ViewModels, one for each tab. |
78 | d31e609c | Panagiotis Kanavos | /// </remarks> |
79 | d31e609c | Panagiotis Kanavos | [Export, PartCreationPolicy(CreationPolicy.Shared)] |
80 | d31e609c | Panagiotis Kanavos | public class PreferencesViewModel : Screen |
81 | d31e609c | Panagiotis Kanavos | { |
82 | d31e609c | Panagiotis Kanavos | private readonly IEventAggregator _events; |
83 | d31e609c | Panagiotis Kanavos | |
84 | d31e609c | Panagiotis Kanavos | //Logging in the Pithos client is provided by log4net |
85 | 39de8b0f | pkanavos | private static readonly log4net.ILog Log = |
86 | 39de8b0f | pkanavos | log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
87 | d31e609c | Panagiotis Kanavos | |
88 | d31e609c | Panagiotis Kanavos | private PithosSettings _settings; |
89 | 39de8b0f | pkanavos | |
90 | d31e609c | Panagiotis Kanavos | public PithosSettings Settings |
91 | d31e609c | Panagiotis Kanavos | { |
92 | d31e609c | Panagiotis Kanavos | get { return _settings; } |
93 | d31e609c | Panagiotis Kanavos | set |
94 | d31e609c | Panagiotis Kanavos | { |
95 | d31e609c | Panagiotis Kanavos | _settings = value; |
96 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => Settings); |
97 | d31e609c | Panagiotis Kanavos | } |
98 | d31e609c | Panagiotis Kanavos | } |
99 | d31e609c | Panagiotis Kanavos | |
100 | d31e609c | Panagiotis Kanavos | private ObservableConcurrentCollection<AccountViewModel> _accounts; |
101 | 39de8b0f | pkanavos | |
102 | d31e609c | Panagiotis Kanavos | public ObservableConcurrentCollection<AccountViewModel> Accounts |
103 | d31e609c | Panagiotis Kanavos | { |
104 | d31e609c | Panagiotis Kanavos | get { return _accounts; } |
105 | 39de8b0f | pkanavos | set |
106 | 39de8b0f | pkanavos | { |
107 | d31e609c | Panagiotis Kanavos | _accounts = value; |
108 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => Accounts); |
109 | d31e609c | Panagiotis Kanavos | } |
110 | d31e609c | Panagiotis Kanavos | } |
111 | 39de8b0f | pkanavos | |
112 | d31e609c | Panagiotis Kanavos | public bool StartOnSystemStartup { get; set; } |
113 | d31e609c | Panagiotis Kanavos | |
114 | 39de8b0f | pkanavos | public ShellViewModel Shell { get; set; } |
115 | d31e609c | Panagiotis Kanavos | //ShellExtensionController _extensionController=new ShellExtensionController(); |
116 | d31e609c | Panagiotis Kanavos | |
117 | 37ff7dc9 | pkanavos | [ImportingConstructor] |
118 | 39de8b0f | pkanavos | public PreferencesViewModel(IWindowManager windowManager, IEventAggregator events, ShellViewModel shell, |
119 | 39de8b0f | pkanavos | PithosSettings settings) |
120 | 37ff7dc9 | pkanavos | { |
121 | 136e9eff | pkanavos | this.DisplayName = "Pithos+ Preferences"; |
122 | 37ff7dc9 | pkanavos | |
123 | d31e609c | Panagiotis Kanavos | // ReSharper disable DoNotCallOverridableMethodsInConstructor |
124 | d31e609c | Panagiotis Kanavos | //Caliburn.Micro uses DisplayName for the view's title |
125 | d31e609c | Panagiotis Kanavos | DisplayName = "Pithos+ Preferences"; |
126 | d31e609c | Panagiotis Kanavos | // ReSharper restore DoNotCallOverridableMethodsInConstructor |
127 | d31e609c | Panagiotis Kanavos | |
128 | d31e609c | Panagiotis Kanavos | _windowManager = windowManager; |
129 | d31e609c | Panagiotis Kanavos | _events = events; |
130 | d31e609c | Panagiotis Kanavos | |
131 | d31e609c | Panagiotis Kanavos | Shell = shell; |
132 | 39de8b0f | pkanavos | |
133 | 39de8b0f | pkanavos | Settings = settings; |
134 | d31e609c | Panagiotis Kanavos | Accounts = new ObservableConcurrentCollection<AccountViewModel>(); |
135 | 39de8b0f | pkanavos | |
136 | 39de8b0f | pkanavos | |
137 | d31e609c | Panagiotis Kanavos | var startupPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup); |
138 | d31e609c | Panagiotis Kanavos | _shortcutPath = Path.Combine(startupPath, "Pithos.lnk"); |
139 | d31e609c | Panagiotis Kanavos | |
140 | d31e609c | Panagiotis Kanavos | |
141 | d31e609c | Panagiotis Kanavos | StartOnSystemStartup = File.Exists(_shortcutPath); |
142 | d31e609c | Panagiotis Kanavos | |
143 | f4f39ccb | pkanavos | //SelectedTab = currentTab; |
144 | f4f39ccb | pkanavos | } |
145 | f4f39ccb | pkanavos | |
146 | f4f39ccb | pkanavos | protected override void OnViewLoaded(object view) |
147 | f4f39ccb | pkanavos | { |
148 | f4f39ccb | pkanavos | base.OnViewLoaded(view); |
149 | dd5f5163 | pkanavos | |
150 | f4f39ccb | pkanavos | Settings.Reload(); |
151 | dd5f5163 | pkanavos | |
152 | f4f39ccb | pkanavos | Accounts.Clear(); |
153 | f4f39ccb | pkanavos | |
154 | f4f39ccb | pkanavos | if (Settings.Accounts == null) |
155 | f4f39ccb | pkanavos | { |
156 | f4f39ccb | pkanavos | Settings.Accounts = new AccountsCollection(); |
157 | f4f39ccb | pkanavos | Settings.Save(); |
158 | f4f39ccb | pkanavos | } |
159 | f4f39ccb | pkanavos | var accountVMs = from account in Settings.Accounts |
160 | f4f39ccb | pkanavos | select new AccountViewModel(account); |
161 | f4f39ccb | pkanavos | |
162 | f4f39ccb | pkanavos | Accounts.AddFromEnumerable(accountVMs); |
163 | adf0deca | pkanavos | if (Accounts.Count > 0) |
164 | adf0deca | pkanavos | CurrentAccount = Accounts.First(); |
165 | dd5f5163 | pkanavos | |
166 | d31e609c | Panagiotis Kanavos | } |
167 | d31e609c | Panagiotis Kanavos | |
168 | 39de8b0f | pkanavos | private string _selectedTab = "General"; |
169 | 39de8b0f | pkanavos | |
170 | d31e609c | Panagiotis Kanavos | public string SelectedTab |
171 | d31e609c | Panagiotis Kanavos | { |
172 | d31e609c | Panagiotis Kanavos | get { return _selectedTab; } |
173 | d31e609c | Panagiotis Kanavos | set |
174 | d31e609c | Panagiotis Kanavos | { |
175 | 39de8b0f | pkanavos | _selectedTab = value ?? "GeneralTab"; |
176 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => SelectedTab); |
177 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => AccountTabSelected); |
178 | d31e609c | Panagiotis Kanavos | } |
179 | d31e609c | Panagiotis Kanavos | } |
180 | d31e609c | Panagiotis Kanavos | |
181 | d31e609c | Panagiotis Kanavos | |
182 | d31e609c | Panagiotis Kanavos | public bool AccountTabSelected |
183 | d31e609c | Panagiotis Kanavos | { |
184 | d31e609c | Panagiotis Kanavos | get { return _selectedTab == "AccountTab"; } |
185 | d31e609c | Panagiotis Kanavos | } |
186 | 39de8b0f | pkanavos | |
187 | d31e609c | Panagiotis Kanavos | #region Preferences Properties |
188 | d31e609c | Panagiotis Kanavos | |
189 | d31e609c | Panagiotis Kanavos | private bool _noProxy; |
190 | 39de8b0f | pkanavos | |
191 | d31e609c | Panagiotis Kanavos | public bool NoProxy |
192 | d31e609c | Panagiotis Kanavos | { |
193 | d31e609c | Panagiotis Kanavos | get { return _noProxy; } |
194 | d31e609c | Panagiotis Kanavos | set |
195 | d31e609c | Panagiotis Kanavos | { |
196 | d31e609c | Panagiotis Kanavos | _noProxy = value; |
197 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => NoProxy); |
198 | d31e609c | Panagiotis Kanavos | } |
199 | d31e609c | Panagiotis Kanavos | } |
200 | d31e609c | Panagiotis Kanavos | |
201 | d31e609c | Panagiotis Kanavos | |
202 | d31e609c | Panagiotis Kanavos | private bool _defaultProxy; |
203 | d31e609c | Panagiotis Kanavos | |
204 | d31e609c | Panagiotis Kanavos | public bool DefaultProxy |
205 | d31e609c | Panagiotis Kanavos | { |
206 | d31e609c | Panagiotis Kanavos | get { return _defaultProxy; } |
207 | d31e609c | Panagiotis Kanavos | set |
208 | d31e609c | Panagiotis Kanavos | { |
209 | d31e609c | Panagiotis Kanavos | _defaultProxy = value; |
210 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => DefaultProxy); |
211 | d31e609c | Panagiotis Kanavos | } |
212 | d31e609c | Panagiotis Kanavos | } |
213 | d31e609c | Panagiotis Kanavos | |
214 | d31e609c | Panagiotis Kanavos | |
215 | d31e609c | Panagiotis Kanavos | private bool _manualProxy; |
216 | d31e609c | Panagiotis Kanavos | |
217 | d31e609c | Panagiotis Kanavos | public bool ManualProxy |
218 | d31e609c | Panagiotis Kanavos | { |
219 | d31e609c | Panagiotis Kanavos | get { return _manualProxy; } |
220 | d31e609c | Panagiotis Kanavos | set |
221 | d31e609c | Panagiotis Kanavos | { |
222 | d31e609c | Panagiotis Kanavos | _manualProxy = value; |
223 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => ManualProxy); |
224 | d31e609c | Panagiotis Kanavos | } |
225 | d31e609c | Panagiotis Kanavos | } |
226 | 39de8b0f | pkanavos | |
227 | d31e609c | Panagiotis Kanavos | #endregion |
228 | d31e609c | Panagiotis Kanavos | |
229 | d31e609c | Panagiotis Kanavos | |
230 | d31e609c | Panagiotis Kanavos | public int StartupDelay |
231 | d31e609c | Panagiotis Kanavos | { |
232 | d31e609c | Panagiotis Kanavos | get { return (int) Settings.StartupDelay.TotalMinutes; } |
233 | d31e609c | Panagiotis Kanavos | set |
234 | d31e609c | Panagiotis Kanavos | { |
235 | 39de8b0f | pkanavos | if (value < 0) |
236 | 39de8b0f | pkanavos | throw new ArgumentOutOfRangeException("value", |
237 | 39de8b0f | pkanavos | Resources. |
238 | 39de8b0f | pkanavos | PreferencesViewModel_StartupDelay_Greater_or_equal_to_0); |
239 | d31e609c | Panagiotis Kanavos | Settings.StartupDelay = TimeSpan.FromMinutes(value); |
240 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => StartupDelay); |
241 | d31e609c | Panagiotis Kanavos | } |
242 | d31e609c | Panagiotis Kanavos | } |
243 | 39de8b0f | pkanavos | |
244 | d31e609c | Panagiotis Kanavos | #region Commands |
245 | 39de8b0f | pkanavos | |
246 | d31e609c | Panagiotis Kanavos | public bool CanSelectiveSyncFolders |
247 | d31e609c | Panagiotis Kanavos | { |
248 | eb81e47d | pkanavos | get { return CurrentAccount != null && CurrentAccount.SelectiveSyncEnabled; } |
249 | d31e609c | Panagiotis Kanavos | } |
250 | d31e609c | Panagiotis Kanavos | |
251 | d31e609c | Panagiotis Kanavos | public void SelectiveSyncFolders() |
252 | d31e609c | Panagiotis Kanavos | { |
253 | d31e609c | Panagiotis Kanavos | //var monitor = Shell.Monitors[CurrentAccount.AccountKey]; |
254 | 39de8b0f | pkanavos | |
255 | 39de8b0f | pkanavos | |
256 | 39de8b0f | pkanavos | var model = new SelectiveSynchViewModel(_events, CurrentAccount.Account, CurrentAccount.ApiKey, false); |
257 | d31e609c | Panagiotis Kanavos | if (_windowManager.ShowDialog(model) == true) |
258 | d31e609c | Panagiotis Kanavos | { |
259 | 39de8b0f | pkanavos | |
260 | d31e609c | Panagiotis Kanavos | } |
261 | d31e609c | Panagiotis Kanavos | } |
262 | d31e609c | Panagiotis Kanavos | |
263 | 39de8b0f | pkanavos | /* private bool _networkTracing; |
264 | d31e609c | Panagiotis Kanavos | public bool NetworkTracing |
265 | d31e609c | Panagiotis Kanavos | { |
266 | d31e609c | Panagiotis Kanavos | get { return _networkTracing; } |
267 | d31e609c | Panagiotis Kanavos | set |
268 | d31e609c | Panagiotis Kanavos | { |
269 | d31e609c | Panagiotis Kanavos | _networkTracing = value; |
270 | d31e609c | Panagiotis Kanavos | |
271 | d31e609c | Panagiotis Kanavos | } |
272 | d31e609c | Panagiotis Kanavos | }*/ |
273 | d31e609c | Panagiotis Kanavos | |
274 | d31e609c | Panagiotis Kanavos | public void RefreshApiKey() |
275 | d31e609c | Panagiotis Kanavos | { |
276 | d31e609c | Panagiotis Kanavos | //_events.Publish(new Notification { Title = "Authorization failed", Message = "Your API Key has probably expired. You will be directed to a page where you can renew it", Level = TraceLevel.Error }); |
277 | d31e609c | Panagiotis Kanavos | if (CurrentAccount == null) |
278 | d31e609c | Panagiotis Kanavos | return; |
279 | d31e609c | Panagiotis Kanavos | try |
280 | d31e609c | Panagiotis Kanavos | { |
281 | d31e609c | Panagiotis Kanavos | |
282 | d31e609c | Panagiotis Kanavos | var name = CurrentAccount.AccountName; |
283 | d31e609c | Panagiotis Kanavos | |
284 | 2f5fcd2f | pkanavos | var loginUri = PithosAccount.GetLoginUri(CurrentAccount.ServerUrl); |
285 | 39de8b0f | pkanavos | var credentials = PithosAccount.RetrieveCredentials(loginUri.ToString(), name); |
286 | 39de8b0f | pkanavos | if (credentials == null) |
287 | d31e609c | Panagiotis Kanavos | return; |
288 | d31e609c | Panagiotis Kanavos | //The server will return credentials for a different account, not just the current account |
289 | d31e609c | Panagiotis Kanavos | //We need to find the correct account first |
290 | c87a1e4f | pkanavos | AccountViewModel account=null; |
291 | c87a1e4f | pkanavos | Guid token; |
292 | c87a1e4f | pkanavos | if (Guid.TryParse(name, out token)) |
293 | c87a1e4f | pkanavos | { |
294 | c87a1e4f | pkanavos | account = |
295 | c87a1e4f | pkanavos | Accounts.First( |
296 | c87a1e4f | pkanavos | act => act.AccountName == credentials.UserName && act.ServerUrl == CurrentAccount.ServerUrl); |
297 | c87a1e4f | pkanavos | } |
298 | c87a1e4f | pkanavos | else |
299 | c87a1e4f | pkanavos | { |
300 | c87a1e4f | pkanavos | account = |
301 | c87a1e4f | pkanavos | Accounts.First( |
302 | c87a1e4f | pkanavos | act => act.AccountName == name && act.ServerUrl == CurrentAccount.ServerUrl); |
303 | c87a1e4f | pkanavos | account.AccountName = credentials.UserName; |
304 | c3a4add4 | pkanavos | account.DisplayName = name; |
305 | b8946a24 | pkanavos | Shell.RemoveMonitor(account.ServerUrl,name); |
306 | b8946a24 | pkanavos | CurrentAccount.AccountName = credentials.UserName; |
307 | b8946a24 | pkanavos | CurrentAccount.DisplayName = name; |
308 | b8946a24 | pkanavos | Shell.MonitorAccount(account.Account); |
309 | c87a1e4f | pkanavos | } |
310 | 39de8b0f | pkanavos | account.ApiKey = credentials.Password; |
311 | d31e609c | Panagiotis Kanavos | account.IsExpired = false; |
312 | d31e609c | Panagiotis Kanavos | Settings.Save(); |
313 | 39de8b0f | pkanavos | TaskEx.Delay(10000).ContinueWith(_ => Shell.MonitorAccount(account.Account)); |
314 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => Accounts); |
315 | d31e609c | Panagiotis Kanavos | } |
316 | d31e609c | Panagiotis Kanavos | catch (AggregateException exc) |
317 | d31e609c | Panagiotis Kanavos | { |
318 | d31e609c | Panagiotis Kanavos | string message = String.Format("API Key retrieval failed"); |
319 | d31e609c | Panagiotis Kanavos | Log.Error(message, exc.InnerException); |
320 | 39de8b0f | pkanavos | _events.Publish(new Notification |
321 | 39de8b0f | pkanavos | {Title = "Authorization failed", Message = message, Level = TraceLevel.Error}); |
322 | d31e609c | Panagiotis Kanavos | } |
323 | d31e609c | Panagiotis Kanavos | catch (Exception exc) |
324 | d31e609c | Panagiotis Kanavos | { |
325 | d31e609c | Panagiotis Kanavos | string message = String.Format("API Key retrieval failed"); |
326 | d31e609c | Panagiotis Kanavos | Log.Error(message, exc); |
327 | 39de8b0f | pkanavos | _events.Publish(new Notification |
328 | 39de8b0f | pkanavos | {Title = "Authorization failed", Message = message, Level = TraceLevel.Error}); |
329 | d31e609c | Panagiotis Kanavos | } |
330 | d31e609c | Panagiotis Kanavos | |
331 | d31e609c | Panagiotis Kanavos | } |
332 | d31e609c | Panagiotis Kanavos | |
333 | dc18b138 | pkanavos | public bool CanWipeAccount |
334 | 0e2b2c19 | George Pantazis | { |
335 | 9ad59de3 | pkanavos | get { return CurrentAccount != null |
336 | 9ad59de3 | pkanavos | && Shell.Monitors.ContainsKey(CurrentAccount.AccountKey) |
337 | 9ad59de3 | pkanavos | && Shell.Monitors[CurrentAccount.AccountKey].CloudClient!=null; |
338 | 9ad59de3 | pkanavos | } |
339 | dc18b138 | pkanavos | } |
340 | 39de8b0f | pkanavos | |
341 | dc18b138 | pkanavos | public async void WipeAccount() |
342 | dc18b138 | pkanavos | { |
343 | 9ad59de3 | pkanavos | PithosMonitor aMonitor; |
344 | 9ad59de3 | pkanavos | if (Shell.Monitors.TryGetValue(CurrentAccount.AccountKey, out aMonitor)) |
345 | dc18b138 | pkanavos | { |
346 | 9ad59de3 | pkanavos | if (aMonitor.CloudClient == null) |
347 | 9ad59de3 | pkanavos | { |
348 | 9ad59de3 | pkanavos | Log.ErrorFormat("Tried to wipe account [{0}] before authenticating",CurrentAccount.AccountKey); |
349 | 9ad59de3 | pkanavos | return; |
350 | 9ad59de3 | pkanavos | } |
351 | dc18b138 | pkanavos | var message = String.Format("You are about to wipe all data in the {0} account at {1}. Are you sure?", |
352 | 9ad59de3 | pkanavos | CurrentAccount.AccountName, CurrentAccount.ServerUrl); |
353 | 39de8b0f | pkanavos | if (MessageBoxResult.Yes != |
354 | 39de8b0f | pkanavos | MessageBox.Show(message, "Warning! Account data will be wiped", MessageBoxButton.YesNo, |
355 | 39de8b0f | pkanavos | MessageBoxImage.Hand, MessageBoxResult.No)) |
356 | 9ad59de3 | pkanavos | return; |
357 | 9ad59de3 | pkanavos | |
358 | 9ad59de3 | pkanavos | await aMonitor.CloudClient.WipeContainer("", new Uri("pithos", UriKind.Relative)); |
359 | 9ad59de3 | pkanavos | aMonitor.Stop(); |
360 | adf0deca | pkanavos | await aMonitor.Start(); |
361 | dc18b138 | pkanavos | MessageBox.Show("Account wiped"); |
362 | dc18b138 | pkanavos | } |
363 | 0e2b2c19 | George Pantazis | } |
364 | 0e2b2c19 | George Pantazis | |
365 | 39de8b0f | pkanavos | |
366 | d31e609c | Panagiotis Kanavos | public void OpenLogPath() |
367 | d31e609c | Panagiotis Kanavos | { |
368 | d31e609c | Panagiotis Kanavos | Shell.OpenLogPath(); |
369 | d31e609c | Panagiotis Kanavos | } |
370 | d31e609c | Panagiotis Kanavos | |
371 | d31e609c | Panagiotis Kanavos | public void OpenLogConsole() |
372 | d31e609c | Panagiotis Kanavos | { |
373 | 39de8b0f | pkanavos | var logView = IoC.Get<LogConsole.LogConsoleViewModel>(); |
374 | d31e609c | Panagiotis Kanavos | _windowManager.ShowWindow(logView); |
375 | d31e609c | Panagiotis Kanavos | } |
376 | d31e609c | Panagiotis Kanavos | |
377 | d31e609c | Panagiotis Kanavos | public void SaveChanges() |
378 | d31e609c | Panagiotis Kanavos | { |
379 | d31e609c | Panagiotis Kanavos | DoSave(); |
380 | 39de8b0f | pkanavos | TryClose( /*true*/); |
381 | d31e609c | Panagiotis Kanavos | } |
382 | d31e609c | Panagiotis Kanavos | |
383 | d31e609c | Panagiotis Kanavos | public void RejectChanges() |
384 | d31e609c | Panagiotis Kanavos | { |
385 | d31e609c | Panagiotis Kanavos | Settings.Reload(); |
386 | 39de8b0f | pkanavos | TryClose( /*false*/); |
387 | d31e609c | Panagiotis Kanavos | } |
388 | d31e609c | Panagiotis Kanavos | |
389 | d31e609c | Panagiotis Kanavos | public void ApplyChanges() |
390 | d31e609c | Panagiotis Kanavos | { |
391 | d31e609c | Panagiotis Kanavos | DoSave(); |
392 | d31e609c | Panagiotis Kanavos | } |
393 | d31e609c | Panagiotis Kanavos | |
394 | d31e609c | Panagiotis Kanavos | private void DoSave() |
395 | d31e609c | Panagiotis Kanavos | { |
396 | d31e609c | Panagiotis Kanavos | //SetStartupMode(); |
397 | d31e609c | Panagiotis Kanavos | |
398 | d31e609c | Panagiotis Kanavos | //Ensure we save the settings changes first |
399 | d31e609c | Panagiotis Kanavos | foreach (var account in _accountsToRemove) |
400 | d31e609c | Panagiotis Kanavos | { |
401 | d31e609c | Panagiotis Kanavos | Settings.Accounts.Remove(account); |
402 | d31e609c | Panagiotis Kanavos | } |
403 | d31e609c | Panagiotis Kanavos | |
404 | d31e609c | Panagiotis Kanavos | foreach (var account in _accountsToAdd) |
405 | d31e609c | Panagiotis Kanavos | { |
406 | 39de8b0f | pkanavos | Settings.Accounts.Add(account); |
407 | d31e609c | Panagiotis Kanavos | } |
408 | d31e609c | Panagiotis Kanavos | |
409 | d31e609c | Panagiotis Kanavos | Settings.Save(); |
410 | d31e609c | Panagiotis Kanavos | |
411 | d31e609c | Panagiotis Kanavos | |
412 | d31e609c | Panagiotis Kanavos | try |
413 | d31e609c | Panagiotis Kanavos | { |
414 | d31e609c | Panagiotis Kanavos | foreach (var account in _accountsToRemove) |
415 | d31e609c | Panagiotis Kanavos | { |
416 | d31e609c | Panagiotis Kanavos | Shell.RemoveMonitor(account.ServerUrl, account.AccountName); |
417 | d31e609c | Panagiotis Kanavos | Shell.RemoveAccountFromDatabase(account); |
418 | d31e609c | Panagiotis Kanavos | } |
419 | d31e609c | Panagiotis Kanavos | |
420 | d31e609c | Panagiotis Kanavos | foreach (var account in Settings.Accounts) |
421 | d31e609c | Panagiotis Kanavos | { |
422 | d31e609c | Panagiotis Kanavos | Shell.MonitorAccount(account); |
423 | d31e609c | Panagiotis Kanavos | } |
424 | 368e06fd | pkanavos | |
425 | 39de8b0f | pkanavos | var poller = IoC.Get<PollAgent>(); |
426 | 368e06fd | pkanavos | poller.SynchNow(); |
427 | 39de8b0f | pkanavos | } |
428 | d31e609c | Panagiotis Kanavos | finally |
429 | d31e609c | Panagiotis Kanavos | { |
430 | d31e609c | Panagiotis Kanavos | _accountsToRemove.Clear(); |
431 | d31e609c | Panagiotis Kanavos | _accountsToAdd.Clear(); |
432 | d31e609c | Panagiotis Kanavos | } |
433 | d31e609c | Panagiotis Kanavos | |
434 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => Settings); |
435 | d31e609c | Panagiotis Kanavos | |
436 | d31e609c | Panagiotis Kanavos | if (IgnoreCertificateErrors) |
437 | 39de8b0f | pkanavos | ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; |
438 | d31e609c | Panagiotis Kanavos | else |
439 | d31e609c | Panagiotis Kanavos | { |
440 | d31e609c | Panagiotis Kanavos | ServicePointManager.ServerCertificateValidationCallback = null; |
441 | d31e609c | Panagiotis Kanavos | } |
442 | d31e609c | Panagiotis Kanavos | } |
443 | d31e609c | Panagiotis Kanavos | |
444 | 39de8b0f | pkanavos | /* public void ChangePithosFolder() |
445 | d31e609c | Panagiotis Kanavos | { |
446 | d31e609c | Panagiotis Kanavos | var browser = new FolderBrowserDialog(); |
447 | d31e609c | Panagiotis Kanavos | browser.SelectedPath = Settings.PithosPath; |
448 | d31e609c | Panagiotis Kanavos | var result = browser.ShowDialog((IWin32Window)GetView()); |
449 | d31e609c | Panagiotis Kanavos | if (result == DialogResult.OK) |
450 | d31e609c | Panagiotis Kanavos | { |
451 | d31e609c | Panagiotis Kanavos | var newPath = browser.SelectedPath; |
452 | d31e609c | Panagiotis Kanavos | var accountName = CurrentAccount.AccountName; |
453 | d31e609c | Panagiotis Kanavos | var monitor = Shell.Monitors[accountName]; |
454 | d31e609c | Panagiotis Kanavos | monitor.Stop(); |
455 | d31e609c | Panagiotis Kanavos | |
456 | d31e609c | Panagiotis Kanavos | Shell.Monitors.Remove(accountName); |
457 | d31e609c | Panagiotis Kanavos | |
458 | d31e609c | Panagiotis Kanavos | Directory.Move(Settings.PithosPath, newPath); |
459 | d31e609c | Panagiotis Kanavos | Settings.PithosPath = newPath; |
460 | d31e609c | Panagiotis Kanavos | Settings.Save(); |
461 | d31e609c | Panagiotis Kanavos | |
462 | d31e609c | Panagiotis Kanavos | Shell.MonitorAccount(CurrentAccount); |
463 | d31e609c | Panagiotis Kanavos | |
464 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => Settings); |
465 | d31e609c | Panagiotis Kanavos | } |
466 | d31e609c | Panagiotis Kanavos | } |
467 | d31e609c | Panagiotis Kanavos | */ |
468 | d31e609c | Panagiotis Kanavos | |
469 | d31e609c | Panagiotis Kanavos | |
470 | 39de8b0f | pkanavos | private readonly List<AccountSettings> _accountsToAdd = new List<AccountSettings>(); |
471 | d31e609c | Panagiotis Kanavos | |
472 | 39de8b0f | pkanavos | public async void AddAccount() |
473 | 39de8b0f | pkanavos | { |
474 | 39de8b0f | pkanavos | var wizard = new AddAccountViewModel(); |
475 | 39de8b0f | pkanavos | if (_windowManager.ShowDialog(wizard) == true) |
476 | 39de8b0f | pkanavos | { |
477 | 39de8b0f | pkanavos | try |
478 | 39de8b0f | pkanavos | { |
479 | 39de8b0f | pkanavos | string selectedPath = wizard.AccountPath; |
480 | 39de8b0f | pkanavos | var initialRootPath = wizard.ShouldCreateOkeanosFolder |
481 | ca94f0ec | pkanavos | ? Path.Combine(selectedPath, "okeanos") |
482 | 39de8b0f | pkanavos | : selectedPath; |
483 | 39de8b0f | pkanavos | var actualRootPath = initialRootPath; |
484 | 39de8b0f | pkanavos | if (wizard.ShouldCreateOkeanosFolder) |
485 | 39de8b0f | pkanavos | { |
486 | 39de8b0f | pkanavos | int attempt = 1; |
487 | 39de8b0f | pkanavos | while (Directory.Exists(actualRootPath) || File.Exists(actualRootPath)) |
488 | 39de8b0f | pkanavos | { |
489 | 39de8b0f | pkanavos | actualRootPath = String.Format("{0} {1}", initialRootPath, attempt++); |
490 | 39de8b0f | pkanavos | } |
491 | 2475642e | pkanavos | Directory.CreateDirectory(actualRootPath); |
492 | 39de8b0f | pkanavos | } |
493 | 39de8b0f | pkanavos | |
494 | 39de8b0f | pkanavos | |
495 | 39de8b0f | pkanavos | |
496 | 39de8b0f | pkanavos | var account = |
497 | 39de8b0f | pkanavos | Accounts.FirstOrDefault( |
498 | 39de8b0f | pkanavos | act => act.AccountName == wizard.AccountName && act.ServerUrl == wizard.CurrentServer); |
499 | 39de8b0f | pkanavos | if (account != null) |
500 | 39de8b0f | pkanavos | { |
501 | 39de8b0f | pkanavos | if ( |
502 | 39de8b0f | pkanavos | MessageBox.Show("The account you specified already exists. Do you want to update it?", |
503 | 39de8b0f | pkanavos | "The account exists") == MessageBoxResult.Yes) |
504 | 39de8b0f | pkanavos | { |
505 | 39de8b0f | pkanavos | account.ApiKey = wizard.Token; |
506 | 39de8b0f | pkanavos | account.IsExpired = false; |
507 | 39de8b0f | pkanavos | CurrentAccount = account; |
508 | 39de8b0f | pkanavos | } |
509 | 39de8b0f | pkanavos | } |
510 | 39de8b0f | pkanavos | else |
511 | 39de8b0f | pkanavos | { |
512 | 39de8b0f | pkanavos | var newAccount = new AccountSettings |
513 | 39de8b0f | pkanavos | { |
514 | 39de8b0f | pkanavos | AccountName = wizard.AccountName, |
515 | 39de8b0f | pkanavos | ServerUrl = wizard.CurrentServer, |
516 | 39de8b0f | pkanavos | ApiKey = wizard.Token, |
517 | 39de8b0f | pkanavos | RootPath = actualRootPath, |
518 | 39de8b0f | pkanavos | IsActive = wizard.IsAccountActive, |
519 | 39de8b0f | pkanavos | }; |
520 | 39de8b0f | pkanavos | |
521 | 854c715a | pkanavos | |
522 | 39de8b0f | pkanavos | var client = new CloudFilesClient(newAccount.AccountName, newAccount.ApiKey) |
523 | 39de8b0f | pkanavos | { |
524 | 39de8b0f | pkanavos | AuthenticationUrl = newAccount.ServerUrl, |
525 | 39de8b0f | pkanavos | UsePithos = true |
526 | 39de8b0f | pkanavos | }; |
527 | 854c715a | pkanavos | await client.Authenticate().ConfigureAwait(false); |
528 | 39de8b0f | pkanavos | |
529 | 854c715a | pkanavos | Guid token; |
530 | 854c715a | pkanavos | if (Guid.TryParse(wizard.AccountName, out token)) |
531 | 854c715a | pkanavos | { |
532 | 854c715a | pkanavos | newAccount.AccountToken = token; |
533 | c87a1e4f | pkanavos | newAccount.DisplayName = await client.ResolveName(token).ConfigureAwait(false); |
534 | 854c715a | pkanavos | } |
535 | 854c715a | pkanavos | |
536 | 854c715a | pkanavos | |
537 | 39de8b0f | pkanavos | await InitializeSelectiveFolders(newAccount, client); |
538 | 39de8b0f | pkanavos | |
539 | 39de8b0f | pkanavos | |
540 | 39de8b0f | pkanavos | //TODO:Add the "pithos" container as a default selection |
541 | 39de8b0f | pkanavos | |
542 | 39de8b0f | pkanavos | _accountsToAdd.Add(newAccount); |
543 | 39de8b0f | pkanavos | var accountVm = new AccountViewModel(newAccount); |
544 | 39de8b0f | pkanavos | (Accounts as IProducerConsumerCollection<AccountViewModel>).TryAdd(accountVm); |
545 | 39de8b0f | pkanavos | CurrentAccount = accountVm; |
546 | 39de8b0f | pkanavos | } |
547 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => Accounts); |
548 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => Settings); |
549 | 39de8b0f | pkanavos | } |
550 | 39de8b0f | pkanavos | catch (WebException exc) |
551 | 39de8b0f | pkanavos | { |
552 | 39de8b0f | pkanavos | Log.ErrorFormat("[Add Account] Connectivity Error: {0}", exc); |
553 | 39de8b0f | pkanavos | MessageBox.Show("Unable to connect to Pithos. Please try again later", "Connectivity Error", |
554 | 39de8b0f | pkanavos | MessageBoxButton.OK, MessageBoxImage.Exclamation); |
555 | 39de8b0f | pkanavos | } |
556 | 39de8b0f | pkanavos | } |
557 | 39de8b0f | pkanavos | |
558 | 39de8b0f | pkanavos | |
559 | 39de8b0f | pkanavos | |
560 | 39de8b0f | pkanavos | } |
561 | d31e609c | Panagiotis Kanavos | |
562 | 39de8b0f | pkanavos | private async Task InitializeSelectiveFolders(AccountSettings newAccount, CloudFilesClient client, |
563 | 39de8b0f | pkanavos | int retries = 3) |
564 | 8bbc337e | pkanavos | { |
565 | 39de8b0f | pkanavos | while (true) |
566 | 8bbc337e | pkanavos | { |
567 | 5b2e4db4 | pkanavos | try |
568 | 5b2e4db4 | pkanavos | { |
569 | 854c715a | pkanavos | |
570 | 5b2e4db4 | pkanavos | |
571 | 5b2e4db4 | pkanavos | var containers = await client.ListContainers(newAccount.AccountName).ConfigureAwait(false); |
572 | 5b2e4db4 | pkanavos | var containerUris = from container in containers |
573 | 5b2e4db4 | pkanavos | select String.Format(@"{0}/v1/{1}/{2}", |
574 | 5b2e4db4 | pkanavos | newAccount.ServerUrl, newAccount.AccountName, |
575 | 5b2e4db4 | pkanavos | container.Name); |
576 | 854c715a | pkanavos | lock (newAccount.SelectiveFolders) |
577 | 854c715a | pkanavos | { |
578 | 854c715a | pkanavos | newAccount.SelectiveFolders.AddRange(containerUris.ToArray()); |
579 | 854c715a | pkanavos | } |
580 | 5b2e4db4 | pkanavos | |
581 | 5b2e4db4 | pkanavos | var objectInfos = (from container in containers |
582 | 5b2e4db4 | pkanavos | from dir in client.ListObjects(newAccount.AccountName, container.Name) |
583 | 5b2e4db4 | pkanavos | where container.Name.ToString() != "trash" |
584 | 5b2e4db4 | pkanavos | select dir).ToList(); |
585 | 5b2e4db4 | pkanavos | var tree = objectInfos.ToTree(); |
586 | 5b2e4db4 | pkanavos | |
587 | 5b2e4db4 | pkanavos | var selected = (from root in tree |
588 | 5b2e4db4 | pkanavos | from child in root |
589 | 5b2e4db4 | pkanavos | select child.Uri.ToString()).ToArray(); |
590 | 854c715a | pkanavos | lock (newAccount.SelectiveFolders) |
591 | 854c715a | pkanavos | { |
592 | 854c715a | pkanavos | newAccount.SelectiveFolders.AddRange(selected); |
593 | 854c715a | pkanavos | } |
594 | 5b2e4db4 | pkanavos | return; |
595 | 5b2e4db4 | pkanavos | } |
596 | 5b2e4db4 | pkanavos | catch (WebException) |
597 | 5b2e4db4 | pkanavos | { |
598 | 5b2e4db4 | pkanavos | if (retries > 0) |
599 | 5b2e4db4 | pkanavos | retries--; |
600 | 5b2e4db4 | pkanavos | else |
601 | 5b2e4db4 | pkanavos | throw; |
602 | 5b2e4db4 | pkanavos | } |
603 | 8bbc337e | pkanavos | } |
604 | 8bbc337e | pkanavos | } |
605 | 8bbc337e | pkanavos | |
606 | d31e609c | Panagiotis Kanavos | /* |
607 | d31e609c | Panagiotis Kanavos | public void AddPithosAccount() |
608 | d31e609c | Panagiotis Kanavos | { |
609 | d31e609c | Panagiotis Kanavos | var credentials=PithosAccount.RetrieveCredentials(null); |
610 | d31e609c | Panagiotis Kanavos | if (credentials == null) |
611 | d31e609c | Panagiotis Kanavos | return; |
612 | d31e609c | Panagiotis Kanavos | var account = Settings.Accounts.FirstOrDefault(act => act.AccountName == credentials.UserName); |
613 | d31e609c | Panagiotis Kanavos | var accountVM = new AccountViewModel(account); |
614 | d31e609c | Panagiotis Kanavos | if (account == null) |
615 | d31e609c | Panagiotis Kanavos | { |
616 | d31e609c | Panagiotis Kanavos | account=new AccountSettings{ |
617 | d31e609c | Panagiotis Kanavos | AccountName=credentials.UserName, |
618 | d31e609c | Panagiotis Kanavos | ApiKey=credentials.Password |
619 | d31e609c | Panagiotis Kanavos | }; |
620 | d31e609c | Panagiotis Kanavos | Settings.Accounts.Add(account); |
621 | d31e609c | Panagiotis Kanavos | accountVM = new AccountViewModel(account); |
622 | d31e609c | Panagiotis Kanavos | (Accounts as IProducerConsumerCollection<AccountViewModel>).TryAdd(accountVM); |
623 | d31e609c | Panagiotis Kanavos | } |
624 | d31e609c | Panagiotis Kanavos | else |
625 | d31e609c | Panagiotis Kanavos | { |
626 | d31e609c | Panagiotis Kanavos | account.ApiKey=credentials.Password; |
627 | d31e609c | Panagiotis Kanavos | } |
628 | d31e609c | Panagiotis Kanavos | //SelectedAccountIndex= Settings.Accounts.IndexOf(account); |
629 | d31e609c | Panagiotis Kanavos | CurrentAccount = accountVM; |
630 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => Accounts); |
631 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(()=>Settings); |
632 | d31e609c | Panagiotis Kanavos | } |
633 | d31e609c | Panagiotis Kanavos | */ |
634 | d31e609c | Panagiotis Kanavos | |
635 | d31e609c | Panagiotis Kanavos | |
636 | 39de8b0f | pkanavos | private readonly List<AccountSettings> _accountsToRemove = new List<AccountSettings>(); |
637 | 39de8b0f | pkanavos | |
638 | d31e609c | Panagiotis Kanavos | public void RemoveAccount() |
639 | d31e609c | Panagiotis Kanavos | { |
640 | d31e609c | Panagiotis Kanavos | Accounts.TryRemove(CurrentAccount); |
641 | d31e609c | Panagiotis Kanavos | _accountsToRemove.Add(CurrentAccount.Account); |
642 | d31e609c | Panagiotis Kanavos | |
643 | d31e609c | Panagiotis Kanavos | CurrentAccount = null; |
644 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => Accounts); |
645 | d31e609c | Panagiotis Kanavos | |
646 | 39de8b0f | pkanavos | |
647 | d31e609c | Panagiotis Kanavos | //NotifyOfPropertyChange("Settings.Accounts"); |
648 | d31e609c | Panagiotis Kanavos | } |
649 | d31e609c | Panagiotis Kanavos | |
650 | d31e609c | Panagiotis Kanavos | public bool CanRemoveAccount |
651 | d31e609c | Panagiotis Kanavos | { |
652 | d31e609c | Panagiotis Kanavos | get { return (CurrentAccount != null); } |
653 | d31e609c | Panagiotis Kanavos | } |
654 | d31e609c | Panagiotis Kanavos | |
655 | d31e609c | Panagiotis Kanavos | public bool CanClearAccountCache |
656 | d31e609c | Panagiotis Kanavos | { |
657 | d31e609c | Panagiotis Kanavos | get { return (CurrentAccount != null); } |
658 | d31e609c | Panagiotis Kanavos | } |
659 | d31e609c | Panagiotis Kanavos | |
660 | d31e609c | Panagiotis Kanavos | public void ClearAccountCache() |
661 | d31e609c | Panagiotis Kanavos | { |
662 | 39de8b0f | pkanavos | if (MessageBoxResult.Yes == |
663 | 39de8b0f | pkanavos | MessageBox.Show("You are about to delete all partially downloaded files from the account's cache.\n" + |
664 | 39de8b0f | pkanavos | " You will have to download all partially downloaded data again\n" + |
665 | 39de8b0f | pkanavos | "This change can not be undone\n\n" + |
666 | 39de8b0f | pkanavos | "Do you wish to delete all partially downloaded data?", |
667 | 39de8b0f | pkanavos | "Warning! Clearing account cache", |
668 | 39de8b0f | pkanavos | MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No)) |
669 | d31e609c | Panagiotis Kanavos | { |
670 | d31e609c | Panagiotis Kanavos | |
671 | d31e609c | Panagiotis Kanavos | var cachePath = Path.Combine(CurrentAccount.RootPath, FolderConstants.CacheFolder); |
672 | d31e609c | Panagiotis Kanavos | var dir = new DirectoryInfo(cachePath); |
673 | d31e609c | Panagiotis Kanavos | //The file may not exist if we just created the account |
674 | d31e609c | Panagiotis Kanavos | if (!dir.Exists) |
675 | d31e609c | Panagiotis Kanavos | return; |
676 | 39de8b0f | pkanavos | dir.EnumerateFiles().Apply(file => file.Delete()); |
677 | d31e609c | Panagiotis Kanavos | dir.EnumerateDirectories().Apply(folder => folder.Delete(true)); |
678 | d31e609c | Panagiotis Kanavos | } |
679 | d31e609c | Panagiotis Kanavos | } |
680 | d31e609c | Panagiotis Kanavos | |
681 | d31e609c | Panagiotis Kanavos | |
682 | d31e609c | Panagiotis Kanavos | public bool ExtensionsActivated |
683 | d31e609c | Panagiotis Kanavos | { |
684 | d31e609c | Panagiotis Kanavos | get { return Settings.ExtensionsActivated; } |
685 | d31e609c | Panagiotis Kanavos | set |
686 | d31e609c | Panagiotis Kanavos | { |
687 | d31e609c | Panagiotis Kanavos | if (Settings.ExtensionsActivated == value) |
688 | d31e609c | Panagiotis Kanavos | return; |
689 | d31e609c | Panagiotis Kanavos | |
690 | d31e609c | Panagiotis Kanavos | Settings.ExtensionsActivated = value; |
691 | d31e609c | Panagiotis Kanavos | |
692 | d31e609c | Panagiotis Kanavos | /* |
693 | d31e609c | Panagiotis Kanavos | if (value) |
694 | d31e609c | Panagiotis Kanavos | _extensionController.RegisterExtensions(); |
695 | d31e609c | Panagiotis Kanavos | else |
696 | d31e609c | Panagiotis Kanavos | { |
697 | d31e609c | Panagiotis Kanavos | _extensionController.UnregisterExtensions(); |
698 | d31e609c | Panagiotis Kanavos | } |
699 | d31e609c | Panagiotis Kanavos | */ |
700 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => ExtensionsActivated); |
701 | d31e609c | Panagiotis Kanavos | } |
702 | d31e609c | Panagiotis Kanavos | } |
703 | d31e609c | Panagiotis Kanavos | |
704 | d31e609c | Panagiotis Kanavos | public bool DebugLoggingEnabled |
705 | d31e609c | Panagiotis Kanavos | { |
706 | d31e609c | Panagiotis Kanavos | get { return Settings.DebugLoggingEnabled; } |
707 | 39de8b0f | pkanavos | set |
708 | 39de8b0f | pkanavos | { |
709 | d31e609c | Panagiotis Kanavos | Settings.DebugLoggingEnabled = value; |
710 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => DebugLoggingEnabled); |
711 | d31e609c | Panagiotis Kanavos | } |
712 | d31e609c | Panagiotis Kanavos | } |
713 | d31e609c | Panagiotis Kanavos | |
714 | d31e609c | Panagiotis Kanavos | public bool IgnoreCertificateErrors |
715 | d31e609c | Panagiotis Kanavos | { |
716 | d31e609c | Panagiotis Kanavos | get { return Settings.IgnoreCertificateErrors; } |
717 | 39de8b0f | pkanavos | set |
718 | 39de8b0f | pkanavos | { |
719 | d31e609c | Panagiotis Kanavos | Settings.IgnoreCertificateErrors = value; |
720 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => IgnoreCertificateErrors); |
721 | d31e609c | Panagiotis Kanavos | } |
722 | d31e609c | Panagiotis Kanavos | } |
723 | 39de8b0f | pkanavos | |
724 | d31e609c | Panagiotis Kanavos | #endregion |
725 | d31e609c | Panagiotis Kanavos | |
726 | 39de8b0f | pkanavos | /* private int _selectedAccountIndex; |
727 | d31e609c | Panagiotis Kanavos | public int SelectedAccountIndex |
728 | d31e609c | Panagiotis Kanavos | { |
729 | d31e609c | Panagiotis Kanavos | get { return _selectedAccountIndex; } |
730 | d31e609c | Panagiotis Kanavos | set |
731 | d31e609c | Panagiotis Kanavos | { |
732 | d31e609c | Panagiotis Kanavos | //var accountCount=Settings.Accounts.Count; |
733 | d31e609c | Panagiotis Kanavos | //if (accountCount == 0) |
734 | d31e609c | Panagiotis Kanavos | // return; |
735 | d31e609c | Panagiotis Kanavos | //if (0 <= value && value < accountCount) |
736 | d31e609c | Panagiotis Kanavos | // _selectedAccountIndex = value; |
737 | d31e609c | Panagiotis Kanavos | //else |
738 | d31e609c | Panagiotis Kanavos | // _selectedAccountIndex = 0; |
739 | d31e609c | Panagiotis Kanavos | _selectedAccountIndex = value; |
740 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => CurrentAccount); |
741 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => CanRemoveAccount); |
742 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(()=>SelectedAccountIndex); |
743 | d31e609c | Panagiotis Kanavos | } |
744 | d31e609c | Panagiotis Kanavos | }*/ |
745 | d31e609c | Panagiotis Kanavos | |
746 | d31e609c | Panagiotis Kanavos | private AccountViewModel _currentAccount; |
747 | d31e609c | Panagiotis Kanavos | private readonly IWindowManager _windowManager; |
748 | d31e609c | Panagiotis Kanavos | private readonly string _shortcutPath; |
749 | d31e609c | Panagiotis Kanavos | |
750 | d31e609c | Panagiotis Kanavos | |
751 | 39de8b0f | pkanavos | |
752 | d31e609c | Panagiotis Kanavos | public AccountViewModel CurrentAccount |
753 | d31e609c | Panagiotis Kanavos | { |
754 | d31e609c | Panagiotis Kanavos | get { return _currentAccount; } |
755 | d31e609c | Panagiotis Kanavos | set |
756 | d31e609c | Panagiotis Kanavos | { |
757 | d31e609c | Panagiotis Kanavos | _currentAccount = value; |
758 | eb81e47d | pkanavos | |
759 | 39de8b0f | pkanavos | if (_currentAccount != null) |
760 | c945b450 | pkanavos | _currentAccount.PropertyChanged += (o, e) => NotifyOfPropertyChange(() => CanSelectiveSyncFolders); |
761 | eb81e47d | pkanavos | |
762 | eb81e47d | pkanavos | NotifyOfPropertyChange(() => CurrentAccount); |
763 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => CanRemoveAccount); |
764 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => CanSelectiveSyncFolders); |
765 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => CanMoveAccountFolder); |
766 | d31e609c | Panagiotis Kanavos | NotifyOfPropertyChange(() => CanClearAccountCache); |
767 | dc18b138 | pkanavos | NotifyOfPropertyChange(() => CanWipeAccount); |
768 | d31e609c | Panagiotis Kanavos | } |
769 | d31e609c | Panagiotis Kanavos | } |
770 | d31e609c | Panagiotis Kanavos | |
771 | d31e609c | Panagiotis Kanavos | /* |
772 | d31e609c | Panagiotis Kanavos | public AccountSettings CurrentAccount |
773 | d31e609c | Panagiotis Kanavos | { |
774 | d31e609c | Panagiotis Kanavos | get { |
775 | d31e609c | Panagiotis Kanavos | if (0 <= SelectedAccountIndex && SelectedAccountIndex < Settings.Accounts.Count) |
776 | d31e609c | Panagiotis Kanavos | return Settings.Accounts[SelectedAccountIndex]; |
777 | d31e609c | Panagiotis Kanavos | return null; |
778 | d31e609c | Panagiotis Kanavos | } |
779 | d31e609c | Panagiotis Kanavos | |
780 | d31e609c | Panagiotis Kanavos | } |
781 | d31e609c | Panagiotis Kanavos | */ |
782 | d31e609c | Panagiotis Kanavos | |
783 | d31e609c | Panagiotis Kanavos | |
784 | d31e609c | Panagiotis Kanavos | public bool CanMoveAccountFolder |
785 | d31e609c | Panagiotis Kanavos | { |
786 | d31e609c | Panagiotis Kanavos | get { return CurrentAccount != null; } |
787 | d31e609c | Panagiotis Kanavos | } |
788 | d31e609c | Panagiotis Kanavos | |
789 | 39de8b0f | pkanavos | public void MoveAccountFolder() |
790 | d31e609c | Panagiotis Kanavos | { |
791 | d31e609c | Panagiotis Kanavos | |
792 | 39de8b0f | pkanavos | using (var dlg = new FolderBrowserDialog()) |
793 | d31e609c | Panagiotis Kanavos | { |
794 | 39de8b0f | pkanavos | var currentFolder = CurrentAccount.RootPath; |
795 | 39de8b0f | pkanavos | dlg.SelectedPath = currentFolder; |
796 | 39de8b0f | pkanavos | //Ask the user to select a folder |
797 | 39de8b0f | pkanavos | //Note: We need a parent window here, which we retrieve with GetView |
798 | 39de8b0f | pkanavos | var view = (Window) GetView(); |
799 | 39de8b0f | pkanavos | if (DialogResult.OK != dlg.ShowDialog(new Wpf32Window(view))) |
800 | 39de8b0f | pkanavos | return; |
801 | d31e609c | Panagiotis Kanavos | |
802 | 39de8b0f | pkanavos | var newPath = dlg.SelectedPath; |
803 | 39de8b0f | pkanavos | //Find the account's monitor and stop it |
804 | 39de8b0f | pkanavos | PithosMonitor monitor; |
805 | 39de8b0f | pkanavos | if (Shell.Monitors.TryGetValue(CurrentAccount.AccountKey, out monitor)) |
806 | d31e609c | Panagiotis Kanavos | { |
807 | 39de8b0f | pkanavos | //Problem: Doesn't stop the poll agent |
808 | 39de8b0f | pkanavos | monitor.Stop(); |
809 | d31e609c | Panagiotis Kanavos | |
810 | 39de8b0f | pkanavos | monitor.MoveRootFolder(newPath); |
811 | d31e609c | Panagiotis Kanavos | |
812 | 39de8b0f | pkanavos | |
813 | d31e609c | Panagiotis Kanavos | } |
814 | 39de8b0f | pkanavos | //Replace the old rootpath with the new |
815 | 39de8b0f | pkanavos | CurrentAccount.RootPath = newPath; |
816 | 39de8b0f | pkanavos | //TODO: This will save all settings changes. Too coarse grained, need to fix at a later date |
817 | 39de8b0f | pkanavos | Settings.Save(); |
818 | 39de8b0f | pkanavos | //And start the monitor on the new RootPath |
819 | 39de8b0f | pkanavos | if (monitor != null) |
820 | 39de8b0f | pkanavos | { |
821 | 39de8b0f | pkanavos | monitor.RootPath = newPath; |
822 | 39de8b0f | pkanavos | if (CurrentAccount.IsActive) |
823 | dd5f5163 | pkanavos | Shell.StartMonitor(monitor); |
824 | dd5f5163 | pkanavos | |
825 | 39de8b0f | pkanavos | } |
826 | 39de8b0f | pkanavos | else |
827 | 39de8b0f | pkanavos | Shell.MonitorAccount(CurrentAccount.Account); |
828 | 39de8b0f | pkanavos | //Finally, notify that the Settings, CurrentAccount have changed |
829 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => CurrentAccount); |
830 | 39de8b0f | pkanavos | NotifyOfPropertyChange(() => Settings); |
831 | d31e609c | Panagiotis Kanavos | |
832 | 39de8b0f | pkanavos | } |
833 | d31e609c | Panagiotis Kanavos | } |
834 | 39de8b0f | pkanavos | |
835 | d31e609c | Panagiotis Kanavos | } |
836 | d31e609c | Panagiotis Kanavos | } |