diff --git a/omega-target-chromium-extension/omega_debug.coffee b/omega-target-chromium-extension/omega_debug.coffee index cf54b15..92ba61b 100644 --- a/omega-target-chromium-extension/omega_debug.coffee +++ b/omega-target-chromium-extension/omega_debug.coffee @@ -5,7 +5,13 @@ window.OmegaDebug = chrome.runtime.getManifest().version downloadLog: -> blob = new Blob [localStorage['log']], {type: "text/plain;charset=utf-8"} - saveAs(blob, "OmegaLog_#{Date.now()}.txt") + filename = "OmegaLog_#{Date.now()}.txt" + + if browser?.downloads?.download? + url = URL.createObjectURL(blob) + browser.downloads.download({url: url, filename: filename}) + else + saveAs(blob, filename) resetOptions: -> localStorage.clear() # Prevent options loading from sync storage after reload. diff --git a/omega-target-chromium-extension/overlay/manifest.json b/omega-target-chromium-extension/overlay/manifest.json index decf050..22c9b7a 100644 --- a/omega-target-chromium-extension/overlay/manifest.json +++ b/omega-target-chromium-extension/overlay/manifest.json @@ -34,6 +34,7 @@ "alarms", "storage", "webRequest", + "downloads", "webRequestBlocking", "contextMenus", diff --git a/omega-web/src/omega/app.coffee b/omega-web/src/omega/app.coffee index c0cde0d..4a03819 100644 --- a/omega-web/src/omega/app.coffee +++ b/omega-web/src/omega/app.coffee @@ -66,12 +66,14 @@ angular.module('omega').config ($stateProvider, $urlRouterProvider, controller: 'AboutCtrl' ) -angular.module('omega').factory 'omegaDebug', ($window, $rootScope) -> +angular.module('omega').factory 'omegaDebug', ($window, $rootScope, + $injector) -> omegaDebug = $window.OmegaDebug ? {} omegaDebug.downloadLog ?= -> + downloadFile = $injector.get('downloadFile') ? saveAs blob = new Blob [localStorage['log']], {type: "text/plain;charset=utf-8"} - saveAs(blob, "OmegaLog_#{Date.now()}.txt") + downloadFile(blob, "OmegaLog_#{Date.now()}.txt") omegaDebug.reportIssue ?= -> $window.open( @@ -82,3 +84,14 @@ angular.module('omega').factory 'omegaDebug', ($window, $rootScope) -> $rootScope.resetOptions() omegaDebug + +angular.module('omega').factory 'downloadFile', -> + if browser?.downloads?.download? + return (blob, filename) -> + url = URL.createObjectURL(blob) + if filename + browser.downloads.download({url: url, filename: filename}) + else + browser.downloads.download({url: url}) + else + return saveAs diff --git a/omega-web/src/omega/controllers/io.coffee b/omega-web/src/omega/controllers/io.coffee index 970769b..4c9e9b7 100644 --- a/omega-web/src/omega/controllers/io.coffee +++ b/omega-web/src/omega/controllers/io.coffee @@ -1,5 +1,5 @@ angular.module('omega').controller 'IoCtrl', ($scope, $rootScope, - $window, $http, omegaTarget) -> + $window, $http, omegaTarget, downloadFile) -> omegaTarget.state('web.restoreOnlineUrl').then (url) -> if url @@ -10,7 +10,7 @@ angular.module('omega').controller 'IoCtrl', ($scope, $rootScope, plainOptions = angular.fromJson(angular.toJson($rootScope.options)) content = JSON.stringify(plainOptions) blob = new Blob [content], {type: "text/plain;charset=utf-8"} - saveAs(blob, "OmegaOptions.bak") + downloadFile(blob, "OmegaOptions.bak") $scope.importSuccess = -> $rootScope.showAlert( diff --git a/omega-web/src/omega/controllers/master.coffee b/omega-web/src/omega/controllers/master.coffee index 4dbd3c6..399a707 100644 --- a/omega-web/src/omega/controllers/master.coffee +++ b/omega-web/src/omega/controllers/master.coffee @@ -1,7 +1,7 @@ angular.module('omega').controller 'MasterCtrl', ($scope, $rootScope, $window, $q, $modal, $state, profileColors, profileIcons, omegaTarget, $timeout, $location, $filter, getAttachedName, isProfileNameReserved, - isProfileNameHidden, dispNameFilter) -> + isProfileNameHidden, dispNameFilter, downloadFile) -> tr = $filter('tr') @@ -42,7 +42,7 @@ angular.module('omega').controller 'MasterCtrl', ($scope, $rootScope, $window, pac = OmegaPac.PacGenerator.ascii(pac) blob = new Blob [pac], {type: "text/plain;charset=utf-8"} fileName = profileName.replace(/\W+/g, '_') - saveAs(blob, "OmegaProfile_#{fileName}.pac") + downloadFile(blob, "OmegaProfile_#{fileName}.pac") if missingProfile $timeout -> $rootScope.showAlert( diff --git a/omega-web/src/omega/controllers/switch_profile.coffee b/omega-web/src/omega/controllers/switch_profile.coffee index 5aa55e5..76e785a 100644 --- a/omega-web/src/omega/controllers/switch_profile.coffee +++ b/omega-web/src/omega/controllers/switch_profile.coffee @@ -1,6 +1,6 @@ angular.module('omega').controller 'SwitchProfileCtrl', ($scope, $rootScope, $location, $timeout, $q, $modal, profileIcons, getAttachedName, omegaTarget, - trFilter) -> + trFilter, downloadFile) -> # == Rule list == $scope.ruleListFormats = OmegaPac.Profiles.ruleListFormats @@ -20,7 +20,7 @@ angular.module('omega').controller 'SwitchProfileCtrl', ($scope, $rootScope, blob = new Blob [text], {type: "text/plain;charset=utf-8"} fileName = $scope.profile.name.replace(/\W+/g, '_') - saveAs(blob, "OmegaRules_#{fileName}.sorl") + downloadFile(blob, "OmegaRules_#{fileName}.sorl") exportLegacyRuleList = -> wildcardRules = '' @@ -52,7 +52,7 @@ angular.module('omega').controller 'SwitchProfileCtrl', ($scope, $rootScope, """ blob = new Blob [text], {type: "text/plain;charset=utf-8"} fileName = $scope.profile.name.replace(/\W+/g, '_') - saveAs(blob, "SwitchyRules_#{fileName}.ssrl") + downloadFile(blob, "SwitchyRules_#{fileName}.ssrl") # == Condition types == $scope.conditionHelp =