Statistics
| Branch: | Revision:

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
}