enigma-bbs/core/download_queue.js

73 lines
1.7 KiB
JavaScript
Raw Normal View History

2016-10-15 03:56:45 +00:00
/* jslint node: true */
'use strict';
const FileEntry = require('./file_entry.js');
module.exports = class DownloadQueue {
constructor(client) {
this.client = client;
2016-10-15 03:56:45 +00:00
if(!Array.isArray(this.client.user.downloadQueue)) {
if(this.client.user.properties.dl_queue) {
this.loadFromProperty(this.client.user.properties.dl_queue);
} else {
this.client.user.downloadQueue = [];
}
}
2016-10-15 03:56:45 +00:00
}
get items() {
return this.client.user.downloadQueue;
}
clear() {
this.client.user.downloadQueue = [];
}
2016-10-15 03:56:45 +00:00
toggle(fileEntry) {
if(this.isQueued(fileEntry)) {
this.client.user.downloadQueue = this.client.user.downloadQueue.filter(e => fileEntry.fileId !== e.fileId);
2016-10-15 03:56:45 +00:00
} else {
this.add(fileEntry);
}
}
add(fileEntry) {
this.client.user.downloadQueue.push({
2016-10-15 03:56:45 +00:00
fileId : fileEntry.fileId,
areaTag : fileEntry.areaTag,
fileName : fileEntry.fileName,
path : fileEntry.filePath,
byteSize : fileEntry.meta.byte_size || 0,
2016-10-15 03:56:45 +00:00
});
}
removeItems(fileIds) {
if(!Array.isArray(fileIds)) {
fileIds = [ fileIds ];
}
this.client.user.downloadQueue = this.client.user.downloadQueue.filter(e => ( -1 === fileIds.indexOf(e.fileId) ) );
}
2016-10-15 03:56:45 +00:00
isQueued(entryOrId) {
if(entryOrId instanceof FileEntry) {
entryOrId = entryOrId.fileId;
}
return this.client.user.downloadQueue.find(e => entryOrId === e.fileId) ? true : false;
2016-10-15 03:56:45 +00:00
}
toProperty() { return JSON.stringify(this.client.user.downloadQueue); }
2016-10-15 03:56:45 +00:00
loadFromProperty(prop) {
try {
this.client.user.downloadQueue = JSON.parse(prop);
2016-10-15 03:56:45 +00:00
} catch(e) {
this.client.user.downloadQueue = [];
this.client.log.error( { error : e.message, property : prop }, 'Failed parsing download queue property');
2016-10-15 03:56:45 +00:00
}
}
};