Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / FileProperties / FilePropertiesViewModel.cs @ 21141c06

History | View | Annotate | Download (17.7 kB)

1 d7288179 pkanavos
#region
2 d7288179 pkanavos
/* -----------------------------------------------------------------------
3 d7288179 pkanavos
 * <copyright file="FilePropertiesViewModel.cs" company="GRNet">
4 d7288179 pkanavos
 * 
5 d7288179 pkanavos
 * Copyright 2011-2012 GRNET S.A. All rights reserved.
6 d7288179 pkanavos
 *
7 d7288179 pkanavos
 * Redistribution and use in source and binary forms, with or
8 d7288179 pkanavos
 * without modification, are permitted provided that the following
9 d7288179 pkanavos
 * conditions are met:
10 d7288179 pkanavos
 *
11 d7288179 pkanavos
 *   1. Redistributions of source code must retain the above
12 d7288179 pkanavos
 *      copyright notice, this list of conditions and the following
13 d7288179 pkanavos
 *      disclaimer.
14 d7288179 pkanavos
 *
15 d7288179 pkanavos
 *   2. Redistributions in binary form must reproduce the above
16 d7288179 pkanavos
 *      copyright notice, this list of conditions and the following
17 d7288179 pkanavos
 *      disclaimer in the documentation and/or other materials
18 d7288179 pkanavos
 *      provided with the distribution.
19 d7288179 pkanavos
 *
20 d7288179 pkanavos
 *
21 d7288179 pkanavos
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
22 d7288179 pkanavos
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 d7288179 pkanavos
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 d7288179 pkanavos
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
25 d7288179 pkanavos
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 d7288179 pkanavos
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 d7288179 pkanavos
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28 d7288179 pkanavos
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 d7288179 pkanavos
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 d7288179 pkanavos
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 d7288179 pkanavos
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 d7288179 pkanavos
 * POSSIBILITY OF SUCH DAMAGE.
33 d7288179 pkanavos
 *
34 d7288179 pkanavos
 * The views and conclusions contained in the software and
35 d7288179 pkanavos
 * documentation are those of the authors and should not be
36 d7288179 pkanavos
 * interpreted as representing official policies, either expressed
37 d7288179 pkanavos
 * or implied, of GRNET S.A.
38 d7288179 pkanavos
 * </copyright>
39 d7288179 pkanavos
 * -----------------------------------------------------------------------
40 d7288179 pkanavos
 */
