(function () {
'use strict';
+/* global superagent */
+/* global Vue */
+/* global $ */
+/* global filesize */
+
// poor man's async
function asyncForEach(items, handler, callback) {
var cur = 0;
text: [ '.txt', '.md' ],
pdf: [ '.pdf' ],
html: [ '.html', '.htm', '.php' ],
- video: [ '.mp4', '.mpg', '.mpeg', '.ogg', '.mkv' ]
+ video: [ '.mp4', '.mpg', '.mpeg', '.ogg', '.mkv', '.avi', '.mov' ]
};
function getPreviewUrl(entry, basePath) {
loadDirectory(app.path);
}
+function logout() {
+ superagent.post('/api/logout').query({ access_token: localStorage.accessToken }).end(function (error) {
+ if (error) console.error(error);
+
+ app.session.valid = false;
+
+ delete localStorage.accessToken;
+ });
+}
+
function loadDirectory(filePath) {
app.busy = true;
app.uploadStatus.busy = true;
app.uploadStatus.count = files.length;
+ app.uploadStatus.size = 0;
app.uploadStatus.done = 0;
app.uploadStatus.percentDone = 0;
+ for (var i = 0; i < files.length; ++i) {
+ app.uploadStatus.size += files[i].size;
+ }
+
asyncForEach(files, function (file, callback) {
var path = encode(sanitize(app.path + '/' + (file.webkitRelativePath || file.name)));
var formData = new FormData();
formData.append('file', file);
- superagent.post('/api/files' + path).query({ access_token: localStorage.accessToken }).send(formData).end(function (error, result) {
+ var finishedUploadSize = app.uploadStatus.done;
+
+ superagent.post('/api/files' + path)
+ .query({ access_token: localStorage.accessToken })
+ .send(formData)
+ .on('progress', function (event) {
+ // only handle upload events
+ if (!(event.target instanceof XMLHttpRequestUpload)) return;
+
+ app.uploadStatus.done = finishedUploadSize + event.loaded;
+ app.uploadStatus.percentDone = Math.round(app.uploadStatus.done / app.uploadStatus.size * 100);
+ }).end(function (error, result) {
if (result && result.statusCode === 401) return logout();
if (result && result.statusCode !== 201) return callback('Error uploading file: ', result.statusCode);
if (error) return callback(error);
- app.uploadStatus.done += 1;
- app.uploadStatus.percentDone = Math.round(app.uploadStatus.done / app.uploadStatus.count * 100);
-
callback();
});
}, function (error) {
app.uploadStatus.busy = false;
app.uploadStatus.count = 0;
+ app.uploadStatus.size = 0;
app.uploadStatus.done = 0;
app.uploadStatus.percentDone = 100;
getProfile(result.body.accessToken, function (error) {
if (error) return console.error(error);
- loadDirectory(window.location.hash.slice(1));
+ loadDirectory(decode(window.location.hash.slice(1)));
});
});
},
onOptionsMenu: function (command) {
- var that = this;
-
if (command === 'folderListing') {
superagent.put('/api/settings').send({ folderListingEnabled: this.folderListingEnabled }).query({ access_token: localStorage.accessToken }).end(function (error) {
if (error) console.error(error);
center: true
}).then(function () {}).catch(function () {});
} else if (command === 'logout') {
- superagent.post('/api/logout').query({ access_token: localStorage.accessToken }).end(function (error) {
- if (error) console.error(error);
-
- that.session.valid = false;
-
- delete localStorage.accessToken;
- });
+ logout();
}
},
onDownload: function (entry) {
getProfile(localStorage.accessToken, function (error) {
if (error) return console.error(error);
- loadDirectory(window.location.hash.slice(1));
+ loadDirectory(decode(window.location.hash.slice(1)));
});
$(window).on('hashchange', function () {
- loadDirectory(window.location.hash.slice(1));
+ loadDirectory(decode(window.location.hash.slice(1)));
});
})();