diff --git a/lib/gui/components/drive-selector/controllers/drive-selector.js b/lib/gui/components/drive-selector/controllers/drive-selector.js index 8ec1a003..d62528ae 100644 --- a/lib/gui/components/drive-selector/controllers/drive-selector.js +++ b/lib/gui/components/drive-selector/controllers/drive-selector.js @@ -18,7 +18,7 @@ const _ = require('lodash'); -module.exports = function($uibModalInstance, DrivesModel, SelectionStateModel) { +module.exports = function($uibModalInstance, DrivesModel, SelectionStateModel, WarningModalService) { /** * @summary The drive selector state @@ -40,6 +40,44 @@ module.exports = function($uibModalInstance, DrivesModel, SelectionStateModel) { */ this.drives = DrivesModel; + /** + * @summary Toggle a drive selection + * @function + * @public + * + * @param {Object} drive - drive + * + * @example + * DriveSelectorController.toggleDrive({ + * device: '/dev/disk2', + * size: 999999999, + * name: 'Cruzer USB drive' + * }); + */ + this.toggleDrive = (drive) => { + if (!SelectionStateModel.isDriveValid(drive)) { + return; + } + + if (_.some([ + SelectionStateModel.isDriveSizeRecommended(drive), + SelectionStateModel.isCurrentDrive(drive.device) + ])) { + SelectionStateModel.toggleSetDrive(drive.device); + return; + } + + WarningModalService.display([ + `This image recommends a ${SelectionStateModel.getImageRecommendedDriveSize()}`, + `bytes drive, however ${drive.device} is only ${drive.size} bytes.`, + 'Are you sure you want to continue?' + ].join(' ')).then((userAccepted) => { + if (userAccepted) { + SelectionStateModel.toggleSetDrive(drive.device); + } + }); + }; + /** * @summary Close the modal and resolve the selected drive * @function @@ -55,7 +93,6 @@ module.exports = function($uibModalInstance, DrivesModel, SelectionStateModel) { // the drive is then unplugged from the computer and the modal // is resolved with a non-existent drive. if (!selectedDrive || !_.includes(this.drives.getDrives(), selectedDrive)) { - $uibModalInstance.close(); } else { $uibModalInstance.close(selectedDrive); diff --git a/lib/gui/components/drive-selector/drive-selector.js b/lib/gui/components/drive-selector/drive-selector.js index 37b73600..c4e2ac89 100644 --- a/lib/gui/components/drive-selector/drive-selector.js +++ b/lib/gui/components/drive-selector/drive-selector.js @@ -24,6 +24,7 @@ const angular = require('angular'); const MODULE_NAME = 'Etcher.Components.DriveSelector'; const DriveSelector = angular.module(MODULE_NAME, [ require('../modal/modal'), + require('../warning-modal/warning-modal'), require('../../models/drives'), require('../../models/selection-state'), require('../../utils/byte-size/byte-size') diff --git a/lib/gui/components/drive-selector/templates/drive-selector-modal.tpl.html b/lib/gui/components/drive-selector/templates/drive-selector-modal.tpl.html index 17d65e6f..7817ceda 100644 --- a/lib/gui/components/drive-selector/templates/drive-selector-modal.tpl.html +++ b/lib/gui/components/drive-selector/templates/drive-selector-modal.tpl.html @@ -7,13 +7,18 @@
{{ drive.name }}