root / trunk / Pithos.Client.WPF / FileProperties / FilePropertiesViewModel.cs @ aba9e6d9
History | View | Annotate | Download (7.5 kB)
1 | 4d301e8e | Panagiotis Kanavos | // ----------------------------------------------------------------------- |
---|---|---|---|
2 | 4d301e8e | Panagiotis Kanavos | // <copyright file="FilePropertiesViewModel.cs" company="Microsoft"> |
3 | 4d301e8e | Panagiotis Kanavos | // TODO: Update copyright text. |
4 | 4d301e8e | Panagiotis Kanavos | // </copyright> |
5 | 4d301e8e | Panagiotis Kanavos | // ----------------------------------------------------------------------- |
6 | 4d301e8e | Panagiotis Kanavos | |
7 | 7b0a5fec | Panagiotis Kanavos | using System.Collections; |
8 | 9aa8abad | Panagiotis Kanavos | using System.Collections.Concurrent; |
9 | 9aa8abad | Panagiotis Kanavos | using System.Collections.ObjectModel; |
10 | aba9e6d9 | Panagiotis Kanavos | using System.Collections.Specialized; |
11 | 4d301e8e | Panagiotis Kanavos | using System.ComponentModel.Composition; |
12 | 7b0a5fec | Panagiotis Kanavos | using System.Diagnostics; |
13 | 7b0a5fec | Panagiotis Kanavos | using System.Diagnostics.Contracts; |
14 | 7b0a5fec | Panagiotis Kanavos | using System.Drawing; |
15 | 7b0a5fec | Panagiotis Kanavos | using System.Windows; |
16 | 7b0a5fec | Panagiotis Kanavos | using System.Windows.Interop; |
17 | 7b0a5fec | Panagiotis Kanavos | using System.Windows.Media.Imaging; |
18 | 4d301e8e | Panagiotis Kanavos | using Caliburn.Micro; |
19 | 42800be8 | Panagiotis Kanavos | using Pithos.Client.WPF.FileProperties; |
20 | aba9e6d9 | Panagiotis Kanavos | using Pithos.Client.WPF.Properties; |
21 | 9aa8abad | Panagiotis Kanavos | using Pithos.Interfaces; |
22 | aba9e6d9 | Panagiotis Kanavos | using Pithos.Network; |
23 | 4d301e8e | Panagiotis Kanavos | |
24 | 4d301e8e | Panagiotis Kanavos | namespace Pithos.Client.WPF |
25 | 4d301e8e | Panagiotis Kanavos | { |
26 | 4d301e8e | Panagiotis Kanavos | using System; |
27 | 4d301e8e | Panagiotis Kanavos | using System.Collections.Generic; |
28 | 4d301e8e | Panagiotis Kanavos | using System.Linq; |
29 | 4d301e8e | Panagiotis Kanavos | using System.Text; |
30 | 4d301e8e | Panagiotis Kanavos | |
31 | 4d301e8e | Panagiotis Kanavos | /// <summary> |
32 | 4d301e8e | Panagiotis Kanavos | /// TODO: Update summary. |
33 | 4d301e8e | Panagiotis Kanavos | /// </summary> |
34 | 4d301e8e | Panagiotis Kanavos | [Export(typeof(FilePropertiesViewModel))] |
35 | 42800be8 | Panagiotis Kanavos | public class FilePropertiesViewModel : Screen |
36 | 4d301e8e | Panagiotis Kanavos | { |
37 | 7b0a5fec | Panagiotis Kanavos | private string _title; |
38 | 7b0a5fec | Panagiotis Kanavos | public string Title |
39 | 7b0a5fec | Panagiotis Kanavos | { |
40 | 7b0a5fec | Panagiotis Kanavos | get { return _title; } |
41 | 7b0a5fec | Panagiotis Kanavos | set |
42 | 7b0a5fec | Panagiotis Kanavos | { |
43 | 7b0a5fec | Panagiotis Kanavos | _title = value; |
44 | 7b0a5fec | Panagiotis Kanavos | NotifyOfPropertyChange(()=>Title); |
45 | 7b0a5fec | Panagiotis Kanavos | } |
46 | 7b0a5fec | Panagiotis Kanavos | } |
47 | 7b0a5fec | Panagiotis Kanavos | |
48 | aba9e6d9 | Panagiotis Kanavos | |
49 | aba9e6d9 | Panagiotis Kanavos | private bool _isPublic; |
50 | aba9e6d9 | Panagiotis Kanavos | public bool IsPublic |
51 | aba9e6d9 | Panagiotis Kanavos | { |
52 | aba9e6d9 | Panagiotis Kanavos | get { return _isPublic; } |
53 | aba9e6d9 | Panagiotis Kanavos | set |
54 | aba9e6d9 | Panagiotis Kanavos | { |
55 | aba9e6d9 | Panagiotis Kanavos | _isPublic = value; |
56 | aba9e6d9 | Panagiotis Kanavos | NotifyOfPropertyChange(()=>IsPublic); |
57 | aba9e6d9 | Panagiotis Kanavos | } |
58 | aba9e6d9 | Panagiotis Kanavos | } |
59 | aba9e6d9 | Panagiotis Kanavos | |
60 | aba9e6d9 | Panagiotis Kanavos | private string _contentDisposition; |
61 | aba9e6d9 | Panagiotis Kanavos | public string ContentDisposition |
62 | aba9e6d9 | Panagiotis Kanavos | { |
63 | aba9e6d9 | Panagiotis Kanavos | get { return _contentDisposition; } |
64 | aba9e6d9 | Panagiotis Kanavos | set |
65 | aba9e6d9 | Panagiotis Kanavos | { |
66 | aba9e6d9 | Panagiotis Kanavos | _contentDisposition = value; |
67 | aba9e6d9 | Panagiotis Kanavos | NotifyOfPropertyChange(() => ContentDisposition); |
68 | aba9e6d9 | Panagiotis Kanavos | } |
69 | aba9e6d9 | Panagiotis Kanavos | } |
70 | aba9e6d9 | Panagiotis Kanavos | |
71 | aba9e6d9 | Panagiotis Kanavos | private string _contentEncoding; |
72 | aba9e6d9 | Panagiotis Kanavos | public string ContentEncoding |
73 | aba9e6d9 | Panagiotis Kanavos | { |
74 | aba9e6d9 | Panagiotis Kanavos | get { return _contentEncoding; } |
75 | aba9e6d9 | Panagiotis Kanavos | set |
76 | aba9e6d9 | Panagiotis Kanavos | { |
77 | aba9e6d9 | Panagiotis Kanavos | _contentEncoding = value; |
78 | aba9e6d9 | Panagiotis Kanavos | NotifyOfPropertyChange(() => ContentEncoding); |
79 | aba9e6d9 | Panagiotis Kanavos | } |
80 | aba9e6d9 | Panagiotis Kanavos | } |
81 | aba9e6d9 | Panagiotis Kanavos | |
82 | aba9e6d9 | Panagiotis Kanavos | |
83 | aba9e6d9 | Panagiotis Kanavos | private string _manifest; |
84 | aba9e6d9 | Panagiotis Kanavos | public string Manifest |
85 | aba9e6d9 | Panagiotis Kanavos | { |
86 | aba9e6d9 | Panagiotis Kanavos | get { return _manifest; } |
87 | aba9e6d9 | Panagiotis Kanavos | set |
88 | aba9e6d9 | Panagiotis Kanavos | { |
89 | aba9e6d9 | Panagiotis Kanavos | _manifest = value; |
90 | aba9e6d9 | Panagiotis Kanavos | NotifyOfPropertyChange(() => Manifest); |
91 | aba9e6d9 | Panagiotis Kanavos | } |
92 | aba9e6d9 | Panagiotis Kanavos | } |
93 | aba9e6d9 | Panagiotis Kanavos | |
94 | 7b0a5fec | Panagiotis Kanavos | public string Kind { get; set; } |
95 | 7b0a5fec | Panagiotis Kanavos | public string Size { get; set; } |
96 | 7b0a5fec | Panagiotis Kanavos | public string ShortSize { get; set; } |
97 | 7b0a5fec | Panagiotis Kanavos | public string Where { get; set; } |
98 | 7b0a5fec | Panagiotis Kanavos | public DateTime Modified { get; set; } |
99 | 7b0a5fec | Panagiotis Kanavos | public string ModifiedBy { get; set; } |
100 | 7b0a5fec | Panagiotis Kanavos | public long Version { get; set; } |
101 | 7b0a5fec | Panagiotis Kanavos | protected string LocalFileName { get; set; } |
102 | 7b0a5fec | Panagiotis Kanavos | public BitmapSource FileIcon { get; set; } |
103 | aba9e6d9 | Panagiotis Kanavos | public string PublicUrl { get; set; } |
104 | 9aa8abad | Panagiotis Kanavos | |
105 | 7b0a5fec | Panagiotis Kanavos | public string FileName { get; set; } |
106 | 7b0a5fec | Panagiotis Kanavos | public string Container { get; set; } |
107 | 7b0a5fec | Panagiotis Kanavos | |
108 | aba9e6d9 | Panagiotis Kanavos | public bool TagsChanged { get; private set; } |
109 | aba9e6d9 | Panagiotis Kanavos | public bool PermissionsChanged { get; private set; } |
110 | aba9e6d9 | Panagiotis Kanavos | |
111 | 7b0a5fec | Panagiotis Kanavos | public FilePropertiesViewModel(ShellViewModel shell,ObjectInfo pithosFile,string localFileName) |
112 | 9aa8abad | Panagiotis Kanavos | { |
113 | 7b0a5fec | Panagiotis Kanavos | if (shell==null) |
114 | 7b0a5fec | Panagiotis Kanavos | throw new ArgumentNullException("shell"); |
115 | 7b0a5fec | Panagiotis Kanavos | if (pithosFile==null) |
116 | 7b0a5fec | Panagiotis Kanavos | throw new ArgumentNullException("pithosFile"); |
117 | 7b0a5fec | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(localFileName)) |
118 | 7b0a5fec | Panagiotis Kanavos | throw new ArgumentNullException("localFileName"); |
119 | 7b0a5fec | Panagiotis Kanavos | Contract.EndContractBlock(); |
120 | 7b0a5fec | Panagiotis Kanavos | |
121 | aba9e6d9 | Panagiotis Kanavos | |
122 | aba9e6d9 | Panagiotis Kanavos | _tags = new ObservableCollection<Tag>(); |
123 | aba9e6d9 | Panagiotis Kanavos | _tags.CollectionChanged += (sender, evt) => { TagsChanged = true; }; |
124 | aba9e6d9 | Panagiotis Kanavos | _permissions = new ObservableCollection<Permission>(); |
125 | aba9e6d9 | Panagiotis Kanavos | _permissions.CollectionChanged += (sender, evt) => { PermissionsChanged = true; }; |
126 | aba9e6d9 | Panagiotis Kanavos | |
127 | 9aa8abad | Panagiotis Kanavos | Shell = shell; |
128 | 7b0a5fec | Panagiotis Kanavos | LocalFileName = localFileName; |
129 | 9aa8abad | Panagiotis Kanavos | PithosFile = pithosFile; |
130 | 7b0a5fec | Panagiotis Kanavos | Title = String.Format("{0} Properties", pithosFile.Name); |
131 | 9aa8abad | Panagiotis Kanavos | } |
132 | 9aa8abad | Panagiotis Kanavos | |
133 | aba9e6d9 | Panagiotis Kanavos | |
134 | 7b0a5fec | Panagiotis Kanavos | |
135 | 9aa8abad | Panagiotis Kanavos | protected ShellViewModel Shell { get; set; } |
136 | 9aa8abad | Panagiotis Kanavos | |
137 | 9aa8abad | Panagiotis Kanavos | private ObjectInfo _pithosFile; |
138 | 9aa8abad | Panagiotis Kanavos | public ObjectInfo PithosFile |
139 | 9aa8abad | Panagiotis Kanavos | { |
140 | 9aa8abad | Panagiotis Kanavos | get { return _pithosFile; } |
141 | 9aa8abad | Panagiotis Kanavos | set |
142 | 9aa8abad | Panagiotis Kanavos | { |
143 | 9aa8abad | Panagiotis Kanavos | _pithosFile = value; |
144 | 9aa8abad | Panagiotis Kanavos | |
145 | 27361404 | Panagiotis Kanavos | Permissions.Clear(); |
146 | 27361404 | Panagiotis Kanavos | Tags.Clear(); |
147 | 27361404 | Panagiotis Kanavos | |
148 | 27361404 | Panagiotis Kanavos | var perms=from permission in value.Permissions |
149 | 27361404 | Panagiotis Kanavos | select new Permission(permission.Key, permission.Value); |
150 | 27361404 | Panagiotis Kanavos | perms.Apply(perm=>Permissions.Add(perm)); |
151 | 27361404 | Panagiotis Kanavos | |
152 | 27361404 | Panagiotis Kanavos | var tags=from tag in value.Tags |
153 | 27361404 | Panagiotis Kanavos | select new Tag(tag.Key, tag.Value); |
154 | 27361404 | Panagiotis Kanavos | tags.Apply(tag=>Tags.Add(tag)); |
155 | 27361404 | Panagiotis Kanavos | |
156 | 7b0a5fec | Panagiotis Kanavos | Kind=value.Content_Type; |
157 | 42800be8 | Panagiotis Kanavos | ShortSize = value.Bytes.ToByteSize(); |
158 | 7b0a5fec | Panagiotis Kanavos | Size = String.Format("{0} ({1:N0} bytes)", ShortSize, value.Bytes); |
159 | 7b0a5fec | Panagiotis Kanavos | Where = Uri.UnescapeDataString(value.Name); |
160 | 7b0a5fec | Panagiotis Kanavos | FileName = Uri.UnescapeDataString(value.Name.Split('/').Last()); |
161 | 7b0a5fec | Panagiotis Kanavos | Container = value.Container; |
162 | 7b0a5fec | Panagiotis Kanavos | Modified = value.Last_Modified; |
163 | 7b0a5fec | Panagiotis Kanavos | ModifiedBy = value.ModifiedBy; |
164 | 7b0a5fec | Panagiotis Kanavos | Version = value.Version??0; |
165 | 7b0a5fec | Panagiotis Kanavos | |
166 | aba9e6d9 | Panagiotis Kanavos | ContentDisposition = value.ContendDisposition; |
167 | aba9e6d9 | Panagiotis Kanavos | ContentEncoding = value.ContentEncoding; |
168 | aba9e6d9 | Panagiotis Kanavos | Manifest = value.Manifest; |
169 | aba9e6d9 | Panagiotis Kanavos | IsPublic = value.IsPublic; |
170 | aba9e6d9 | Panagiotis Kanavos | |
171 | aba9e6d9 | Panagiotis Kanavos | PublicUrl = String.Format("{0}/v1{1}", Settings.Default.PithosSite ,value.PublicUrl); |
172 | aba9e6d9 | Panagiotis Kanavos | |
173 | 7b0a5fec | Panagiotis Kanavos | using (var icon = Icon.ExtractAssociatedIcon(LocalFileName)) |
174 | 7b0a5fec | Panagiotis Kanavos | { |
175 | 7b0a5fec | Panagiotis Kanavos | FileIcon = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, |
176 | 7b0a5fec | Panagiotis Kanavos | BitmapSizeOptions.FromEmptyOptions()); |
177 | 7b0a5fec | Panagiotis Kanavos | } |
178 | 9aa8abad | Panagiotis Kanavos | NotifyOfPropertyChange(()=>PithosFile); |
179 | 9aa8abad | Panagiotis Kanavos | } |
180 | 9aa8abad | Panagiotis Kanavos | } |
181 | 7b0a5fec | Panagiotis Kanavos | |
182 | 9aa8abad | Panagiotis Kanavos | |
183 | aba9e6d9 | Panagiotis Kanavos | private readonly ObservableCollection<Tag> _tags ; |
184 | 27361404 | Panagiotis Kanavos | public ObservableCollection<Tag> Tags |
185 | 9aa8abad | Panagiotis Kanavos | { |
186 | aba9e6d9 | Panagiotis Kanavos | get { return _tags;} |
187 | 9aa8abad | Panagiotis Kanavos | } |
188 | 9aa8abad | Panagiotis Kanavos | |
189 | aba9e6d9 | Panagiotis Kanavos | private readonly ObservableCollection<Permission> _permissions ; |
190 | aba9e6d9 | Panagiotis Kanavos | |
191 | aba9e6d9 | Panagiotis Kanavos | |
192 | 27361404 | Panagiotis Kanavos | public ObservableCollection<Permission> Permissions |
193 | 27361404 | Panagiotis Kanavos | { |
194 | 27361404 | Panagiotis Kanavos | get { return _permissions; } |
195 | 27361404 | Panagiotis Kanavos | } |
196 | 9aa8abad | Panagiotis Kanavos | |
197 | 20e9a378 | Panagiotis Kanavos | public void Reload() |
198 | 9aa8abad | Panagiotis Kanavos | { |
199 | 7b0a5fec | Panagiotis Kanavos | PithosFile=Shell.RefreshObjectInfo(PithosFile); |
200 | 9aa8abad | Panagiotis Kanavos | } |
201 | 9aa8abad | Panagiotis Kanavos | |
202 | 9aa8abad | Panagiotis Kanavos | public override void CanClose(Action<bool> callback) |
203 | 9aa8abad | Panagiotis Kanavos | { |
204 | 9aa8abad | Panagiotis Kanavos | base.CanClose(callback); |
205 | 9aa8abad | Panagiotis Kanavos | } |
206 | 9aa8abad | Panagiotis Kanavos | |
207 | 9aa8abad | Panagiotis Kanavos | public void SaveChanges() |
208 | 9aa8abad | Panagiotis Kanavos | { |
209 | 9aa8abad | Panagiotis Kanavos | DoSave(); |
210 | 7b0a5fec | Panagiotis Kanavos | TryClose(); |
211 | 9aa8abad | Panagiotis Kanavos | } |
212 | 9aa8abad | Panagiotis Kanavos | |
213 | 9aa8abad | Panagiotis Kanavos | public void RejectChanges() |
214 | 9aa8abad | Panagiotis Kanavos | { |
215 | 7b0a5fec | Panagiotis Kanavos | TryClose(); |
216 | 9aa8abad | Panagiotis Kanavos | } |
217 | 9aa8abad | Panagiotis Kanavos | |
218 | 9aa8abad | Panagiotis Kanavos | public void ApplyChanges() |
219 | 9aa8abad | Panagiotis Kanavos | { |
220 | 9aa8abad | Panagiotis Kanavos | DoSave(); |
221 | 9aa8abad | Panagiotis Kanavos | } |
222 | 9aa8abad | Panagiotis Kanavos | |
223 | 9aa8abad | Panagiotis Kanavos | private void DoSave() |
224 | 7e26c075 | Panagiotis Kanavos | { |
225 | aba9e6d9 | Panagiotis Kanavos | if (TagsChanged) |
226 | aba9e6d9 | Panagiotis Kanavos | { |
227 | aba9e6d9 | Panagiotis Kanavos | PithosFile.Tags = this.Tags.ToDictionary(tag => tag.Name, tag => tag.Value); |
228 | aba9e6d9 | Panagiotis Kanavos | } |
229 | 7e26c075 | Panagiotis Kanavos | |
230 | aba9e6d9 | Panagiotis Kanavos | if (PermissionsChanged) |
231 | aba9e6d9 | Panagiotis Kanavos | { |
232 | aba9e6d9 | Panagiotis Kanavos | PithosFile.Permissions = this.Permissions.ToDictionary(perm => perm.UserName, perm => perm.Value); |
233 | aba9e6d9 | Panagiotis Kanavos | } |
234 | aba9e6d9 | Panagiotis Kanavos | |
235 | aba9e6d9 | Panagiotis Kanavos | PithosFile.ContendDisposition = ContentDisposition; |
236 | aba9e6d9 | Panagiotis Kanavos | PithosFile.ContentEncoding = ContentEncoding; |
237 | aba9e6d9 | Panagiotis Kanavos | PithosFile.Manifest = Manifest; |
238 | aba9e6d9 | Panagiotis Kanavos | PithosFile.IsPublic = IsPublic; |
239 | aba9e6d9 | Panagiotis Kanavos | |
240 | aba9e6d9 | Panagiotis Kanavos | var monitor = Shell.Monitors[PithosFile.Account]; |
241 | aba9e6d9 | Panagiotis Kanavos | monitor.CloudClient.UpdateMetadata(PithosFile); |
242 | aba9e6d9 | Panagiotis Kanavos | |
243 | aba9e6d9 | Panagiotis Kanavos | |
244 | aba9e6d9 | Panagiotis Kanavos | TagsChanged = false; |
245 | aba9e6d9 | Panagiotis Kanavos | PermissionsChanged = false; |
246 | 7e26c075 | Panagiotis Kanavos | } |
247 | 9aa8abad | Panagiotis Kanavos | |
248 | 7b0a5fec | Panagiotis Kanavos | |
249 | 4d301e8e | Panagiotis Kanavos | } |
250 | 4d301e8e | Panagiotis Kanavos | } |