-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrackhistory.js
109 lines (90 loc) · 2.35 KB
/
trackhistory.js
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
registerPlugin({
name: 'TrackHistory',
version: '1.1',
backends: ['ts3', 'discord'],
description: 'TrackHistory',
author: 'CubE135',
enableWeb: true
}, (_, config) => {
var engine = require('engine');
var event = require('event');
var audio = require('audio');
var backend = require('backend');
var media = require('media');
let store = require('store');
event.on('track', function(track) {
let trackInfo = new TrackInfo(track);
let track_history_number = getMostRecentEntryNumber(store.getAll());
store.set('track_history_' + track_history_number, trackInfo.toJson());
});
event.on('api:getTrackHistory', ev => {
let history = store.getAll();
return {
success: true,
data: Object.entries(history)
};
});
event.on('api:deleteTrackHistory', ev => {
let amount = unsetAllEntries();
return {
success: true,
data: amount
};
});
event.on('api:deleteTrackFromHistory', ev => {
let key = 'track_history_' + ev.data().trackId;
store.unset(key);
return {
success: true,
data: key
};
});
event.on('api:playYoutubeTrack', ev => {
let url = ev.data().youtubeUrl;
media.yt(url);
return {
success: true,
data: ev.data().youtubeUrl
};
});
function getMostRecentEntryNumber(entries) {
let keys = Object.keys(entries);
let amount = keys.length;
if (amount < 1) {
return 1;
} else {
let numbers = [];
let regex = /_(\d+)$/;
keys.forEach((key) => {
let number = parseInt(key.match(regex)[1]);
numbers.push(number);
})
let sorted = numbers.sort(function(a, b) {
return b - a;
});
return sorted[0] + 1;
}
}
function unsetAllEntries() {
let all = store.getAll()
let counter = 0;
Object.keys(all).forEach((key) => {
store.unset(key);
counter++;
})
return counter;
}
class TrackInfo {
constructor(track) {
this.id = track.id();
this.title = track.title() != '' ? track.title() : track.filename();
this.artist = track.artist();
this.url = track.filename() ? track.filename() : track.sourceURL();
this.type = this.id ? 'local' : 'youtube';
this.timestamp = Date.now();
}
toJson() {
return JSON.stringify(this);
}
}
})