1/**
2 * Controller for firmware
3 *
4 * @module app/configuration
5 * @exports firmwareController
6 * @name firmwareController
7 * @version 0.1.0
8 */
9
10window.angular && (function (angular) {
11    'use strict';
12
13    angular
14        .module('app.configuration')
15        .controller('firmwareController', [
16                '$scope',
17                '$window',
18                'APIUtils',
19                'dataService',
20                '$location',
21                '$anchorScroll',
22                'Constants',
23                function ($scope, $window, APIUtils, dataService, $location, $anchorScroll, Constants) {
24                    $scope.dataService = dataService;
25
26                    //Scroll to target anchor
27                    $scope.gotoAnchor = function () {
28                        $location.hash('upload');
29                        $anchorScroll();
30                    };
31
32                    $scope.firmwares = [];
33                    $scope.bmcActiveVersion = "";
34                    $scope.hostActiveVersion = "";
35                    $scope.display_error = false;
36                    $scope.reboot_confirm = false;
37                    $scope.preserve_settings_confirm = false;
38                    $scope.delete_image_id = "";
39                    $scope.activate_image_id = "";
40                    $scope.priority_image_id = "";
41                    $scope.priority_from = -1;
42                    $scope.priority_to = -1;
43                    $scope.confirm_priority = false;
44                    $scope.file_empty = true;
45                    $scope.uploading = false;
46
47                    $scope.error = {
48                        modal_title: "",
49                        title: "",
50                        desc: "",
51                        type: "warning"
52                    };
53
54                    $scope.activateImage = function(imageId){
55                        $scope.activate_image_id = imageId;
56                        $scope.preserve_settings_confirm = true;
57                    }
58
59                    $scope.displayError = function(data){
60                        $scope.error = data;
61                        $scope.display_error = true;
62                    }
63
64                    $scope.preserveSettingsConfirmed = function(){
65                        $scope.uploading = true;
66                        APIUtils.activateImage($scope.activate_image_id).then(function(response){
67                            $scope.uploading = false;
68                            if(response.status == 'error'){
69                                $scope.displayError({
70                                    modal_title: response.data.description,
71                                    title: response.data.description,
72                                    desc: response.data.exception,
73                                    type: 'Error'
74                                });
75                            }else{
76                                $scope.loadFirmwares();
77                            }
78                        });
79                        $scope.preserve_settings_confirm = false;
80                    }
81
82                    $scope.confirmWarmReboot = function(){
83                        $scope.reboot_confirm = false;
84                    }
85
86                    $scope.upload = function(){
87                        if($scope.file) {
88                            $scope.uploading = true;
89                            APIUtils.uploadImage($scope.file).then(function(response){
90                                $scope.uploading = false;
91                                if(response.status == 'error'){
92                                    $scope.displayError({
93                                        modal_title: response.data.description,
94                                        title: response.data.description,
95                                        desc: response.data.exception,
96                                        type: 'Error'
97                                    });
98                                }else{
99                                    $scope.loadFirmwares();
100                                }
101                            });
102                        }
103                    }
104
105                    $scope.download = function(){
106                        $scope.downloading = true;
107                        APIUtils.downloadImage($scope.download_host, $scope.download_filename).then(function(response){
108                            var data = response.data;
109                            $scope.downloading = false;
110                            var headers = response.headers();
111
112                            var filename = headers['x-filename'];
113                            var contentType = headers['content-type'];
114
115                            if(!headers['x-filename']){
116                                filename = $scope.download_filename;
117                            }
118
119                            var linkElement = document.createElement('a');
120                            try {
121                                var blob = new Blob([data], { type: contentType });
122                                var url = window.URL.createObjectURL(blob);
123
124                                linkElement.setAttribute('href', url);
125                                linkElement.setAttribute("download", filename);
126
127                                var clickEvent = new MouseEvent("click", {
128                                    "view": window,
129                                    "bubbles": true,
130                                    "cancelable": false
131                                });
132                                linkElement.dispatchEvent(clickEvent);
133                            } catch (ex) {
134                                console.log(ex);
135                            }
136                        });
137                    }
138
139                    $scope.changePriority = function(imageId, from, to){
140                        $scope.priority_image_id = imageId;
141                        $scope.priority_from = from;
142                        $scope.priority_to = to;
143
144                        if((from + to) == 1){
145                            $scope.confirm_priority = true;
146                        }else{
147                            $scope.confirmChangePriority();
148                        }
149                    }
150
151                    $scope.confirmChangePriority = function(){
152                        $scope.loading = true;
153                        APIUtils.changePriority($scope.priority_image_id, $scope.priority_to).then(function(response){
154                            $scope.loading = false;
155                            if(response.status == 'error'){
156                                $scope.displayError({
157                                    modal_title: response.data.description,
158                                    title: response.data.description,
159                                    desc: response.data.exception,
160                                    type: 'Error'
161                                });
162                            }else{
163                                $scope.loadFirmwares();
164                            }
165                        });
166                        $scope.confirm_priority = false;
167                    }
168                    $scope.deleteImage = function(imageId){
169                        $scope.delete_image_id = imageId;
170                        $scope.confirm_delete = true;
171                    }
172                    $scope.confirmDeleteImage = function(){
173                        $scope.loading = true;
174                        APIUtils.deleteImage($scope.delete_image_id).then(function(response){
175                            $scope.loading = false;
176                            if(response.status == 'error'){
177                                $scope.displayError({
178                                    modal_title: response.data.description,
179                                    title: response.data.description,
180                                    desc: response.data.exception,
181                                    type: 'Error'
182                                });
183                            }else{
184                                $scope.loadFirmwares();
185                            }
186                        });
187                        $scope.confirm_delete = false;
188                    }
189                    $scope.fileNameChanged = function(){
190                        $scope.file_empty = false;
191                    }
192
193                    $scope.uploading = false;
194                    $scope.filters = {
195                        bmc: {
196                            imageType: 'BMC'
197                        },
198                        host: {
199                            imageType: 'Host'
200                        }
201                    };
202
203                    $scope.loadFirmwares = function(){
204                        APIUtils.getFirmwares().then(function(result){
205                           $scope.firmwares = result.data;
206                           $scope.bmcActiveVersion = result.bmcActiveVersion;
207                           $scope.hostActiveVersion = result.hostActiveVersion;
208                        });
209                    }
210
211                    $scope.loadFirmwares();
212                }
213            ]
214        );
215
216})(angular);
217