41 d7288179 pkanavos
#endregion
42 d7288179 pkanavos
43 d7288179 pkanavos
using System.Collections.ObjectModel;
44 d7288179 pkanavos
using System.ComponentModel.Composition;
45 d7288179 pkanavos
using System.Diagnostics.Contracts;
46 d7288179 pkanavos
using System.Drawing;
47 d7288179 pkanavos
using System.IO;
48 d7288179 pkanavos
using System.Net;
49 d7288179 pkanavos
using System.Threading.Tasks;
50 d7288179 pkanavos
using System.Windows;
51 d7288179 pkanavos
using System.Windows.Interop;
52 d7288179 pkanavos
using System.Windows.Media.Imaging;
53 d7288179 pkanavos
using Caliburn.Micro;
54 d7288179 pkanavos
using Pithos.Client.WPF.FileProperties;
55 d7288179 pkanavos
using Pithos.Core;
56 d7288179 pkanavos
using Pithos.Interfaces;
57 d7288179 pkanavos
using Pithos.Network;
58 d7288179 pkanavos
59 d7288179 pkanavos
namespace Pithos.Client.WPF
60 d7288179 pkanavos
{
61 d7288179 pkanavos
    using System;
62 d7288179 pkanavos
    using System.Linq;
63 d7288179 pkanavos
64 d7288179 pkanavos
    /// <summary>
65 d7288179 pkanavos
    /// TODO: Update summary.
66 d7288179 pkanavos
    /// </summary>
67 d7288179 pkanavos
    [Export(typeof(FilePropertiesViewModel))]
68 d7288179 pkanavos
    public class FilePropertiesViewModel : Screen
69 d7288179 pkanavos
    {
70 d7288179 pkanavos
        private string _title;
71 d7288179 pkanavos
        public string Title
72 d7288179 pkanavos
        {
73 d7288179 pkanavos
            get { return _title; }
74 d7288179 pkanavos
            set
75 d7288179 pkanavos
            {
76 d7288179 pkanavos
                _title = value;
77 d7288179 pkanavos
                NotifyOfPropertyChange(()=>Title);
78 d7288179 pkanavos
            }
79 d7288179 pkanavos
        }
80 d7288179 pkanavos
81 d7288179 pkanavos
82 d7288179 pkanavos
        private bool _isPublic;
83 d7288179 pkanavos
        public bool IsPublic
84 d7288179 pkanavos
        {
85 d7288179 pkanavos
            get { return _isPublic; }
86 d7288179 pkanavos
            set
87 d7288179 pkanavos
            {
88 d7288179 pkanavos
                _isPublic = value;
89 d7288179 pkanavos
                NotifyOfPropertyChange(()=>IsPublic);
90 d7288179 pkanavos
            }
91 d7288179 pkanavos
        }
92 d7288179 pkanavos
93 d7288179 pkanavos
        private string _contentDisposition;
94 d7288179 pkanavos
        public string ContentDisposition
95 d7288179 pkanavos
        {
96 d7288179 pkanavos
            get { return _contentDisposition; }
97 d7288179 pkanavos
            set
98 d7288179 pkanavos
            {
99 d7288179 pkanavos
                _contentDisposition = value;
100 d7288179 pkanavos
                NotifyOfPropertyChange(() => ContentDisposition);
101 d7288179 pkanavos
            }
102 d7288179 pkanavos
        }
103 d7288179 pkanavos
104 d7288179 pkanavos
        private string _contentEncoding;
105 d7288179 pkanavos
        public string ContentEncoding
106 d7288179 pkanavos
        {
107 d7288179 pkanavos
            get { return _contentEncoding; }
108 d7288179 pkanavos
            set
109 d7288179 pkanavos
            {
110 d7288179 pkanavos
                _contentEncoding = value;
111 d7288179 pkanavos
                NotifyOfPropertyChange(() => ContentEncoding);
112 d7288179 pkanavos
            }
113 d7288179 pkanavos
        }
114 d7288179 pkanavos
115 d7288179 pkanavos
116 d7288179 pkanavos
        private string _manifest;
117 d7288179 pkanavos
        public string Manifest
118 d7288179 pkanavos
        {
119 d7288179 pkanavos
            get { return _manifest; }
120 d7288179 pkanavos
            set
121 d7288179 pkanavos
            {
122 d7288179 pkanavos
                _manifest = value;
123 d7288179 pkanavos
                NotifyOfPropertyChange(() => Manifest);
124 d7288179 pkanavos
            }
125 d7288179 pkanavos
        }
126 d7288179 pkanavos
127 d7288179 pkanavos
        private string _kind;
128 d7288179 pkanavos
        public string Kind
129 d7288179 pkanavos
        {
130 d7288179 pkanavos
            get { return _kind; }
131 d7288179 pkanavos
            set
132 d7288179 pkanavos
            {
133 d7288179 pkanavos
                _kind = value;
134 d7288179 pkanavos
                NotifyOfPropertyChange(() => Kind);
135 d7288179 pkanavos
            }
136 d7288179 pkanavos
        }
137 d7288179 pkanavos
138 d7288179 pkanavos
        private string _size;
139 d7288179 pkanavos
        public string Size
140 d7288179 pkanavos
        {
141 d7288179 pkanavos
            get { return _size; }
142 d7288179 pkanavos
            set
143 d7288179 pkanavos
            {
144 d7288179 pkanavos
                _size = value;
145 d7288179 pkanavos
                NotifyOfPropertyChange(() => Size);
146 d7288179 pkanavos
            }
147 d7288179 pkanavos
        }
148 d7288179 pkanavos
149 d7288179 pkanavos
        private string _shortSize;
150 d7288179 pkanavos
        public string ShortSize
151 d7288179 pkanavos
        {
152 d7288179 pkanavos
            get { return _shortSize; }
153 d7288179 pkanavos
            set
154 d7288179 pkanavos
            {
155 d7288179 pkanavos
                _shortSize = value;
156 d7288179 pkanavos
                NotifyOfPropertyChange(() => ShortSize);
157 d7288179 pkanavos
            }
158 d7288179 pkanavos
        }
159 d7288179 pkanavos
160 d7288179 pkanavos
        private string _where;
161 d7288179 pkanavos
        public string Where
162 d7288179 pkanavos
        {
163 d7288179 pkanavos
            get { return _where; }
164 d7288179 pkanavos
            set
165 d7288179 pkanavos
            {
166 d7288179 pkanavos
                _where = value;
167 d7288179 pkanavos
                NotifyOfPropertyChange(() => Where);
168 d7288179 pkanavos
            }
169 d7288179 pkanavos
        }
170 d7288179 pkanavos
171 397b9100 pkanavos
        private DateTimeOffset? _modified;
172 397b9100 pkanavos
        public DateTimeOffset? Modified
173 d7288179 pkanavos
        {
174 d7288179 pkanavos
            get { return _modified; }
175 d7288179 pkanavos
            set
176 d7288179 pkanavos
            {
177 d7288179 pkanavos
                _modified = value;
178 d7288179 pkanavos
                NotifyOfPropertyChange(() => Modified);
179 d7288179 pkanavos
            }
180 d7288179 pkanavos
        }
181 d7288179 pkanavos
182 d7288179 pkanavos
        private string _modifiedBy;
183 d7288179 pkanavos
        public string ModifiedBy
184 d7288179 pkanavos
        {
185 d7288179 pkanavos
            get { return _modifiedBy; }
186 d7288179 pkanavos
            set
187 d7288179 pkanavos
            {
188 d7288179 pkanavos
                _modifiedBy = value;
189 d7288179 pkanavos
                NotifyOfPropertyChange(() => ModifiedBy);
190 d7288179 pkanavos
            }
191 d7288179 pkanavos
        }
192 d7288179 pkanavos
193 d7288179 pkanavos
        private long _version;
194 d7288179 pkanavos
        public long Version
195 d7288179 pkanavos
        {
196 d7288179 pkanavos
            get { return _version; }
197 d7288179 pkanavos
            set
198 d7288179 pkanavos
            {
199 d7288179 pkanavos
                _version = value;
200 d7288179 pkanavos
                NotifyOfPropertyChange(() => Version);
201 d7288179 pkanavos
            }
202 d7288179 pkanavos
        }
203 d7288179 pkanavos
204 d7288179 pkanavos
        private string _localFileName;
205 d7288179 pkanavos
        protected string LocalFileName
206 d7288179 pkanavos
        {
207 d7288179 pkanavos
            get { return _localFileName; }
208 d7288179 pkanavos
            set
209 d7288179 pkanavos
            {
210 d7288179 pkanavos
                _localFileName = value;
211 d7288179 pkanavos
                NotifyOfPropertyChange(() => LocalFileName);
212 d7288179 pkanavos
            }
213 d7288179 pkanavos
        }
214 d7288179 pkanavos
215 d7288179 pkanavos
        private BitmapSource _fileIcon;
216 d7288179 pkanavos
        public BitmapSource FileIcon
217 d7288179 pkanavos
        {
218 d7288179 pkanavos
            get { return _fileIcon; }
219 d7288179 pkanavos
            set
220 d7288179 pkanavos
            {
221 d7288179 pkanavos
                _fileIcon = value;
222 d7288179 pkanavos
                NotifyOfPropertyChange(() => FileIcon);
223 d7288179 pkanavos
            }
224 d7288179 pkanavos
        }
225 d7288179 pkanavos
226 d7288179 pkanavos
        private string _publicUrl;
227 d7288179 pkanavos
        public string PublicUrl
228 d7288179 pkanavos
        {
229 d7288179 pkanavos
            get { return _publicUrl; }
230 d7288179 pkanavos
            set
231 d7288179 pkanavos
            {
232 d7288179 pkanavos
                _publicUrl = value;
233 d7288179 pkanavos
                NotifyOfPropertyChange(() => PublicUrl);
234 d7288179 pkanavos
            }
235 d7288179 pkanavos
        }
236 d7288179 pkanavos
237 d7288179 pkanavos
        private string _fileName;
238 d7288179 pkanavos
        public string FileName
239 d7288179 pkanavos
        {
240 d7288179 pkanavos
            get { return _fileName; }
241 d7288179 pkanavos
            set
242 d7288179 pkanavos
            {
243 d7288179 pkanavos
                _fileName = value;
244 d7288179 pkanavos
                NotifyOfPropertyChange(() => FileName);
245 d7288179 pkanavos
            }
246 d7288179 pkanavos
        }
247 d7288179 pkanavos
248 d7288179 pkanavos
        private string _container;
249 d7288179 pkanavos
        public string Container
250 d7288179 pkanavos
        {
251 d7288179 pkanavos
            get { return _container; }
252 d7288179 pkanavos
            set
253 d7288179 pkanavos
            {
254 d7288179 pkanavos
                _container = value;
255 d7288179 pkanavos
                NotifyOfPropertyChange(() => Container);
256 d7288179 pkanavos
            }
257 d7288179 pkanavos
        }
258 d7288179 pkanavos
259 d7288179 pkanavos
        private string _synchStatus;
260 d7288179 pkanavos
        public string SynchStatus
261 d7288179 pkanavos
        {
262 d7288179 pkanavos
            get { return _synchStatus; }
263 d7288179 pkanavos
            set
264 d7288179 pkanavos
            {
265 d7288179 pkanavos
                _synchStatus = value;
266 d7288179 pkanavos
                NotifyOfPropertyChange(()=>SynchStatus);
267 d7288179 pkanavos
            }
268 d7288179 pkanavos
        }
269 d7288179 pkanavos
        
270 d7288179 pkanavos
        private Permission _currentPermission;
271 d7288179 pkanavos
        public Permission CurrentPermission
272 d7288179 pkanavos
        {
273 d7288179 pkanavos
            get { return _currentPermission; }
274 d7288179 pkanavos
            set
275 d7288179 pkanavos
            {                
276 d7288179 pkanavos
                _currentPermission = (value==null)?new Permission() : value.Clone();
277 d7288179 pkanavos
                _currentPermission.PropertyChanged += (o, e) => NotifyOfPropertyChange(() => CanAddPermission);
278 d7288179 pkanavos
279 d7288179 pkanavos
                NotifyOfPropertyChange(()=>CurrentPermission);
280 d7288179 pkanavos
                NotifyOfPropertyChange(() => CanAddPermission);
281 d7288179 pkanavos
            }
282 d7288179 pkanavos
        }
283 d7288179 pkanavos
284 d7288179 pkanavos
        public bool CanAddPermission
285 d7288179 pkanavos
        {
286 d7288179 pkanavos
            get { return !String.IsNullOrWhiteSpace(CurrentPermission.UserName); }
287 d7288179 pkanavos
        }
288 d7288179 pkanavos
289 d7288179 pkanavos
        public void AddPermission()
290 d7288179 pkanavos
        {
291 d7288179 pkanavos
            var existingPermission = Permissions.FirstOrDefault(perm => perm.UserName == CurrentPermission.UserName);
292 d7288179 pkanavos
            if (existingPermission==null)
293 d7288179 pkanavos
                Permissions.Add(CurrentPermission.Clone());
294 d7288179 pkanavos
            else
295 d7288179 pkanavos
            {
296 d7288179 pkanavos
                existingPermission.Read = CurrentPermission.Read;
297 d7288179 pkanavos
            }
298 d7288179 pkanavos
299 d7288179 pkanavos
            PermissionsChanged= true;
300 d7288179 pkanavos
301 d7288179 pkanavos
        }
302 d7288179 pkanavos
303 d7288179 pkanavos
        public bool CanAddTag
304 d7288179 pkanavos
        {
305 d7288179 pkanavos
            get { return !String.IsNullOrWhiteSpace(CurrentTag.Name); }
306 d7288179 pkanavos
        }
307 d7288179 pkanavos
308 d7288179 pkanavos
        public void AddTag()
309 d7288179 pkanavos
        {
310 d7288179 pkanavos
            var existingTag = Tags.FirstOrDefault(tag => tag.Name == CurrentTag.Name);           
311 d7288179 pkanavos
            if (existingTag == null)
312 d7288179 pkanavos
                Tags.Add(CurrentTag.Clone());
313 d7288179 pkanavos
            else
314 d7288179 pkanavos
            {
315 d7288179 pkanavos
                existingTag.Value = CurrentTag.Value;
316 d7288179 pkanavos
            }
317 d7288179 pkanavos
            TagsChanged = true;            
318 d7288179 pkanavos
        }
319 d7288179 pkanavos
320 d7288179 pkanavos
321 d7288179 pkanavos
        private bool _tagsChanged;
322 d7288179 pkanavos
        public bool TagsChanged
323 d7288179 pkanavos
        {
324 d7288179 pkanavos
            get { return _tagsChanged; }
325 d7288179 pkanavos
            private set
326 d7288179 pkanavos
            {
327 d7288179 pkanavos
                _tagsChanged = value;
328 d7288179 pkanavos
                NotifyOfPropertyChange(() => CanApplyChanges);                
329 d7288179 pkanavos
            }
330 d7288179 pkanavos
        }
331 d7288179 pkanavos
332 d7288179 pkanavos
        private bool _permissionsChanged;
333 d7288179 pkanavos
        public bool PermissionsChanged
334 d7288179 pkanavos
        {
335 d7288179 pkanavos
            get { return _permissionsChanged; }
336 d7288179 pkanavos
            private set
337 d7288179 pkanavos
            {
338 d7288179 pkanavos
                _permissionsChanged = value;
339 d7288179 pkanavos
                NotifyOfPropertyChange(() => CanApplyChanges);
340 d7288179 pkanavos
            }
341 d7288179 pkanavos
        }
342 d7288179 pkanavos
343 d7288179 pkanavos
        private bool _isBusy = true;
344 d7288179 pkanavos
        public bool IsBusy
345 d7288179 pkanavos
        {
346 d7288179 pkanavos
            get { return _isBusy; }
347 d7288179 pkanavos
            set
348 d7288179 pkanavos
            {
349 d7288179 pkanavos
                _isBusy = value;
350 d7288179 pkanavos
                NotifyOfPropertyChange(() => IsBusy);
351 d7288179 pkanavos
            }
352 d7288179 pkanavos
        }
353 d7288179 pkanavos
354 d7288179 pkanavos
        private string _busyMessage="Loading Object Info ...";
355 d7288179 pkanavos
        public string BusyMessage
356 d7288179 pkanavos
        {
357 d7288179 pkanavos
            get { return _busyMessage; }
358 d7288179 pkanavos
            set
359 d7288179 pkanavos
            {
360 d7288179 pkanavos
                _busyMessage = value;
361 d7288179 pkanavos
                NotifyOfPropertyChange(()=>BusyMessage);
362 d7288179 pkanavos
            }
363 d7288179 pkanavos
        }
364 d7288179 pkanavos
365 d7288179 pkanavos
366 d7288179 pkanavos
        public FilePropertiesViewModel(ShellViewModel shell,Task<ObjectInfo> pithosFile,string localFileName)
367 d7288179 pkanavos
        {
368 d7288179 pkanavos
            if (shell==null)
369 d7288179 pkanavos
                throw new ArgumentNullException("shell");
370 d7288179 pkanavos
            if (pithosFile==null)
371 d7288179 pkanavos
                throw new ArgumentNullException("pithosFile");
372 d7288179 pkanavos
            if (String.IsNullOrWhiteSpace(localFileName))
373 d7288179 pkanavos
                throw new ArgumentNullException("localFileName");
374 d7288179 pkanavos
            Contract.EndContractBlock();
375 d7288179 pkanavos
376 d7288179 pkanavos
377 d7288179 pkanavos
            _tags = new ObservableCollection<MetaValue>();
378 d7288179 pkanavos
            _tags.CollectionChanged += (sender, evt) => { TagsChanged = true; };
379 d7288179 pkanavos
            _permissions = new ObservableCollection<Permission>();
380 d7288179 pkanavos
            _permissions.CollectionChanged += (sender, evt) => { PermissionsChanged = true; };
381 d7288179 pkanavos
            
382 d7288179 pkanavos
383 d7288179 pkanavos
            CurrentPermission=new Permission();
384 d7288179 pkanavos
            CurrentTag=new MetaValue();
385 d7288179 pkanavos
386 d7288179 pkanavos
387 d7288179 pkanavos
            Shell = shell;
388 d7288179 pkanavos
            LocalFileName = localFileName;
389 d7288179 pkanavos
390 d7288179 pkanavos
            var name=Path.GetFileName(localFileName);
391 d7288179 pkanavos
            DisplayName = String.Format("{0} File Properties", name);
392 d7288179 pkanavos
393 d7288179 pkanavos
            pithosFile.ContinueWith(t =>
394 d7288179 pkanavos
            {
395 d7288179 pkanavos
                if (t.IsFaulted)
396 d7288179 pkanavos
                {
397 d7288179 pkanavos
                    IsBusy = false;
398 d7288179 pkanavos
                    Execute.OnUIThread(()=>ShowError(t.Exception));
399 d7288179 pkanavos
                    this.TryClose();
400 d7288179 pkanavos
401 d7288179 pkanavos
                }
402 d7288179 pkanavos
                else
403 d7288179 pkanavos
                    Execute.OnUIThread(() => PithosFile = t.Result);
404 d7288179 pkanavos
            });       
405 d7288179 pkanavos
                 
406 d7288179 pkanavos
        }
407 d7288179 pkanavos
408 d7288179 pkanavos
        private void ShowError(AggregateException exception)
409 d7288179 pkanavos
        {
410 d7288179 pkanavos
            MessageView view;
411 d7288179 pkanavos
            if (exception.InnerException is RetryException)
412 d7288179 pkanavos
                view = new MessageView(exception.InnerException as RetryException);
413 d7288179 pkanavos
            else if (exception.InnerException is WebException)
414 d7288179 pkanavos
                view = new MessageView(exception.InnerException as WebException);
415 d7288179 pkanavos
            else
416 d7288179 pkanavos
                view = new MessageView(exception.InnerException);
417 d7288179 pkanavos
            view.ShowDialog();
418 d7288179 pkanavos
        }
419 d7288179 pkanavos
420 d7288179 pkanavos
421 d7288179 pkanavos
        protected ShellViewModel Shell { get; set; }
422 d7288179 pkanavos
423 d7288179 pkanavos
        private ObjectInfo _pithosFile;
424 d7288179 pkanavos
        public ObjectInfo PithosFile
425 d7288179 pkanavos
        {
426 d7288179 pkanavos
            get { return _pithosFile; }
427 d7288179 pkanavos
            set
428 d7288179 pkanavos
            {
429 d7288179 pkanavos
                _pithosFile = value;
430 d7288179 pkanavos
                
431 d7288179 pkanavos
                Permissions.Clear();
432 d7288179 pkanavos
                Tags.Clear();
433 d7288179 pkanavos
434 d7288179 pkanavos
                var perms=from permission in value.Permissions
435 d7288179 pkanavos
                            select new Permission(permission.Key, permission.Value);
436 d7288179 pkanavos
                perms.Apply(perm=>Permissions.Add(perm));
437 d7288179 pkanavos
                
438 d7288179 pkanavos
                var tags=from tag in value.Tags
439 d7288179 pkanavos
                             select new MetaValue(tag.Key, tag.Value);
440 d7288179 pkanavos
                tags.Apply(tag=>Tags.Add(tag));
441 d7288179 pkanavos
442 d7288179 pkanavos
                Title = String.Format("{0} Properties", value.Name);
443 d7288179 pkanavos
                Kind=value.Content_Type;
444 d7288179 pkanavos
                ShortSize = value.Bytes.ToByteSize();
445 d7288179 pkanavos
                Size = String.Format("{0} ({1:N0} bytes)", ShortSize, value.Bytes);
446 d7288179 pkanavos
                Where = value.Name.ToUnescapedString();
447 d7288179 pkanavos
                FileName = Uri.UnescapeDataString(Where.Split('/').Last());
448 d7288179 pkanavos
                Container = value.Container.ToUnescapedString();
449 d7288179 pkanavos
                Modified = value.Last_Modified;
450 d7288179 pkanavos
                ModifiedBy = value.ModifiedBy;
451 d7288179 pkanavos
                Version = value.Version??0;
452 d7288179 pkanavos
453 d7288179 pkanavos
                ContentDisposition = value.ContendDisposition;
454 d7288179 pkanavos
                ContentEncoding = value.ContentEncoding;
455 d7288179 pkanavos
                Manifest = value.Manifest;
456 d7288179 pkanavos
                IsPublic = value.IsPublic;
457 d7288179 pkanavos
                if (IsPublic)
458 d7288179 pkanavos
                    PublicUrl = String.Format("{0}/v1{1}", Shell.Accounts.First(account=>account.UserName==PithosFile.Account).SiteUri,value.PublicUrl);
459 d7288179 pkanavos
460 d7288179 pkanavos
                if (Directory.Exists(LocalFileName))
461 d7288179 pkanavos
                {
462 d7288179 pkanavos
                    FileIcon= new BitmapImage(new Uri("../Images/Folder.ico",UriKind.Relative));
463 d7288179 pkanavos
                }
464 d7288179 pkanavos
                else if (File.Exists(LocalFileName))
465 d7288179 pkanavos
                {
466 d7288179 pkanavos
                    using (var icon = Icon.ExtractAssociatedIcon(LocalFileName))
467 d7288179 pkanavos
                    {
468 d7288179 pkanavos
                        FileIcon = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty,
469 d7288179 pkanavos
                                                                       BitmapSizeOptions.FromEmptyOptions());
470 d7288179 pkanavos
                    }
471 d7288179 pkanavos
                }
472 d7288179 pkanavos
473 d7288179 pkanavos
                var status=Shell.GetFileStatus(LocalFileName);
474 d7288179 pkanavos
                SynchStatus = Enum.GetName(typeof (FileStatus), status);
475 d7288179 pkanavos
476 d7288179 pkanavos
477 d7288179 pkanavos
                NotifyOfPropertyChange(()=>PithosFile);
478 d7288179 pkanavos
                IsBusy = false;
479 d7288179 pkanavos
            }
480 d7288179 pkanavos
        }
481 d7288179 pkanavos
482 d7288179 pkanavos
        private MetaValue _currentTag;
483 d7288179 pkanavos
        public MetaValue CurrentTag
484 d7288179 pkanavos
        {
485 d7288179 pkanavos
            get { return _currentTag; }
486 d7288179 pkanavos
            set
487 d7288179 pkanavos
            {
488 d7288179 pkanavos
                _currentTag = (value==null)?new MetaValue() : value.Clone();
489 d7288179 pkanavos
                _currentTag.PropertyChanged += (o, e) => NotifyOfPropertyChange(() => CanAddTag);
490 d7288179 pkanavos
491 d7288179 pkanavos
                NotifyOfPropertyChange(()=>CurrentTag);
492 d7288179 pkanavos
                NotifyOfPropertyChange(() => CanAddTag);
493 d7288179 pkanavos
            }
494 d7288179 pkanavos
        }
495 d7288179 pkanavos
496 d7288179 pkanavos
        private readonly ObservableCollection<MetaValue> _tags ;
497 d7288179 pkanavos
        public ObservableCollection<MetaValue> Tags
498 d7288179 pkanavos
        {
499 d7288179 pkanavos
            get { return _tags;}
500 d7288179 pkanavos
        }
501 d7288179 pkanavos
502 d7288179 pkanavos
        private readonly ObservableCollection<Permission> _permissions ;
503 d7288179 pkanavos
        
504 d7288179 pkanavos
505 d7288179 pkanavos
        public ObservableCollection<Permission> Permissions
506 d7288179 pkanavos
        {
507 d7288179 pkanavos
            get { return _permissions; }
508 d7288179 pkanavos
        }
509 d7288179 pkanavos
510 2115e2a5 pkanavos
        public async Task Reload()
511 d7288179 pkanavos
        {
512 397b9100 pkanavos
            PithosFile=await Shell.RefreshObjectInfo(PithosFile);
513 d7288179 pkanavos
        }
514 d7288179 pkanavos
515 d7288179 pkanavos
        public override void CanClose(Action<bool> callback)
516 d7288179 pkanavos
        {
517 d7288179 pkanavos
            base.CanClose(callback);
518 d7288179 pkanavos
        }
519 d7288179 pkanavos
520 2115e2a5 pkanavos
        public async Task SaveChanges()
521 d7288179 pkanavos
        {
522 2115e2a5 pkanavos
            await DoSave();
523 d7288179 pkanavos
            TryClose();
524 d7288179 pkanavos
        }
525 d7288179 pkanavos
526 d7288179 pkanavos
        public void RejectChanges()
527 d7288179 pkanavos
        {
528 d7288179 pkanavos
            TryClose();
529 d7288179 pkanavos
        }
530 d7288179 pkanavos
531 d7288179 pkanavos
532 d7288179 pkanavos
        public bool CanApplyChanges
533 d7288179 pkanavos
        {
534 d7288179 pkanavos
            get { return TagsChanged || PermissionsChanged; }
535 d7288179 pkanavos
        }
536 d7288179 pkanavos
537 2115e2a5 pkanavos
        public async Task ApplyChanges()
538 d7288179 pkanavos
        {
539 2115e2a5 pkanavos
            await DoSave();
540 d7288179 pkanavos
        }
541 d7288179 pkanavos
542 2115e2a5 pkanavos
        private async Task DoSave()
543 d7288179 pkanavos
        {
544 d7288179 pkanavos
            try
545 d7288179 pkanavos
            {
546 d7288179 pkanavos
                IsBusy = true;
547 d7288179 pkanavos
                BusyMessage = "Updating Object Info ...";
548 d7288179 pkanavos
549 d7288179 pkanavos
                await TaskEx.Run(() =>{
550 d7288179 pkanavos
                    if (TagsChanged)
551 d7288179 pkanavos
                    {
552 d7288179 pkanavos
                        PithosFile.Tags = this.Tags.ToDictionary(tag => tag.Name, tag => tag.Value);
553 d7288179 pkanavos
                    }
554 d7288179 pkanavos
555 d7288179 pkanavos
                    if (PermissionsChanged)
556 d7288179 pkanavos
                    {
557 d7288179 pkanavos
                        PithosFile.Permissions =
558 d7288179 pkanavos
                            this.Permissions.ToDictionary(perm => perm.UserName, perm =>
559 d7288179 pkanavos
                                                                                (perm.Value.Trim()));
560 d7288179 pkanavos
                    }
561 d7288179 pkanavos
562 d7288179 pkanavos
                    PithosFile.ContendDisposition = ContentDisposition;
563 d7288179 pkanavos
                    PithosFile.ContentEncoding = ContentEncoding;
564 d7288179 pkanavos
                    PithosFile.Manifest = Manifest;
565 d7288179 pkanavos
                    PithosFile.IsPublic = IsPublic;
566 d7288179 pkanavos
567 d7288179 pkanavos
                    var monitor = Shell.Monitors[PithosFile.AccountKey];
568 d7288179 pkanavos
                    monitor.CloudClient.UpdateMetadata(PithosFile);
569 d7288179 pkanavos
570 d7288179 pkanavos
571 d7288179 pkanavos
                    TagsChanged = false;
572 d7288179 pkanavos
                    PermissionsChanged = false;
573 d7288179 pkanavos
                }).ConfigureAwait(false);
574 d7288179 pkanavos
            }
575 d7288179 pkanavos
            finally
576 d7288179 pkanavos
            {
577 d7288179 pkanavos
                IsBusy = false;
578 d7288179 pkanavos
                TagsChanged = false;
579 d7288179 pkanavos
                PermissionsChanged = false;
580 d7288179 pkanavos
            }
581 d7288179 pkanavos
582 d7288179 pkanavos
        }
583 d7288179 pkanavos
584 d7288179 pkanavos
585 d7288179 pkanavos
    }
586 d7288179 pkanavos
}