Statistics
| Branch: | Revision:

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
}