Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / TaskbarViewModel.cs @ 1955901a

History | View | Annotate | Download (6.4 kB)

1 5bcf6d70 Panagiotis Kanavos
// -----------------------------------------------------------------------
2 5bcf6d70 Panagiotis Kanavos
// <copyright file="StatusViewModel.cs" company="Microsoft">
3 5bcf6d70 Panagiotis Kanavos
// TODO: Update copyright text.
4 5bcf6d70 Panagiotis Kanavos
// </copyright>
5 5bcf6d70 Panagiotis Kanavos
// -----------------------------------------------------------------------
6 5bcf6d70 Panagiotis Kanavos
7 5bcf6d70 Panagiotis Kanavos
using System.ComponentModel.Composition;
8 5bcf6d70 Panagiotis Kanavos
using System.Diagnostics;
9 0eea575a Panagiotis Kanavos
using System.IO;
10 0c02aa65 Panagiotis Kanavos
using System.Threading.Tasks;
11 5bcf6d70 Panagiotis Kanavos
using System.Windows;
12 5bcf6d70 Panagiotis Kanavos
using Caliburn.Micro;
13 5bcf6d70 Panagiotis Kanavos
using Pithos.Client.WPF.Properties;
14 5bcf6d70 Panagiotis Kanavos
using Pithos.Core;
15 5bcf6d70 Panagiotis Kanavos
using Pithos.Interfaces;
16 5bcf6d70 Panagiotis Kanavos
17 5bcf6d70 Panagiotis Kanavos
namespace Pithos.Client.WPF
18 5bcf6d70 Panagiotis Kanavos
{
19 5bcf6d70 Panagiotis Kanavos
    using System;
20 5bcf6d70 Panagiotis Kanavos
    using System.Collections.Generic;
21 5bcf6d70 Panagiotis Kanavos
    using System.Linq;
22 5bcf6d70 Panagiotis Kanavos
    using System.Text;
23 5bcf6d70 Panagiotis Kanavos
24 5bcf6d70 Panagiotis Kanavos
    /// <summary>
25 5bcf6d70 Panagiotis Kanavos
    /// TODO: Update summary.
26 5bcf6d70 Panagiotis Kanavos
    /// </summary>
27 5bcf6d70 Panagiotis Kanavos
    [Export]
28 0c02aa65 Panagiotis Kanavos
    public class TaskbarViewModel:ViewAware,IStatusNotification
29 5bcf6d70 Panagiotis Kanavos
    {
30 5bcf6d70 Panagiotis Kanavos
        private IStatusChecker _statusChecker;
31 0c02aa65 Panagiotis Kanavos
        private IEventAggregator _events;
32 5bcf6d70 Panagiotis Kanavos
33 5bcf6d70 Panagiotis Kanavos
        public PithosMonitor Monitor { get; private set; }
34 5bcf6d70 Panagiotis Kanavos
35 5bcf6d70 Panagiotis Kanavos
        public IPithosSettings Settings { get; private set; }
36 5bcf6d70 Panagiotis Kanavos
37 5bcf6d70 Panagiotis Kanavos
        public IScreen Parent { get; set; }
38 5bcf6d70 Panagiotis Kanavos
39 5bcf6d70 Panagiotis Kanavos
        [ImportingConstructor]
40 0c02aa65 Panagiotis Kanavos
        public TaskbarViewModel(IEventAggregator events, IStatusChecker statusChecker,PithosMonitor monitor,IPithosSettings settings)
41 5bcf6d70 Panagiotis Kanavos
        {
42 5bcf6d70 Panagiotis Kanavos
            OpenPithosFolderCommand = new PithosCommand(OpenPithosFolder);
43 5bcf6d70 Panagiotis Kanavos
            _statusChecker = statusChecker;
44 0c02aa65 Panagiotis Kanavos
            _events = events;            
45 5bcf6d70 Panagiotis Kanavos
            Settings = settings;
46 5bcf6d70 Panagiotis Kanavos
            Monitor = monitor;
47 0c02aa65 Panagiotis Kanavos
            Monitor.StatusNotification = this;
48 0c02aa65 Panagiotis Kanavos
49 0c02aa65 Panagiotis Kanavos
            
50 5bcf6d70 Panagiotis Kanavos
51 0eea575a Panagiotis Kanavos
            var account=settings.Accounts.FirstOrDefault(act => act.IsActive);
52 0eea575a Panagiotis Kanavos
            if (account != null)
53 0eea575a Panagiotis Kanavos
            {
54 0eea575a Panagiotis Kanavos
                Monitor.UserName = account.AccountName;
55 0eea575a Panagiotis Kanavos
                Monitor.ApiKey = account.ApiKey;
56 3c43ec9b Panagiotis Kanavos
                Monitor.UsePithos = account.UsePithos;
57 79736291 Panagiotis Kanavos
                var appSettings = Properties.Settings.Default;
58 79736291 Panagiotis Kanavos
                Monitor.AuthenticationUrl = account.UsePithos
59 79736291 Panagiotis Kanavos
                                                ? appSettings.PithosAuthenticationUrl
60 79736291 Panagiotis Kanavos
                                                : appSettings.CloudfilesAuthenticationUrl;
61 0eea575a Panagiotis Kanavos
                Monitor.RootPath = Path.Combine(Settings.PithosPath, account.RootPath??"");
62 0eea575a Panagiotis Kanavos
            }
63 0eea575a Panagiotis Kanavos
64 5bcf6d70 Panagiotis Kanavos
        }
65 5bcf6d70 Panagiotis Kanavos
        #region Status Properties
66 5bcf6d70 Panagiotis Kanavos
67 5bcf6d70 Panagiotis Kanavos
        private string _statusMessage;
68 5bcf6d70 Panagiotis Kanavos
        public string StatusMessage
69 5bcf6d70 Panagiotis Kanavos
        {
70 5bcf6d70 Panagiotis Kanavos
            get { return _statusMessage; }
71 5bcf6d70 Panagiotis Kanavos
            set
72 5bcf6d70 Panagiotis Kanavos
            {
73 5bcf6d70 Panagiotis Kanavos
                _statusMessage = value;
74 5bcf6d70 Panagiotis Kanavos
                NotifyOfPropertyChange(() => StatusMessage);
75 5bcf6d70 Panagiotis Kanavos
            }
76 5bcf6d70 Panagiotis Kanavos
        }
77 5bcf6d70 Panagiotis Kanavos
78 5bcf6d70 Panagiotis Kanavos
        private string _usageMessage;
79 5bcf6d70 Panagiotis Kanavos
        public string UsageMessage
80 5bcf6d70 Panagiotis Kanavos
        {
81 5bcf6d70 Panagiotis Kanavos
            get { return _usageMessage; }
82 5bcf6d70 Panagiotis Kanavos
            set
83 5bcf6d70 Panagiotis Kanavos
            {
84 5bcf6d70 Panagiotis Kanavos
                _usageMessage = value;
85 5bcf6d70 Panagiotis Kanavos
                NotifyOfPropertyChange(() => UsageMessage);
86 5bcf6d70 Panagiotis Kanavos
            }
87 5bcf6d70 Panagiotis Kanavos
        }
88 5bcf6d70 Panagiotis Kanavos
89 5bcf6d70 Panagiotis Kanavos
90 5bcf6d70 Panagiotis Kanavos
        private string _pauseSyncCaption="Pause Syncing";
91 5bcf6d70 Panagiotis Kanavos
        public string PauseSyncCaption
92 5bcf6d70 Panagiotis Kanavos
        {
93 5bcf6d70 Panagiotis Kanavos
            get { return _pauseSyncCaption; }
94 5bcf6d70 Panagiotis Kanavos
            set
95 5bcf6d70 Panagiotis Kanavos
            {
96 5bcf6d70 Panagiotis Kanavos
                _pauseSyncCaption = value;
97 5bcf6d70 Panagiotis Kanavos
                NotifyOfPropertyChange(() => PauseSyncCaption);
98 5bcf6d70 Panagiotis Kanavos
            }
99 5bcf6d70 Panagiotis Kanavos
        }
100 5bcf6d70 Panagiotis Kanavos
101 5bcf6d70 Panagiotis Kanavos
        private readonly IObservableCollection<FileEntry> _recentFiles = new BindableCollection<FileEntry>();
102 5bcf6d70 Panagiotis Kanavos
        public IObservableCollection<FileEntry> RecentFiles
103 5bcf6d70 Panagiotis Kanavos
        {
104 5bcf6d70 Panagiotis Kanavos
            get { return _recentFiles; }
105 5bcf6d70 Panagiotis Kanavos
        }
106 5bcf6d70 Panagiotis Kanavos
107 5bcf6d70 Panagiotis Kanavos
108 5bcf6d70 Panagiotis Kanavos
        private string _statusIcon;
109 5bcf6d70 Panagiotis Kanavos
        public string StatusIcon
110 5bcf6d70 Panagiotis Kanavos
        {
111 5bcf6d70 Panagiotis Kanavos
            get { return _statusIcon; }
112 5bcf6d70 Panagiotis Kanavos
            set
113 5bcf6d70 Panagiotis Kanavos
            {
114 5bcf6d70 Panagiotis Kanavos
                _statusIcon = value;
115 5bcf6d70 Panagiotis Kanavos
                NotifyOfPropertyChange(() => StatusIcon);
116 5bcf6d70 Panagiotis Kanavos
            }
117 5bcf6d70 Panagiotis Kanavos
        }
118 5bcf6d70 Panagiotis Kanavos
119 5bcf6d70 Panagiotis Kanavos
        #endregion
120 5bcf6d70 Panagiotis Kanavos
121 5bcf6d70 Panagiotis Kanavos
        #region Commands
122 5bcf6d70 Panagiotis Kanavos
123 5bcf6d70 Panagiotis Kanavos
        public void ShowPreferences()
124 5bcf6d70 Panagiotis Kanavos
        {
125 5bcf6d70 Panagiotis Kanavos
            Settings.Reload();
126 5bcf6d70 Panagiotis Kanavos
        }
127 5bcf6d70 Panagiotis Kanavos
128 5bcf6d70 Panagiotis Kanavos
129 5bcf6d70 Panagiotis Kanavos
        public PithosCommand OpenPithosFolderCommand { get; private set; }
130 5bcf6d70 Panagiotis Kanavos
131 5bcf6d70 Panagiotis Kanavos
        public void OpenPithosFolder()
132 5bcf6d70 Panagiotis Kanavos
        {
133 5bcf6d70 Panagiotis Kanavos
            Process.Start(Settings.PithosPath);
134 5bcf6d70 Panagiotis Kanavos
        }
135 5bcf6d70 Panagiotis Kanavos
136 5bcf6d70 Panagiotis Kanavos
        public void GoToSite()
137 5bcf6d70 Panagiotis Kanavos
        {
138 5bcf6d70 Panagiotis Kanavos
            Process.Start(Properties.Settings.Default.PithosSite);
139 5bcf6d70 Panagiotis Kanavos
        }
140 5bcf6d70 Panagiotis Kanavos
141 5bcf6d70 Panagiotis Kanavos
142 5bcf6d70 Panagiotis Kanavos
        public void ToggleSynching()
143 5bcf6d70 Panagiotis Kanavos
        {
144 5bcf6d70 Panagiotis Kanavos
            Monitor.Pause = !Monitor.Pause;
145 5bcf6d70 Panagiotis Kanavos
            PauseSyncCaption = Monitor.Pause ? "Resume syncing" : "Pause syncing";
146 5bcf6d70 Panagiotis Kanavos
            var iconKey = Monitor.Pause ? "TraySyncPaused" : "TrayInSynch";
147 5bcf6d70 Panagiotis Kanavos
            StatusIcon = String.Format(@"Images/{0}.ico", iconKey);
148 5bcf6d70 Panagiotis Kanavos
        }
149 5bcf6d70 Panagiotis Kanavos
150 5bcf6d70 Panagiotis Kanavos
        public void ExitPithos()
151 5bcf6d70 Panagiotis Kanavos
        {
152 5bcf6d70 Panagiotis Kanavos
            Monitor.Stop();
153 5bcf6d70 Panagiotis Kanavos
            Parent.TryClose();
154 5bcf6d70 Panagiotis Kanavos
        }
155 5bcf6d70 Panagiotis Kanavos
        #endregion
156 5bcf6d70 Panagiotis Kanavos
157 5bcf6d70 Panagiotis Kanavos
158 5bcf6d70 Panagiotis Kanavos
        private Dictionary<PithosStatus, StatusInfo> iconNames = new List<StatusInfo>
159 5bcf6d70 Panagiotis Kanavos
            {
160 5bcf6d70 Panagiotis Kanavos
                new StatusInfo(PithosStatus.InSynch, "All files up to date", "TrayInSynch"),
161 5bcf6d70 Panagiotis Kanavos
                new StatusInfo(PithosStatus.Syncing, "Syncing Files", "TraySynching"),
162 5bcf6d70 Panagiotis Kanavos
                new StatusInfo(PithosStatus.SyncPaused, "Sync Paused", "TraySyncPaused")
163 5bcf6d70 Panagiotis Kanavos
            }.ToDictionary(s => s.Status);
164 5bcf6d70 Panagiotis Kanavos
165 5bcf6d70 Panagiotis Kanavos
        
166 5bcf6d70 Panagiotis Kanavos
        public void UpdateStatus()
167 5bcf6d70 Panagiotis Kanavos
        {
168 5bcf6d70 Panagiotis Kanavos
            var pithosStatus = _statusChecker.GetPithosStatus();
169 5bcf6d70 Panagiotis Kanavos
170 5bcf6d70 Panagiotis Kanavos
            if (iconNames.ContainsKey(pithosStatus))
171 5bcf6d70 Panagiotis Kanavos
            {
172 5bcf6d70 Panagiotis Kanavos
                var info = iconNames[pithosStatus];
173 5bcf6d70 Panagiotis Kanavos
                StatusIcon = String.Format(@"Images/{0}.ico", info.IconName);
174 5bcf6d70 Panagiotis Kanavos
                StatusMessage = String.Format("Pithos 1.0\r\n{0}", info.StatusText);
175 5bcf6d70 Panagiotis Kanavos
            }
176 0c02aa65 Panagiotis Kanavos
177 0c02aa65 Panagiotis Kanavos
            var tv=this.GetView();
178 0c02aa65 Panagiotis Kanavos
            _events.Publish(new Notification { Title = "Start", Message = "Start Monitoring", Level = TraceLevel.Info});
179 0eea575a Panagiotis Kanavos
            if (!String.IsNullOrWhiteSpace(Monitor.UserName) &&
180 0eea575a Panagiotis Kanavos
                !String.IsNullOrWhiteSpace(Monitor.ApiKey))
181 0c02aa65 Panagiotis Kanavos
                Task.Factory.StartNew(() => 
182 0c02aa65 Panagiotis Kanavos
                    Monitor.Start())
183 0c02aa65 Panagiotis Kanavos
                    .ContinueWith(t =>{
184 0c02aa65 Panagiotis Kanavos
                        if (t.IsFaulted)
185 0c02aa65 Panagiotis Kanavos
                        {
186 0c02aa65 Panagiotis Kanavos
                            
187 0c02aa65 Panagiotis Kanavos
                            var message= String.Format("An exception occured. Can't start monitoring\n{0}",t.Exception);
188 0c02aa65 Panagiotis Kanavos
                            _events.Publish(new Notification { Title = "Error",Message=message,Level= TraceLevel.Error });
189 0c02aa65 Panagiotis Kanavos
                            MessageBox.Show(message);
190 0c02aa65 Panagiotis Kanavos
                        }
191 0c02aa65 Panagiotis Kanavos
                    });                
192 0c02aa65 Panagiotis Kanavos
        }
193 0c02aa65 Panagiotis Kanavos
194 0c02aa65 Panagiotis Kanavos
       
195 0c02aa65 Panagiotis Kanavos
196 0c02aa65 Panagiotis Kanavos
        public void NotifyChange(string status, TraceLevel level=TraceLevel.Info)
197 0c02aa65 Panagiotis Kanavos
        {
198 0c02aa65 Panagiotis Kanavos
            this.StatusMessage = status;
199 0c02aa65 Panagiotis Kanavos
            
200 0c02aa65 Panagiotis Kanavos
            _events.Publish(new Notification { Title = "Pithos", Message = status, Level = level });
201 5bcf6d70 Panagiotis Kanavos
        }
202 5bcf6d70 Panagiotis Kanavos
    }
203 5bcf6d70 Panagiotis Kanavos
}