-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdecodeFile.js
More file actions
62 lines (51 loc) · 1.75 KB
/
decodeFile.js
File metadata and controls
62 lines (51 loc) · 1.75 KB
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
const bencode = require('bencode');
let pieceHashes = [];
let pieceSize = [],fileSize = [], fileName = [];
const decodeFile = (data) => {
try{
let decodedData = bencode.decode(data);
if(!decodedData.info.length){
decodedData.length = decodedData.info.files.map(f=>f.length).reduce((prvs,next)=>{
return prvs + next;
})
}else decodedData.length = decodedData.info.length;
fileSize.push(decodedData.length);
return decodedData;
}catch(error){
console.error(error);
return null;
}
}
const getReadableData = (decodedData)=> {
const name = decodedData.info.name && decodedData.info.name.toString();
for(let i = 0;i< decodedData.info.pieces.length; i+=20){
pieceHashes.push(decodedData.info.pieces.slice(i));
}
pieceSize.push(decodedData.info['piece length']);
fileName.push(name)
return {
name,
announce:decodedData.announce.toString(),
'announce-list':decodedData['announce-list'] && decodedData['announce-list'].map(announce=>announce[0].toString()),
'creation date':decodedData['creation date'] && new Date(decodedData['creation date']).toLocaleDateString(),
length: fixMagnitude(decodedData.length)
};
}
const fixMagnitude = (length) => {
let exp = Number.parseFloat(length).toExponential(2).split('e');
let mag = ['KB','MB','GB','TB','PB','EB','ZB','YB'];
if(exp[1] > 2){
let places = Number.parseInt(exp[1]/3);
return`${Number.parseFloat(length/(Math.pow(1024,places))).toPrecision(4)} ${mag[places-1]}`
}else{
return length+" B";
}
}
module.exports = {
decodeFile,
getReadableData,
pieceHashes,
pieceSize,
fileSize,
fileName
}