Revision 71374945 trunk/Pithos.OFM/CloudFilesViewModel.cs

b/trunk/Pithos.OFM/CloudFilesViewModel.cs
1 1
´╗┐using System;
2 2
using System.Collections.Generic;
3
using System.ComponentModel.Composition;
3 4
using System.Linq;
4 5
using System.Text;
6
using System.Threading.Tasks;
7
using System.Windows;
8
using Caliburn.Micro;
9
using Pithos.Network;
5 10

  
6 11
namespace Pithos.OFM
7 12
{
8
    class CloudFilesViewModel
13
    [Export]
14
    public class CloudFilesViewModel:Screen
9 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

  
10 116
    }
11 117
}

Also available in: Unified diff