Left: | ||
Right: |
OLD | NEW |
---|---|
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
71 */ | 71 */ |
72 readFromFile: function(/**nsIFile*/ file, /**Object*/ listener, /**Function*/ callback) | 72 readFromFile: function(/**nsIFile*/ file, /**Object*/ listener, /**Function*/ callback) |
73 { | 73 { |
74 try | 74 try |
75 { | 75 { |
76 let processing = false; | 76 let processing = false; |
77 let buffer = ""; | 77 let buffer = ""; |
78 let loaded = false; | 78 let loaded = false; |
79 let error = null; | 79 let error = null; |
80 | 80 |
81 let onProgress = function(data) | 81 let onProgress = function*(data) |
82 { | 82 { |
83 let index = (processing ? -1 : Math.max(data.lastIndexOf("\n"), data.las tIndexOf("\r"))); | 83 let index = (processing ? -1 : Math.max(data.lastIndexOf("\n"), data.las tIndexOf("\r"))); |
84 if (index >= 0) | 84 if (index >= 0) |
85 { | 85 { |
86 // Protect against reentrance in case the listener processes events. | 86 // Protect against reentrance in case the listener processes events. |
87 processing = true; | 87 processing = true; |
88 try | 88 try |
89 { | 89 { |
90 let oldBuffer = buffer; | 90 let oldBuffer = buffer; |
91 buffer = data.substr(index + 1); | 91 buffer = data.substr(index + 1); |
92 data = data.substr(0, index + 1); | 92 data = data.substr(0, index + 1); |
93 let lines = data.split(/[\r\n]+/); | 93 let lines = data.split(/[\r\n]+/); |
94 lines.pop(); | 94 lines.pop(); |
95 lines[0] = oldBuffer + lines[0]; | 95 lines[0] = oldBuffer + lines[0]; |
96 for (let i = 0; i < lines.length; i++) | 96 for (let i = 0; i < lines.length; i++) |
97 listener.process(lines[i]); | 97 yield listener.process(lines[i]); |
98 } | 98 } |
99 finally | 99 finally |
100 { | 100 { |
101 processing = false; | 101 processing = false; |
102 data = buffer; | 102 data = buffer; |
103 buffer = ""; | 103 buffer = ""; |
104 onProgress(data); | 104 yield* onProgress(data); |
105 | 105 |
106 if (loaded) | 106 if (loaded) |
107 { | 107 { |
108 loaded = false; | 108 loaded = false; |
109 onSuccess(); | 109 onSuccess(); |
110 } | 110 } |
111 | 111 |
112 if (error) | 112 if (error) |
113 { | 113 { |
114 let param = error; | 114 let param = error; |
(...skipping 10 matching lines...) Expand all Loading... | |
125 { | 125 { |
126 if (processing) | 126 if (processing) |
127 { | 127 { |
128 // Still processing data, delay processing this event. | 128 // Still processing data, delay processing this event. |
129 loaded = true; | 129 loaded = true; |
130 return; | 130 return; |
131 } | 131 } |
132 | 132 |
133 if (buffer !== "") | 133 if (buffer !== "") |
134 listener.process(buffer); | 134 listener.process(buffer); |
135 listener.process(null); | 135 listener.process(null); |
Wladimir Palant
2016/04/26 18:52:56
Note that return value is ignored here - turning o
Erik
2016/04/28 00:51:48
worth adding a comment for I think, which says wha
Wladimir Palant
2016/04/28 12:18:34
Done.
| |
136 | 136 |
137 callback(null); | 137 callback(null); |
138 }; | 138 }; |
139 | 139 |
140 let onError = function(e) | 140 let onError = function(e) |
141 { | 141 { |
142 if (processing) | 142 if (processing) |
143 { | 143 { |
144 // Still processing data, delay processing this event. | 144 // Still processing data, delay processing this event. |
145 error = e; | 145 error = e; |
(...skipping 26 matching lines...) Expand all Loading... | |
172 firstRead = false; | 172 firstRead = false; |
173 | 173 |
174 let f = yield OS.File.open(file.path, {read: true}); | 174 let f = yield OS.File.open(file.path, {read: true}); |
175 while (true) | 175 while (true) |
176 { | 176 { |
177 let array = yield f.read(BUFFER_SIZE); | 177 let array = yield f.read(BUFFER_SIZE); |
178 if (!array.length) | 178 if (!array.length) |
179 break; | 179 break; |
180 | 180 |
181 let data = decoder.decode(array, {stream: true}); | 181 let data = decoder.decode(array, {stream: true}); |
182 onProgress(data); | 182 yield* onProgress(data); |
183 } | 183 } |
184 yield f.close(); | 184 yield f.close(); |
185 }.bind(this)).then(onSuccess, onError); | 185 }.bind(this)).then(onSuccess, onError); |
186 } | 186 } |
187 catch (e) | 187 catch (e) |
188 { | 188 { |
189 callback(e); | 189 callback(e); |
190 } | 190 } |
191 }, | 191 }, |
192 | 192 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
323 else | 323 else |
324 callback(e); | 324 callback(e); |
325 }); | 325 }); |
326 } | 326 } |
327 catch(e) | 327 catch(e) |
328 { | 328 { |
329 callback(e); | 329 callback(e); |
330 } | 330 } |
331 } | 331 } |
332 } | 332 } |
OLD | NEW |