blob: 50df4f030c4b26485f517081ac7d4e344bad284e [file] [log] [blame]
Michael Davis43366db2017-05-15 18:12:35 -05001/**
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',
Iftekharul Islam1acb4122017-11-02 13:20:32 -050022 'Constants',
23 function ($scope, $window, APIUtils, dataService, $location, $anchorScroll, Constants) {
Michael Davis43366db2017-05-15 18:12:35 -050024 $scope.dataService = dataService;
25
Michael Davis43366db2017-05-15 18:12:35 -050026 //Scroll to target anchor
27 $scope.gotoAnchor = function () {
28 $location.hash('upload');
29 $anchorScroll();
30 };
Iftekharul Islamc0161392017-06-14 15:46:15 -050031
32 $scope.firmwares = [];
33 $scope.bmcActiveVersion = "";
34 $scope.hostActiveVersion = "";
35 $scope.display_error = false;
36 $scope.confirm_upload_image = false;
37 $scope.reboot_confirm = false;
38 $scope.preserve_settings_confirm = false;
39 $scope.delete_image_id = "";
40 $scope.activate_image_id = "";
Iftekharul Islam1acb4122017-11-02 13:20:32 -050041 $scope.priority_image_id = "";
42 $scope.priority_from = -1;
43 $scope.priority_to = -1;
44 $scope.confirm_priority = false;
Iftekharul Islamc0161392017-06-14 15:46:15 -050045 $scope.file_empty = true;
46 $scope.uploading = false;
47
48 $scope.error = {
49 modal_title: "",
50 title: "",
51 desc: "",
52 type: "warning"
53 };
54
55 $scope.activateImage = function(imageId){
56 $scope.activate_image_id = imageId;
57 $scope.preserve_settings_confirm = true;
58 }
59
60 $scope.displayError = function(data){
61 $scope.error = data;
62 $scope.display_error = true;
63 }
64
65 $scope.preserveSettingsConfirmed = function(){
66 //show progress..callapi..hide..iferror..show error
67 $scope.preserve_settings_confirm = false;
68 }
69
70 $scope.confirmWarmReboot = function(){
71 $scope.reboot_confirm = false;
72 }
73
74 $scope.upload = function(){
75 if(!$scope.file_empty){
76 $scope.confirm_upload_image = true;
77 }
78 }
79 $scope.confirmUpload = function(){
80 $scope.uploading = true;
Iftekharul Islam1acb4122017-11-02 13:20:32 -050081 APIUtils.uploadImage($scope.file).then(function(response){
Iftekharul Islamc0161392017-06-14 15:46:15 -050082 $scope.uploading = false;
83 if(response.status == 'error'){
84 $scope.displayError({
85 modal_title: response.data.description,
86 title: response.data.description,
87 desc: response.data.exception,
88 type: 'Error'
89 });
90 }else{
91 $scope.loadFirmwares();
92 }
93 });
94 $scope.confirm_upload_image = false;
95 }
96
Iftekharul Islam1acb4122017-11-02 13:20:32 -050097 $scope.download = function(){
98 $scope.downloading = true;
99 APIUtils.downloadImage($scope.download_host, $scope.download_filename).then(function(response){
100 var data = response.data;
101 $scope.downloading = false;
102 var headers = response.headers();
103
104 var filename = headers['x-filename'];
105 var contentType = headers['content-type'];
106
107 if(!headers['x-filename']){
108 filename = Constants.FIRMWARE.FALLBACK_DOWNLOAD_FILENAME;
109 }
110
111 var linkElement = document.createElement('a');
112 try {
113 var blob = new Blob([data], { type: contentType });
114 var url = window.URL.createObjectURL(blob);
115
116 linkElement.setAttribute('href', url);
117 linkElement.setAttribute("download", filename);
118
119 var clickEvent = new MouseEvent("click", {
120 "view": window,
121 "bubbles": true,
122 "cancelable": false
123 });
124 linkElement.dispatchEvent(clickEvent);
125 } catch (ex) {
126 console.log(ex);
127 }
128 });
129 }
130
131 $scope.changePriority = function(imageId, from, to){
132 $scope.priority_image_id = imageId;
133 $scope.priority_from = from;
134 $scope.priority_to = to;
135
136 if((from + to) == 1){
137 $scope.confirm_priority = true;
138 }else{
139 $scope.confirmChangePriority();
140 }
141 }
142
143 $scope.confirmChangePriority = function(){
144 $scope.loading = true;
145 APIUtils.changePriority($scope.priority_image_id, $scope.priority_to).then(function(response){
146 $scope.loading = false;
147 if(response.status == 'error'){
148 $scope.displayError({
149 modal_title: response.data.description,
150 title: response.data.description,
151 desc: response.data.exception,
152 type: 'Error'
153 });
154 }else{
155 $scope.loadFirmwares();
156 }
157 });
158 $scope.confirm_priority = false;
159 }
Iftekharul Islamc0161392017-06-14 15:46:15 -0500160 $scope.deleteImage = function(imageId){
161 $scope.delete_image_id = imageId;
162 $scope.confirm_delete = true;
163 }
164 $scope.confirmDeleteImage = function(imageId){
165 $scope.confirm_delete = false;
166 }
167
168 $scope.fileNameChanged = function(){
169 $scope.file_empty = false;
170 }
171
172 $scope.uploading = false;
173 $scope.filters = {
174 bmc: {
175 imageType: 'BMC'
176 },
177 host: {
178 imageType: 'Host'
179 }
180 };
181
182 $scope.loadFirmwares = function(){
Michael Davisdf3bd122017-08-10 11:03:42 -0500183 APIUtils.getFirmwares().then(function(result){
184 $scope.firmwares = result.data;
185 $scope.bmcActiveVersion = result.bmcActiveVersion;
186 $scope.hostActiveVersion = result.hostActiveVersion;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500187 });
188 }
189
190 $scope.loadFirmwares();
Michael Davis43366db2017-05-15 18:12:35 -0500191 }
192 ]
193 );
194
195})(angular);