root / snf-cyclades-app / synnefo / ui / static / snf / js / glance_models.js @ 9ccb70fd
History | View | Annotate | Download (4.1 kB)
1 | 1a947bb7 | Kostas Papadimitriou | ;(function(root){
|
---|---|---|---|
2 | 1a947bb7 | Kostas Papadimitriou | |
3 | 1a947bb7 | Kostas Papadimitriou | // root
|
4 | 1a947bb7 | Kostas Papadimitriou | var root = root;
|
5 | 1a947bb7 | Kostas Papadimitriou | |
6 | 1a947bb7 | Kostas Papadimitriou | // setup namepsaces
|
7 | 1a947bb7 | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
8 | 1a947bb7 | Kostas Papadimitriou | var glance = snf.glance = snf.glance || {};
|
9 | 1a947bb7 | Kostas Papadimitriou | var models = glance.models = glance.models || {}
|
10 | 1a947bb7 | Kostas Papadimitriou | var storage = glance.storage = glance.storage || {};
|
11 | 1a947bb7 | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
12 | 1a947bb7 | Kostas Papadimitriou | |
13 | 1a947bb7 | Kostas Papadimitriou | // shortcuts
|
14 | 1a947bb7 | Kostas Papadimitriou | var bb = root.Backbone;
|
15 | 1a947bb7 | Kostas Papadimitriou | var slice = Array.prototype.slice
|
16 | 1a947bb7 | Kostas Papadimitriou | |
17 | 258235f4 | Kostas Papadimitriou | models.GlanceImage = snf.models.Image.extend({ |
18 | 258235f4 | Kostas Papadimitriou | api_type: 'glance', |
19 | 1a947bb7 | Kostas Papadimitriou | |
20 | 258235f4 | Kostas Papadimitriou | get_size: function() { |
21 | 7d98da49 | Kostas Papadimitriou | return this.get('size') / 1024 / 1024; |
22 | 258235f4 | Kostas Papadimitriou | }, |
23 | ea223582 | Kostas Papadimitriou | |
24 | 258235f4 | Kostas Papadimitriou | get_readable_size: function() { |
25 | 30b6f316 | Kostas Papadimitriou | return this.get('size') > 0 ? util.readablizeBytes(this.get('size')) : "unknown"; |
26 | 258235f4 | Kostas Papadimitriou | }, |
27 | 30b6f316 | Kostas Papadimitriou | |
28 | 30b6f316 | Kostas Papadimitriou | display_size: function() { |
29 | 30b6f316 | Kostas Papadimitriou | return this.get_readable_size(); |
30 | 30b6f316 | Kostas Papadimitriou | } |
31 | babfdb9b | Kostas Papadimitriou | |
32 | 1a947bb7 | Kostas Papadimitriou | }) |
33 | 1a947bb7 | Kostas Papadimitriou | |
34 | 258235f4 | Kostas Papadimitriou | models.GlanceImages = snf.models.Images.extend({ |
35 | 258235f4 | Kostas Papadimitriou | model: models.GlanceImage,
|
36 | ea223582 | Kostas Papadimitriou | api_type: 'glance', |
37 | d7612b6e | Kostas Papadimitriou | fallback_service: snf.models.Images,
|
38 | d7612b6e | Kostas Papadimitriou | |
39 | ea223582 | Kostas Papadimitriou | type_selections: {'personal':'My images', |
40 | ea223582 | Kostas Papadimitriou | 'shared': 'Shared with me', |
41 | ea223582 | Kostas Papadimitriou | 'public': 'Public'}, |
42 | ea223582 | Kostas Papadimitriou | type_selections_order: ['system', 'personal', 'shared', 'public'], |
43 | 30b6f316 | Kostas Papadimitriou | display_metadata: ['created_at', 'updated_at', 'filename', 'format', |
44 | 30b6f316 | Kostas Papadimitriou | 'size', 'status'], |
45 | 258235f4 | Kostas Papadimitriou | read_method: 'head', |
46 | 258235f4 | Kostas Papadimitriou | |
47 | 258235f4 | Kostas Papadimitriou | // custom glance api parser
|
48 | 258235f4 | Kostas Papadimitriou | parse: function (resp, xhr) { |
49 | 258235f4 | Kostas Papadimitriou | if (_.isArray(resp)) {
|
50 | 258235f4 | Kostas Papadimitriou | resp = {'images': {'values': resp }}; |
51 | 258235f4 | Kostas Papadimitriou | } |
52 | 258235f4 | Kostas Papadimitriou | return models.GlanceImages.__super__.parse.call(this, resp, xhr); |
53 | 258235f4 | Kostas Papadimitriou | }, |
54 | 258235f4 | Kostas Papadimitriou | |
55 | 258235f4 | Kostas Papadimitriou | _read_image_from_request: function(image, msg, xhr) { |
56 | 258235f4 | Kostas Papadimitriou | var img = {};
|
57 | 258235f4 | Kostas Papadimitriou | img['metadata'] = {values:{}}; |
58 | 258235f4 | Kostas Papadimitriou | |
59 | 258235f4 | Kostas Papadimitriou | var headers = snf.util.parseHeaders(xhr.getAllResponseHeaders().toLowerCase());
|
60 | 258235f4 | Kostas Papadimitriou | |
61 | 258235f4 | Kostas Papadimitriou | _.each(headers, function(value, key) {
|
62 | 258235f4 | Kostas Papadimitriou | if (key.indexOf("x-image-meta") == -1) { |
63 | 258235f4 | Kostas Papadimitriou | return
|
64 | 258235f4 | Kostas Papadimitriou | } |
65 | 258235f4 | Kostas Papadimitriou | |
66 | 258235f4 | Kostas Papadimitriou | if (key.indexOf("x-image-meta-property") == -1) { |
67 | 258235f4 | Kostas Papadimitriou | img[key.replace("x-image-meta-","").replace(/-/g,"_")] = _.trim(value); |
68 | 258235f4 | Kostas Papadimitriou | } else {
|
69 | 258235f4 | Kostas Papadimitriou | img.metadata.values[key.replace('x-image-meta-property-',"").replace(/-/g,"_")] = _.trim(value); |
70 | 258235f4 | Kostas Papadimitriou | } |
71 | 258235f4 | Kostas Papadimitriou | |
72 | 258235f4 | Kostas Papadimitriou | }) |
73 | 258235f4 | Kostas Papadimitriou | |
74 | 258235f4 | Kostas Papadimitriou | return img;
|
75 | 258235f4 | Kostas Papadimitriou | }, |
76 | ea223582 | Kostas Papadimitriou | |
77 | ea223582 | Kostas Papadimitriou | parse_meta: function(img) { |
78 | ea223582 | Kostas Papadimitriou | if (img.properties) {
|
79 | ea223582 | Kostas Papadimitriou | img.metadata = {}; |
80 | ea223582 | Kostas Papadimitriou | img.metadata.values = img.properties; |
81 | ea223582 | Kostas Papadimitriou | } |
82 | bbbceeea | Kostas Papadimitriou | |
83 | bbbceeea | Kostas Papadimitriou | // fixes plankton regression (returns lowercase meta keys)
|
84 | bbbceeea | Kostas Papadimitriou | if (img.metadata.values.os && !img.metadata.values.OS) {
|
85 | bbbceeea | Kostas Papadimitriou | img.metadata.values.OS = img.metadata.values.os; |
86 | bbbceeea | Kostas Papadimitriou | } |
87 | bbbceeea | Kostas Papadimitriou | |
88 | 258235f4 | Kostas Papadimitriou | img = models.GlanceImages.__super__.parse_meta.call(this, img);
|
89 | ea223582 | Kostas Papadimitriou | return img;
|
90 | ea223582 | Kostas Papadimitriou | }, |
91 | 258235f4 | Kostas Papadimitriou | |
92 | ea223582 | Kostas Papadimitriou | get_system_images: function() { |
93 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i) { |
94 | 1faf0b9c | Kostas Papadimitriou | return _.include(_.keys(snf.config.system_images_owners),
|
95 | 1faf0b9c | Kostas Papadimitriou | i.get_owner()); |
96 | 1faf0b9c | Kostas Papadimitriou | }) |
97 | ea223582 | Kostas Papadimitriou | }, |
98 | ea223582 | Kostas Papadimitriou | |
99 | ea223582 | Kostas Papadimitriou | get_personal_images: function() { |
100 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i) { |
101 | 1faf0b9c | Kostas Papadimitriou | return i.get_owner() == snf.user.username
|
102 | 1faf0b9c | Kostas Papadimitriou | }); |
103 | ea223582 | Kostas Papadimitriou | }, |
104 | ea223582 | Kostas Papadimitriou | |
105 | ea223582 | Kostas Papadimitriou | get_public_images: function() { |
106 | 258235f4 | Kostas Papadimitriou | return _.filter(this.active(), function(i){ return i.is_public() }) |
107 | ea223582 | Kostas Papadimitriou | }, |
108 | ea223582 | Kostas Papadimitriou | |
109 | ea223582 | Kostas Papadimitriou | get_shared_images: function() { |
110 | 1faf0b9c | Kostas Papadimitriou | return _.filter(this.active(), function(i){ |
111 | 1faf0b9c | Kostas Papadimitriou | return !_.include(_.keys(snf.config.system_images_owners),
|
112 | 1faf0b9c | Kostas Papadimitriou | i.get_owner()) && |
113 | ea223582 | Kostas Papadimitriou | i.get_owner() != snf.user.username && |
114 | 1faf0b9c | Kostas Papadimitriou | !i.is_public(); |
115 | 1faf0b9c | Kostas Papadimitriou | }); |
116 | 8b71ea92 | Kostas Papadimitriou | } |
117 | 258235f4 | Kostas Papadimitriou | |
118 | 1a947bb7 | Kostas Papadimitriou | }) |
119 | 30b6f316 | Kostas Papadimitriou | |
120 | 30b6f316 | Kostas Papadimitriou | // replace images storage collection
|
121 | 30b6f316 | Kostas Papadimitriou | snf.glance.register = function() { |
122 | 30b6f316 | Kostas Papadimitriou | // storage initialization
|
123 | 30b6f316 | Kostas Papadimitriou | snf.storage.glance = {}; |
124 | 30b6f316 | Kostas Papadimitriou | snf.storage.glance.images = new models.GlanceImages();
|
125 | 30b6f316 | Kostas Papadimitriou | |
126 | 30b6f316 | Kostas Papadimitriou | // use glance images
|
127 | 30b6f316 | Kostas Papadimitriou | snf.storage.images = snf.storage.glance.images; |
128 | 30b6f316 | Kostas Papadimitriou | } |
129 | ea223582 | Kostas Papadimitriou | |
130 | 1a947bb7 | Kostas Papadimitriou | })(this);
|