1 | var Utils = require("../util"),
|
2 | Constants = Utils.Constants;
|
3 |
|
4 |
|
5 | module.exports = function () {
|
6 | var _version = 0x0A,
|
7 | _flags = 0,
|
8 | _method = 0,
|
9 | _time = 0,
|
10 | _crc = 0,
|
11 | _compressedSize = 0,
|
12 | _size = 0,
|
13 | _fnameLen = 0,
|
14 | _extraLen = 0;
|
15 |
|
16 | return {
|
17 | get version () { return _version; },
|
18 | set version (val) { _version = 0x0A },
|
19 |
|
20 | get flags () { return _flags },
|
21 | set flags (val) { _flags = val; },
|
22 |
|
23 | get method () { return _method; },
|
24 | set method (val) { _method = val; },
|
25 |
|
26 | get time () {
|
27 | return new Date(
|
28 | ((_time >> 25) & 0x7f) + 1980,
|
29 | ((_time >> 21) & 0x0f) - 1,
|
30 | (_time >> 16) & 0x1f,
|
31 | (_time >> 11) & 0x1f,
|
32 | (_time >> 5) & 0x3f,
|
33 | (_time & 0x1f) << 1
|
34 | );
|
35 | },
|
36 | set time (val) {
|
37 | val = new Date(val);
|
38 | _time = (val.getFullYear() - 1980 & 0x7f) << 25
|
39 | | (val.getMonth() + 1) << 21
|
40 | | val.getDay() << 16
|
41 | | val.getHours() << 11
|
42 | | val.getMinutes() << 5
|
43 | | val.getSeconds() >> 1;
|
44 | },
|
45 |
|
46 | get crc () { return _crc; },
|
47 | set crc (val) { _crc = val; },
|
48 |
|
49 | get compressedSize () { return _compressedSize; },
|
50 | set compressedSize (val) { _compressedSize = val; },
|
51 |
|
52 | get size () { return _size; },
|
53 | set size (val) { _size = val; },
|
54 |
|
55 | get fileNameLength () { return _fnameLen; },
|
56 | set fileNameLenght (val) { _fnameLen = val; },
|
57 |
|
58 | get extraLength () { return _extraLen },
|
59 | set extraLength (val) { _extraLen = val; },
|
60 |
|
61 | get encripted () { return (_flags & 1) == 1 },
|
62 |
|
63 | get fileHeaderSize () {
|
64 | return Constants.LOCHDR + _fnameLen + _extraLen;
|
65 | },
|
66 |
|
67 | loadFromBinary : function(/*Buffer*/data) {
|
68 |
|
69 | if (data.length != Constants.LOCHDR || data.readUInt32LE(0) != Constants.LOCSIG) {
|
70 | throw Utils.Errors.INVALID_LOC;
|
71 | }
|
72 |
|
73 | _version = data.readUInt16LE(Constants.LOCVER);
|
74 |
|
75 | _flags = data.readUInt16LE(Constants.LOCFLG);
|
76 |
|
77 | _method = data.readUInt16LE(Constants.LOCHOW);
|
78 |
|
79 | _time = data.readUInt32LE(Constants.LOCTIM);
|
80 |
|
81 | _crc = data.readUInt32LE(Constants.LOCCRC);
|
82 |
|
83 | _compressedSize = data.readUInt32LE(Constants.LOCSIZ);
|
84 |
|
85 | _size = data.readUInt32LE(Constants.LOCLEN);
|
86 |
|
87 | _fnameLen = data.readUInt16LE(Constants.LOCNAM);
|
88 |
|
89 | _extraLen = data.readUInt16LE(Constants.LOCEXT);
|
90 | },
|
91 |
|
92 | toBinary : function() {
|
93 |
|
94 | var data = new Buffer(Constants.LOCHDR);
|
95 |
|
96 | data.writeUInt32LE(Constants.LOCSIG, 0);
|
97 |
|
98 | data.writeUInt16LE(_version, Constants.LOCVER);
|
99 |
|
100 | data.writeUInt16LE(_flags, Constants.LOCFLG);
|
101 |
|
102 | data.writeUInt16LE(_method, Constants.LOCHOW);
|
103 |
|
104 | data.writeUInt32LE(_time, Constants.LOCTIM);
|
105 |
|
106 | data.writeUInt32LE(_crc, Constants.LOCCRC);
|
107 |
|
108 | data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);
|
109 |
|
110 | data.writeUInt32LE(_size, Constants.LOCLEN);
|
111 |
|
112 | data.writeUInt16LE(_fnameLen, Constants.LOCNAM);
|
113 |
|
114 | data.writeUInt16LE(_extraLen, Constants.LOCEXT);
|
115 | return data;
|
116 | },
|
117 |
|
118 | toString : function() {
|
119 | return '{\n' +
|
120 | '\t"version" : ' + _version + ",\n" +
|
121 | '\t"flags" : ' + _flags + ",\n" +
|
122 | '\t"method" : ' + Utils.methodToString(_method) + ",\n" +
|
123 | '\t"time" : ' + _time + ",\n" +
|
124 | '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" +
|
125 | '\t"compressedSize" : ' + _compressedSize + " bytes,\n" +
|
126 | '\t"size" : ' + _size + " bytes,\n" +
|
127 | '\t"fnameLen" : ' + _fnameLen + ",\n" +
|
128 | '\t"extraLen" : ' + _extraLen + " bytes,\n" +
|
129 | '\t"fileHeaderSize" : ' + (Constants.LOCHDR + _fnameLen + _extraLen) + " bytes\n" +
|
130 | '}';
|
131 | }
|
132 | }
|
133 | }; |
\ | No newline at end of file |