Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(531)

Side by Side Diff: ui/file_manager/file_manager/background/js/media_scanner.js

Issue 886093003: Add support for size checking selection based scans. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update DefaultScanResult to use importerResolver instead of hand rolled support...was investigating… Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * Class representing the results of a scan operation. 6 * Class representing the results of a scan operation.
7 * 7 *
8 * @interface 8 * @interface
9 */ 9 */
10 importer.MediaScanner = function() {}; 10 importer.MediaScanner = function() {};
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 } 128 }
129 }; 129 };
130 130
131 /** @override */ 131 /** @override */
132 importer.DefaultMediaScanner.prototype.scan = function(entries) { 132 importer.DefaultMediaScanner.prototype.scan = function(entries) {
133 if (entries.length == 0) { 133 if (entries.length == 0) {
134 throw new Error('Cannot scan empty list of entries.'); 134 throw new Error('Cannot scan empty list of entries.');
135 } 135 }
136 136
137 var scanResult = this.createScanResult_(); 137 var scanResult = this.createScanResult_();
138 var watcher = this.watcherFactory_(function() { 138 var watcher = this.watcherFactory_(
139 scanResult.invalidateScan(); 139 /** @this {importer.DefaultMediaScanner} */
140 this.observers_.forEach( 140 function() {
141 /** @param {!importer.ScanObserver} observer */ 141 scanResult.invalidateScan();
142 function(observer) { 142 this.observers_.forEach(
143 observer(importer.ScanEvent.INVALIDATED, scanResult); 143 /** @param {!importer.ScanObserver} observer */
144 }); 144 function(observer) {
145 }.bind(this)); 145 observer(importer.ScanEvent.INVALIDATED, scanResult);
146 });
147 }.bind(this));
146 var scanPromises = entries.map( 148 var scanPromises = entries.map(
147 this.scanEntry_.bind(this, scanResult, watcher)); 149 this.scanEntry_.bind(this, scanResult, watcher));
148 150
149 Promise.all(scanPromises) 151 Promise.all(scanPromises)
150 .then(scanResult.resolveScan.bind(scanResult)) 152 .then(scanResult.resolve)
151 .catch(scanResult.rejectScan.bind(scanResult)); 153 .catch(scanResult.reject);
152 154
153 scanResult.whenFinal() 155 scanResult.whenFinal()
154 .then( 156 .then(
155 function() { 157 function() {
156 this.onScanFinished_(scanResult); 158 this.onScanFinished_(scanResult);
157 }.bind(this)); 159 }.bind(this));
158 160
159 return scanResult; 161 return scanResult;
160 }; 162 };
161 163
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 * @type {Date} 274 * @type {Date}
273 */ 275 */
274 this.scanStarted_ = new Date(); 276 this.scanStarted_ = new Date();
275 277
276 /** 278 /**
277 * The point in time when the last scan activity occured. 279 * The point in time when the last scan activity occured.
278 * @type {Date} 280 * @type {Date}
279 */ 281 */
280 this.lastScanActivity_ = this.scanStarted_; 282 this.lastScanActivity_ = this.scanStarted_;
281 283
282 /** @private {boolean} */ 284 /** @private {!importer.Resolver.<!importer.ScanResult>} */
283 this.settled_ = false; 285 this.resolver_ = new importer.Resolver();
286 };
284 287
285 /** @type {function()} */ 288 /** @struct */
286 this.resolveScan; 289 importer.DefaultScanResult.prototype = {
287 290
288 /** @type {function(*)} */ 291 /** @return {function()} */
Ben Kwa 2015/01/30 23:13:09 I think this is the reason your refactoring addres
Steve McKay 2015/01/30 23:18:02 But the issue was only when I had individually sel
289 this.rejectScan; 292 get resolve() { return this.resolver_.resolve.bind(null, this); },
290 293
291 /** @private {!Promise.<!importer.ScanResult>} */ 294 /** @return {function(*=)} */
292 this.finishedPromise_ = new Promise( 295 get reject() { return this.resolver_.reject; }
293 function(resolve, reject) {
294 this.resolveScan = function() {
295 this.settled_ = true;
296 resolve(this);
297 }.bind(this);
298
299 this.rejectScan = function() {
300 this.settled_ = true;
301 reject();
302 };
303 }.bind(this));
304 }; 296 };
305 297
306 /** @override */ 298 /** @override */
307 importer.DefaultScanResult.prototype.isFinal = function() { 299 importer.DefaultScanResult.prototype.isFinal = function() {
308 return this.settled_; 300 return this.resolver_.settled;
309 }; 301 };
310 302
311 importer.DefaultScanResult.prototype.isInvalidated = function() { 303 importer.DefaultScanResult.prototype.isInvalidated = function() {
312 return this.invalidated_; 304 return this.invalidated_;
313 }; 305 };
314 306
315 /** @override */ 307 /** @override */
316 importer.DefaultScanResult.prototype.getFileEntries = function() { 308 importer.DefaultScanResult.prototype.getFileEntries = function() {
317 return this.fileEntries_; 309 return this.fileEntries_;
318 }; 310 };
319 311
320 /** @override */ 312 /** @override */
321 importer.DefaultScanResult.prototype.getTotalBytes = function() { 313 importer.DefaultScanResult.prototype.getTotalBytes = function() {
322 return this.totalBytes_; 314 return this.totalBytes_;
323 }; 315 };
324 316
325 /** @override */ 317 /** @override */
326 importer.DefaultScanResult.prototype.getScanDurationMs = function() { 318 importer.DefaultScanResult.prototype.getScanDurationMs = function() {
327 return this.lastScanActivity_.getTime() - this.scanStarted_.getTime(); 319 return this.lastScanActivity_.getTime() - this.scanStarted_.getTime();
328 }; 320 };
329 321
330 /** @override */ 322 /** @override */
331 importer.DefaultScanResult.prototype.whenFinal = function() { 323 importer.DefaultScanResult.prototype.whenFinal = function() {
332 return this.finishedPromise_; 324 return this.resolver_.promise;
333 }; 325 };
334 326
335 /** 327 /**
336 * Invalidates this scan. 328 * Invalidates this scan.
337 */ 329 */
338 importer.DefaultScanResult.prototype.invalidateScan = function() { 330 importer.DefaultScanResult.prototype.invalidateScan = function() {
339 this.invalidated_ = true; 331 this.invalidated_ = true;
340 }; 332 };
341 333
342 /** 334 /**
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 if (!this.watchedDirectories_[event.entry.toURL()]) 490 if (!this.watchedDirectories_[event.entry.toURL()])
499 return; 491 return;
500 this.triggered = true; 492 this.triggered = true;
501 for (var url in this.watchedDirectories_) { 493 for (var url in this.watchedDirectories_) {
502 chrome.fileManagerPrivate.removeFileWatch(url, function() {}); 494 chrome.fileManagerPrivate.removeFileWatch(url, function() {});
503 } 495 }
504 chrome.fileManagerPrivate.onDirectoryChanged.removeListener( 496 chrome.fileManagerPrivate.onDirectoryChanged.removeListener(
505 assert(this.listener_)); 497 assert(this.listener_));
506 this.callback_(); 498 this.callback_();
507 }; 499 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698