af8d7cfcabc2fc4a99eaa4f1fbe4e4db887735d0
[pithos-ms-client] / trunk / Pithos.Client.WPF / PreferencesViewModel.cs
1 // -----------------------------------------------------------------------
2 // <copyright file="PreferencesViewModel.cs" company="Microsoft">
3 // TODO: Update copyright text.
4 // </copyright>
5 // -----------------------------------------------------------------------
6
7 using System.Collections;
8 using System.ComponentModel.Composition;
9 using System.Diagnostics;
10 using System.IO;
11 using System.IO.IsolatedStorage;
12 using System.Net;
13 using System.Runtime.Serialization;
14 using System.Windows;
15 using System.Windows.Forms;
16 using Caliburn.Micro;
17 using Pithos.Client.WPF.Configuration;
18 using Pithos.Core;
19 using Pithos.Interfaces;
20 using Pithos.ShellExtensions;
21 using Screen = Caliburn.Micro.Screen;
22
23 namespace Pithos.Client.WPF
24 {
25     using System;
26     using System.Collections.Generic;
27     using System.Linq;
28     using System.Text;
29
30     /// <summary>
31     /// TODO: Update summary.
32     /// </summary>
33     [Export(typeof(IShell))]
34     public class PreferencesViewModel : Screen, IShell
35     {
36         
37
38
39         public IPithosSettings Settings { get; set; }
40
41
42         public PithosMonitor Monitor { get; private set; }
43
44         public TaskbarViewModel Taskbar { get; set; }
45
46         ShellExtensionController _extensionController=new ShellExtensionController();
47
48         [ImportingConstructor]
49         public PreferencesViewModel(TaskbarViewModel taskbar, IPithosSettings settings, PithosMonitor monitor)
50         {
51             DisplayName = "Pithos Preferences";
52
53             Taskbar=taskbar;
54             Taskbar.Parent = this;
55             
56             Settings=settings;
57             Monitor=monitor;
58
59             
60
61             
62
63             Taskbar.UsageMessage = "Using 15% of 50 GB";
64             Taskbar.RecentFiles.AddRange(new[]
65                                      {
66                                       new FileEntry{FileName="Moo",FullPath=@"e:\Pithos\moo"}   ,
67                                       new FileEntry{FileName="Mee",FullPath=@"e:\Pithos\mee"}   
68                                      });
69             Taskbar.StatusMessage = "In Synch";
70             Taskbar.UpdateStatus();
71         }
72         protected override void OnViewAttached(object view, object context)
73         {
74             var window = (Window)view;
75 /*
76             window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
77             window.ShowInTaskbar = false;
78 */
79
80             base.OnViewAttached(view, context);
81         }
82
83
84         protected override void OnViewLoaded(object view)
85         {
86             var window = (Window)view;
87             window.Hide();
88
89             base.OnViewLoaded(view);
90         }
91
92         #region Preferences Properties
93
94         private bool _noProxy;
95         public bool NoProxy
96         {
97             get { return _noProxy; }
98             set
99             {
100                 _noProxy = value;
101                 NotifyOfPropertyChange(()=>NoProxy);
102             }
103         }
104
105
106         private bool _defaultProxy;
107
108         public bool DefaultProxy
109         {
110             get { return _defaultProxy; }
111             set
112             {
113                 _defaultProxy = value;
114                 NotifyOfPropertyChange(() => DefaultProxy);
115             }
116         }
117
118
119         private bool _manualProxy;
120
121         public bool ManualProxy
122         {
123             get { return _manualProxy; }
124             set
125             {
126                 _manualProxy = value;
127                 NotifyOfPropertyChange(() => ManualProxy);
128             }
129         }
130         #endregion
131
132        
133         #region Commands
134         
135
136         /*public void ShowPreferences()
137         {
138             Settings.Reload();
139
140             var window = (Window)this.GetView();
141             window.Show();
142         }*/
143
144
145         /*public PithosCommand OpenPithosFolderCommand { get; private set; }
146
147         public void OpenPithosFolder()
148         {
149             Process.Start(Settings.PithosPath);
150         }
151
152         public void GoToSite()
153         {
154
155         }
156
157         public void ToggleSynching()
158         {
159
160         }
161 */
162         public void SaveChanges()
163         {
164             DoSave();
165             /*var window = (Window)GetView();
166             window.Hide();*/
167         }
168
169         public void RejectChanges()
170         {
171             Settings.Reload();
172            /* var window = (Window)GetView();
173             window.Hide();*/
174         }
175
176         public void ApplyChanges()
177         {
178             DoSave();
179         }
180
181         private void DoSave()
182         {
183             Settings.Save();
184             Monitor.Start();
185         }
186
187         public void ChangePithosFolder()
188         {
189             var browser = new FolderBrowserDialog();
190             browser.SelectedPath = Settings.PithosPath;
191             var result = browser.ShowDialog((IWin32Window)GetView());
192             if (result == DialogResult.OK)
193             {
194                 var newPath = browser.SelectedPath;
195                 Directory.Move(Settings.PithosPath, newPath);
196                 Settings.PithosPath = newPath;
197                 Settings.Save();
198                 NotifyOfPropertyChange(() => Settings);
199             }
200         }
201
202        /* public void ExitPithos()
203         {
204             Monitor.Stop();
205             this.TryClose();            
206         }
207 */
208
209         public void AddAccount()
210         {
211             var newAccount = new AccountSettings();
212             Settings.Accounts.Add(newAccount);
213             CurrentAccount = newAccount;
214             NotifyOfPropertyChange(()=>Settings);
215         }
216
217         public void RemoveAccount()
218         {
219 //            var idx = Settings.Accounts.IndexOf(CurrentAccount);
220             Settings.Accounts.RemoveAll(account => account.AccountName == CurrentAccount.AccountName);
221 //            Settings.Accounts.RemoveAt(idx);            
222             CurrentAccount = null;
223             NotifyOfPropertyChange(()=>Settings);
224             NotifyOfPropertyChange("Settings.Accounts");
225         }
226
227         public bool CanRemoveAccount
228         {
229             get { return (CurrentAccount != null); }
230         }
231
232
233
234         public bool ExtensionsActivated
235         {
236             get { return Settings.ExtensionsActivated; }
237             set
238             {
239                 if (Settings.ExtensionsActivated == value)
240                     return;
241
242                 Settings.ExtensionsActivated = value;
243
244                 if (value)
245                     _extensionController.RegisterExtensions();
246                 else
247                 {
248                     _extensionController.UnregisterExtensions();
249                 }
250                 NotifyOfPropertyChange(() => ExtensionsActivated);
251             }
252         }
253
254         public void RefreshOverlays()
255         {
256             this.Monitor.Workflow.RaiseChangeNotification(Settings.PithosPath);
257         }
258         #endregion
259
260         private AccountSettings _currentAccount;
261         public AccountSettings CurrentAccount
262         {
263             get { return _currentAccount; }
264             set
265             {
266                 _currentAccount = value;
267                 NotifyOfPropertyChange(()=>CurrentAccount);
268                 NotifyOfPropertyChange(()=>CanRemoveAccount);
269             }
270         }
271
272
273
274         /* private void UnregisterExtensions()
275         {
276             using (var installer = new ProjectInstaller())
277             {
278                 IDictionary state = ShellExtensionController.LoadState();
279                 installer.Uninstall(state);
280             }
281         }
282
283         private void RegisterExtensions()
284         {
285             using (var installer = new ProjectInstaller())
286             {
287                 IDictionary state = new Dictionary<object, object>();
288                 installer.Install(state);
289                 ShellExtensionController.SaveState(state);
290
291             }
292         }*/
293     }
294 }