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

Unified Diff: watcher/lib/src/file_watcher/native.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « watcher/lib/src/file_watcher.dart ('k') | watcher/lib/src/file_watcher/polling.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: watcher/lib/src/file_watcher/native.dart
diff --git a/watcher/lib/src/file_watcher/native.dart b/watcher/lib/src/file_watcher/native.dart
deleted file mode 100644
index 1862e7b05cdd259311681d0c19a0a6564cd73a1e..0000000000000000000000000000000000000000
--- a/watcher/lib/src/file_watcher/native.dart
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library watcher.file_watcher.native;
-
-import 'dart:async';
-import 'dart:io';
-
-import '../file_watcher.dart';
-import '../resubscribable.dart';
-import '../utils.dart';
-import '../watch_event.dart';
-
-/// Uses the native file system notifications to watch for filesystem events.
-///
-/// Single-file notifications are much simpler than those for multiple files, so
-/// this doesn't need to be split out into multiple OS-specific classes.
-class NativeFileWatcher extends ResubscribableWatcher implements FileWatcher {
- NativeFileWatcher(String path)
- : super(path, () => new _NativeFileWatcher(path));
-}
-
-class _NativeFileWatcher implements FileWatcher, ManuallyClosedWatcher {
- final String path;
-
- Stream<WatchEvent> get events => _eventsController.stream;
- final _eventsController = new StreamController<WatchEvent>.broadcast();
-
- bool get isReady => _readyCompleter.isCompleted;
-
- Future get ready => _readyCompleter.future;
- final _readyCompleter = new Completer();
-
- StreamSubscription _subscription;
-
- _NativeFileWatcher(this.path) {
- _listen();
-
- // We don't need to do any initial set-up, so we're ready immediately after
- // being listened to.
- _readyCompleter.complete();
- }
-
- void _listen() {
- // Batch the events together so that we can dedup them.
- _subscription = new File(path).watch()
- .transform(new BatchedStreamTransformer<FileSystemEvent>())
- .listen(_onBatch, onError: _eventsController.addError, onDone: _onDone);
- }
-
- void _onBatch(List<FileSystemEvent> batch) {
- if (batch.any((event) => event.type == FileSystemEvent.DELETE)) {
- // If the file is deleted, the underlying stream will close. We handle
- // emitting our own REMOVE event in [_onDone].
- return;
- }
-
- _eventsController.add(new WatchEvent(ChangeType.MODIFY, path));
- }
-
- _onDone() async {
- var fileExists = await new File(path).exists();
-
- // Check for this after checking whether the file exists because it's
- // possible that [close] was called between [File.exists] being called and
- // it completing.
- if (_eventsController.isClosed) return;
-
- if (fileExists) {
- // If the file exists now, it was probably removed and quickly replaced;
- // this can happen for example when another file is moved on top of it.
- // Re-subscribe and report a modify event.
- _eventsController.add(new WatchEvent(ChangeType.MODIFY, path));
- _listen();
- } else {
- _eventsController.add(new WatchEvent(ChangeType.REMOVE, path));
- close();
- }
- }
-
- void close() {
- if (_subscription != null) _subscription.cancel();
- _subscription = null;
- _eventsController.close();
- }
-}
« no previous file with comments | « watcher/lib/src/file_watcher.dart ('k') | watcher/lib/src/file_watcher/polling.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698