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