Source-Tag: v1.0.3 Manifest-SHA256: b7b09bf48f9e092ed8ad82f99c0319d6c3837d0a1549bd0cc4a374276c0f3896
63 lines
2.5 KiB
JavaScript
63 lines
2.5 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
var weechat = angular.module('weechat');
|
|
var neoDropCrypto = require('./neodrop-crypto');
|
|
|
|
weechat.factory('imgur', ['$rootScope', 'settings', function($rootScope, settings) {
|
|
var BASE = '{{DROPS_ORIGIN}}';
|
|
|
|
var showErrorMsg = function(message) {
|
|
$rootScope.uploadError = true;
|
|
$rootScope.uploadErrorMessage = message || 'Encrypted upload failed.';
|
|
if (!$rootScope.$$phase) $rootScope.$apply();
|
|
setTimeout(function() {
|
|
$rootScope.uploadError = false;
|
|
if (!$rootScope.$$phase) $rootScope.$apply();
|
|
}, 5000);
|
|
};
|
|
|
|
var process = function(file, callback) {
|
|
if (!file || typeof file.size !== 'number') return;
|
|
if (file.size > neoDropCrypto.LARGE_MAX) {
|
|
showErrorMsg('NeoDrop files are limited to 1 GiB.');
|
|
return;
|
|
}
|
|
var profile = (settings.dropProfile === 'large' || file.size > neoDropCrypto.SMALL_MAX) ? 1 : 0;
|
|
var progressBars = document.getElementById('imgur-upload-progress');
|
|
var bar = document.createElement('div');
|
|
bar.className = 'imgur-progress-bar';
|
|
progressBars.appendChild(bar);
|
|
|
|
neoDropCrypto.upload(file, {
|
|
base: BASE,
|
|
profile: profile,
|
|
onProgress: function(value) { bar.style.width = Math.round(value * 100) + '%'; }
|
|
}).then(function(result) {
|
|
if (typeof $rootScope.registerNeoDrop === 'function') {
|
|
$rootScope.registerNeoDrop(result.readUrl, result.deleteCapability);
|
|
}
|
|
if (callback) callback(result.readUrl, result.deleteCapability);
|
|
}).catch(function(error) {
|
|
showErrorMsg(error.message);
|
|
}).finally(function() {
|
|
setTimeout(function() { if (bar.parentNode) bar.parentNode.removeChild(bar); }, 500);
|
|
});
|
|
};
|
|
|
|
var deleteImage = function(capability, callback) {
|
|
var split = String(capability || '').split('.');
|
|
if (split.length !== 2) return showErrorMsg('Invalid deletion capability.');
|
|
fetch(BASE + '/api/v1/objects/' + split[0], {
|
|
method: 'DELETE', headers: {'Authorization': 'Bearer ' + split[1]}
|
|
}).then(function(response) {
|
|
if (!response.ok) throw new Error('Unable to delete encrypted file.');
|
|
if (callback) callback(capability);
|
|
}).catch(function() { showErrorMsg('Unable to delete encrypted file.'); });
|
|
};
|
|
|
|
return {process: process, deleteImage: deleteImage};
|
|
}]);
|
|
|
|
})();
|