root / trunk / Pithos.OFM / CloudFilesViewModel.cs @ ac8b664d
History | View | Annotate | Download (3.6 kB)
1 | c5ffc01d | pkanavos | using System; |
---|---|---|---|
2 | c5ffc01d | pkanavos | using System.Collections.Generic; |
3 | 71374945 | pkanavos | using System.ComponentModel.Composition; |
4 | c5ffc01d | pkanavos | using System.Linq; |
5 | c5ffc01d | pkanavos | using System.Text; |
6 | 71374945 | pkanavos | using System.Threading.Tasks; |
7 | 71374945 | pkanavos | using System.Windows; |
8 | 71374945 | pkanavos | using Caliburn.Micro; |
9 | 71374945 | pkanavos | using Pithos.Network; |
10 | c5ffc01d | pkanavos | |
11 | c5ffc01d | pkanavos | namespace Pithos.OFM |
12 | c5ffc01d | pkanavos | { |
13 | 71374945 | pkanavos | [Export] |
14 | 71374945 | pkanavos | public class CloudFilesViewModel:Screen |
15 | c5ffc01d | pkanavos | { |
16 | 71374945 | pkanavos | public bool IsCloudBusy |
17 | 71374945 | pkanavos | { |
18 | 71374945 | pkanavos | get { return _isCloudBusy; } |
19 | 71374945 | pkanavos | set |
20 | 71374945 | pkanavos | { |
21 | 71374945 | pkanavos | if (value.Equals(_isCloudBusy)) return; |
22 | 71374945 | pkanavos | _isCloudBusy = value; |
23 | 71374945 | pkanavos | NotifyOfPropertyChange(() => IsCloudBusy); |
24 | 71374945 | pkanavos | } |
25 | 71374945 | pkanavos | } |
26 | 71374945 | pkanavos | |
27 | 71374945 | pkanavos | public bool IsCloudSelected |
28 | 71374945 | pkanavos | { |
29 | 71374945 | pkanavos | get { return _isCloudSelected; } |
30 | 71374945 | pkanavos | set |
31 | 71374945 | pkanavos | { |
32 | 71374945 | pkanavos | if (value.Equals(_isCloudSelected)) return; |
33 | 71374945 | pkanavos | _isCloudSelected = value; |
34 | 71374945 | pkanavos | NotifyOfPropertyChange(() => IsCloudSelected); |
35 | 71374945 | pkanavos | } |
36 | 71374945 | pkanavos | } |
37 | 71374945 | pkanavos | |
38 | 71374945 | pkanavos | private ObjectRecord _selectedCloudFile; |
39 | 71374945 | pkanavos | |
40 | 71374945 | pkanavos | public ObjectRecord SelectedCloudFile |
41 | 71374945 | pkanavos | { |
42 | 71374945 | pkanavos | get { return _selectedCloudFile; } |
43 | 71374945 | pkanavos | set |
44 | 71374945 | pkanavos | { |
45 | 71374945 | pkanavos | if (Equals(value, _selectedCloudFile)) return; |
46 | 71374945 | pkanavos | _selectedCloudFile = value; |
47 | 71374945 | pkanavos | NotifyOfPropertyChange(() => SelectedCloudFile); |
48 | 71374945 | pkanavos | NotifyOfPropertyChange(() => CanDownload); |
49 | 71374945 | pkanavos | IsCloudSelected = true; |
50 | 71374945 | pkanavos | } |
51 | 71374945 | pkanavos | } |
52 | 71374945 | pkanavos | |
53 | 71374945 | pkanavos | public bool CanDownload { get { return SelectedCloudFile != null; } } |
54 | 71374945 | pkanavos | |
55 | 71374945 | pkanavos | public void SelectCloudFile(RoutedPropertyChangedEventArgs<object> file) |
56 | 71374945 | pkanavos | { |
57 | 71374945 | pkanavos | SelectedCloudFile = (ObjectRecord)file.NewValue; |
58 | 71374945 | pkanavos | } |
59 | 71374945 | pkanavos | |
60 | 71374945 | pkanavos | |
61 | 71374945 | pkanavos | public async Task LoadCloudFiles(string accountName, string apiKey, string serverUrl) |
62 | 71374945 | pkanavos | { |
63 | 71374945 | pkanavos | await TaskEx.Yield(); |
64 | 71374945 | pkanavos | IsCloudBusy = true; |
65 | 71374945 | pkanavos | CloudBusyMessage = "Checking Pithos ..."; |
66 | 71374945 | pkanavos | var client = new CloudFilesClient(accountName, apiKey) { AuthenticationUrl = serverUrl, UsePithos = true }; |
67 | 71374945 | pkanavos | await client.Authenticate().ConfigureAwait(false); |
68 | 71374945 | pkanavos | |
69 | 71374945 | pkanavos | var containerInfos = await client.ListContainers(accountName).ConfigureAwait(false); |
70 | 71374945 | pkanavos | var infos = from container in containerInfos |
71 | 71374945 | pkanavos | from info in client.ListObjects(accountName, container.Name) |
72 | 71374945 | pkanavos | select info; |
73 | 71374945 | pkanavos | //Force enumeration here to get all items. Otherwise we get only the containers |
74 | 71374945 | pkanavos | //and the objects will be retrieved by the UI thread during binding |
75 | 71374945 | pkanavos | var rootItem = new ObjectRecord() |
76 | 71374945 | pkanavos | { |
77 | 83999acf | George Pantazis | |
78 | 71374945 | pkanavos | DisplayName = accountName, |
79 | 71374945 | pkanavos | Directories = infos.ToTree() |
80 | 71374945 | pkanavos | }; |
81 | 71374945 | pkanavos | |
82 | 71374945 | pkanavos | CloudInfos = rootItem; |
83 | 71374945 | pkanavos | IsCloudBusy = false; |
84 | 71374945 | pkanavos | } |
85 | 71374945 | pkanavos | |
86 | 71374945 | pkanavos | |
87 | 71374945 | pkanavos | public string CloudBusyMessage |
88 | 71374945 | pkanavos | { |
89 | 71374945 | pkanavos | get { return _cloudBusyMessage; } |
90 | 71374945 | pkanavos | set |
91 | 71374945 | pkanavos | { |
92 | 71374945 | pkanavos | if (value == _cloudBusyMessage) return; |
93 | 71374945 | pkanavos | _cloudBusyMessage = value; |
94 | 71374945 | pkanavos | NotifyOfPropertyChange(() => CloudBusyMessage); |
95 | 71374945 | pkanavos | } |
96 | 71374945 | pkanavos | } |
97 | 71374945 | pkanavos | |
98 | 71374945 | pkanavos | public IEnumerable<ObjectRecord> CloudInfos |
99 | 71374945 | pkanavos | { |
100 | 71374945 | pkanavos | get { return _cloudInfos; } |
101 | 71374945 | pkanavos | set |
102 | 71374945 | pkanavos | { |
103 | 71374945 | pkanavos | if (Equals(value, _cloudInfos)) return; |
104 | 71374945 | pkanavos | _cloudInfos = value; |
105 | 71374945 | pkanavos | NotifyOfPropertyChange(() => CloudInfos); |
106 | 71374945 | pkanavos | } |
107 | 71374945 | pkanavos | } |
108 | 71374945 | pkanavos | |
109 | 71374945 | pkanavos | |
110 | 71374945 | pkanavos | private IEnumerable<ObjectRecord> _cloudInfos; |
111 | 71374945 | pkanavos | |
112 | 71374945 | pkanavos | private bool _isCloudBusy; |
113 | 71374945 | pkanavos | private string _cloudBusyMessage; |
114 | 71374945 | pkanavos | private bool _isCloudSelected; |
115 | 71374945 | pkanavos | |
116 | 71374945 | pkanavos | |
117 | c5ffc01d | pkanavos | } |
118 | c5ffc01d | pkanavos | } |