drive-watch.js
Watch for drive mount/eject events in OS X
Current status
API is subject to change in later versions (v0.4.0). No tests but it seems to work. OS X only, with untested support for Ubuntu.
Usage
Watches drives attached to the system and calls a function when a drive is mounted/ejected.
Call new DriveWatch(handler)
then call .start()
.
.start()
returns a Promise which resolves when watching has begun. It returns an array of the names of drives currently mounted.
handler
is called thereafter whenever a drive is mounted or ejected. handler
is called with arguments (eventType, driveName)
.
.drives
contains an array of the names of currently mounted drives.
Call .stop()
to stop watching.
Example
var DriveWatch = ; var dw = { // Called when a drive is mounted/ejected console;}; dwstart
This outputs:
// Initial outputDrives: 'Macintosh HD' // Connect a driveEvent: mount - MyDrive // Eject the driveEvent: eject - MyDrive
Options
scanInterval
In case of fs.watch
not registering a drive being mounted/ejected (happens sometimes on OS X when a drive is pulled without being safely ejected), drive-watch
also scans the drives periodically and calls the handler accordingly.
options.scanInterval
sets the interval in milliseconds that a scan is performed. Set to a falsy value (e.g. 0
) to disable periodic scanning.
// Scan once a minutevar dw = { /* handle event */ } scanInterval: 60000 ;
// Disable periodic scanningvar dw = { /* handle event */ } scanInterval: 0 ;
handler
An alternative way to provide the event handler.
var dw = { /* handle event */ } scanInterval: 10000 ; // ...is same asvar dw = { /* handle event */ } scanInterval: 10000 ;
Tests
Use npm test
to run the tests. Use npm run cover
to check coverage.
Changelog
See changelog.md
Issues
If you discover a bug, please raise an issue on Github. https://github.com/overlookmotel/drive-watch/issues
Contribution
Pull requests are very welcome. Please:
- ensure all tests pass before submitting PR
- add an entry to changelog
- add tests for new features
- document new functionality/API additions in README