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 | } |