This repository has been archived by the owner on Apr 17, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 14
/
FileQueue.ts
83 lines (74 loc) · 1.91 KB
/
FileQueue.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
* @module @raincatcher/filestore-client
*/
import * as _ from 'lodash';
import { FileQueueEntry } from './FileQueueEntry';
/**
* A queue implementation backed by the browser's persistent storage.
*/
export class FileQueue {
private queueName: string;
private queueData: FileQueueEntry[];
public constructor(private localStorage, name: string) {
this.queueName = name;
this.queueData = [];
}
/**
* Save queue items to localStorage
*/
public saveData() {
const toSave = JSON.stringify({
queue: this.queueData
});
this.localStorage.setItem(this.queueName, toSave);
return this;
}
/**
* Restore the local queueData to reflect the data of the queue in localStorage.
*/
public restoreData() {
this.queueData = [];
const queueDataString = this.localStorage.getItem(this.queueName);
if (queueDataString) {
const queueData = JSON.parse(queueDataString);
if (!_.isEmpty(queueData.queue)) {
this.queueData = queueData.queue;
}
}
return this;
}
/**
* Get the local queue items
*/
public getItemList(): FileQueueEntry[] {
return this.queueData;
}
/**
* Add a new item to the queue
* @param item - Contains information required to upload files to the server.
* @see FileQueueEntry
*/
public addItem(item: FileQueueEntry) {
this.queueData.push(item);
return this.saveData();
}
/**
* Remove an item from the queue.
* @param item - Contains file information.
* @see FileQueueEntry
*/
public removeItem(item: FileQueueEntry) {
_.remove(this.queueData, item);
return this.saveData();
}
/**
* Reads an item from the queue using an id.
*
* @param id - A unique identifier used to identify the item to be read from the queue.
*/
public readItem(id): FileQueueEntry | undefined {
return _.find(this.queueData, function(item) {
return item.id === id;
});
}
}