From b6fc572a13d13ffacf18e2b5971ce14e2952d846 Mon Sep 17 00:00:00 2001 From: Dylan Vorster Date: Sun, 2 Aug 2015 22:23:23 +0200 Subject: [PATCH 1/4] Added support for optionally fetching artwork as base64 --- .gitignore | 91 ++++++++- applescripts/ApplicationLib.applescript | 4 - applescripts/ApplicationLib.scpt | Bin 1506 -> 0 bytes applescripts/ITunesTransport.applescript | 230 ++++++++++++----------- applescripts/ITunesTransport.scpt | Bin 19902 -> 21102 bytes index.js | 39 +++- package.json | 25 ++- 7 files changed, 269 insertions(+), 120 deletions(-) delete mode 100644 applescripts/ApplicationLib.applescript delete mode 100644 applescripts/ApplicationLib.scpt diff --git a/.gitignore b/.gitignore index b512c09..a345416 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,90 @@ -node_modules \ No newline at end of file +# Created by https://www.gitignore.io + +### OSX ### +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml +.nb-gradle/ + + +### Windows ### +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + + +### Node ### +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules diff --git a/applescripts/ApplicationLib.applescript b/applescripts/ApplicationLib.applescript deleted file mode 100644 index 26389ba..0000000 --- a/applescripts/ApplicationLib.applescript +++ /dev/null @@ -1,4 +0,0 @@ -on ApplicationIsRunning(appName) - tell application "System Events" to set appNameIsRunning to exists (processes where name is appName) - return appNameIsRunning -end ApplicationIsRunning \ No newline at end of file diff --git a/applescripts/ApplicationLib.scpt b/applescripts/ApplicationLib.scpt deleted file mode 100644 index 0727bfb1fabe7de62784f3f35507c861cf2f5ad8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1506 zcmb_cOHUL*5dOM%cifF8j=SN-i6i6r;ep|yXruvH zjtCSq5{e28^~4O#=(FUTd^ND3{n$>R0gZ+taU!-MU(h6*HmANJjLK_- zx*Yp=p+%#GVUn;7g+9&Fft^Uf7z$mcWuYBuIEI2XYuY*agp7Pla_Sf;24(MJ;9Z>z zf|+U&83dEld4o*ELIeFX$jS#qp$FtA6d`;uxoSbD35&H zE6@8yFXZ8phsC=G&vG{#>xupMs4Lzdpuo}3(MKGIx5Fq@Yb{{RpDerOg#xxmEuapR zG+OqnO{UOcLnlkbdjj|#y(2ZU4+@|?&T_!Cn(3U(yPl7_F(Zhq4 zr?xz;``9!yvE**PwI}k}mM3++Yjg$AKFb%LHaN?%%)l9Tl5)Pyhe` diff --git a/applescripts/ITunesTransport.applescript b/applescripts/ITunesTransport.applescript index 27baaa8..b5bcdab 100644 --- a/applescripts/ITunesTransport.applescript +++ b/applescripts/ITunesTransport.applescript @@ -1,142 +1,154 @@ -property ApplicationLib : load script POSIX file "ApplicationLib.scpt" +on ApplicationIsRunning(appName) + tell application "System Events" to set appNameIsRunning to exists (processes where name is appName) + return appNameIsRunning +end ApplicationIsRunning on IsRunning() - tell ApplicationLib - return ApplicationIsRunning("iTunes") - end tell + return ApplicationIsRunning("iTunes") end IsRunning on IsPlaying() - tell ApplicationLib - if ApplicationIsRunning("iTunes") then - tell application "iTunes" - return player state is playing - end tell - else - return false - end if - end tell + if ApplicationIsRunning("iTunes") then + tell application "iTunes" + return player state is playing + end tell + else + return false + end if end IsPlaying +on GetCurrentArt() + if IsPlaying() then + tell application "iTunes" + if not (exists current track) then return null + return (get raw data of artwork 1 of current track) + end tell + else + return "null" + end if +end GetCurrentArt + on GetCurrentTrack() - if IsPlaying() then - tell application "iTunes" - if not (exists current track) then return null - set trackName to (get name of current track) - set trackArtist to (get artist of current track) - set trackAlbum to (get album of current track) - return "{\"name\":\"" & trackName & "\",\"artist\":\"" & trackArtist & "\",\"album\":\"" & trackAlbum & "\"}" - end tell - else - return "null" - end if + if IsPlaying() then + tell application "iTunes" + if not (exists current track) then return null + set trackName to (get name of current track) + set trackArtist to (get artist of current track) + set trackAlbum to (get album of current track) + return "{\"name\":\"" & trackName & "\",\"artist\":\"" & trackArtist & "\",\"album\":\"" & trackAlbum & "\"}" + end tell + else + return "null" + end if end GetCurrentTrack on PausePlaying() - if IsRunning() then - tell application "iTunes" - pause - end tell - end if - return "{\"ok\":true}" + if IsRunning() then + tell application "iTunes" + pause + end tell + end if + return "{\"ok\":true}" end PausePlaying on StartPlaying() - tell application "iTunes" - launch - play - end tell - return GetCurrentTrack() + tell application "iTunes" + launch + play + end tell + return GetCurrentTrack() end StartPlaying on StopPlaying() - if IsRunning() then - tell application "iTunes" to stop - end if - return "{\"ok\":true}" + if IsRunning() then + tell application "iTunes" to stop + end if + return "{\"ok\":true}" end StopPlaying on PlayNextTrack() - if not IsRunning() then - tell application "iTunes" - activate - end tell - end if - tell application "iTunes" - next track - end tell - StartPlaying() + if not IsRunning() then + tell application "iTunes" + activate + end tell + end if + tell application "iTunes" + next track + end tell + StartPlaying() end PlayNextTrack on PlayPreviousTrack() - if not IsRunning() then - tell application "iTunes" - activate - end tell - end if - tell application "iTunes" - previous track - end tell - StartPlaying() + if not IsRunning() then + tell application "iTunes" + activate + end tell + end if + tell application "iTunes" + previous track + end tell + StartPlaying() end PlayPreviousTrack on FadeOut() - if IsRunning() and IsPlaying() - tell application "iTunes" - set originalVol to sound volume - set currentVol to sound volume - repeat with currentVol from sound volume to 0 by -1 - set sound volume to currentVol - delay 0.02 - end repeat - end tell - StopPlaying() - tell application "iTunes" - set sound volume to originalVol - end tell - end if + if IsRunning() and IsPlaying() then + tell application "iTunes" + set originalVol to sound volume + set currentVol to sound volume + repeat with currentVol from sound volume to 0 by -1 + set sound volume to currentVol + delay 0.02 + end repeat + end tell + StopPlaying() + tell application "iTunes" + set sound volume to originalVol + end tell + end if end FadeOut on FadeIn() - if not IsRunning() then - tell application "iTunes" - activate - end tell - end if - if not IsPlaying() then - tell application "iTunes" - set originalVol to sound volume - set currentVol to 0 - set sound volume to 0 - play - repeat with currentVol from 0 to originalVol by 1 - set sound volume to currentVol - delay 0.02 - end repeat - end tell - return GetCurrentTrack() - end if + if not IsRunning() then + tell application "iTunes" + activate + end tell + end if + if not IsPlaying() then + tell application "iTunes" + set originalVol to sound volume + set currentVol to 0 + set sound volume to 0 + play + repeat with currentVol from 0 to originalVol by 1 + set sound volume to currentVol + delay 0.02 + end repeat + end tell + return GetCurrentTrack() + end if end FadeIn on run argv - set command to item 1 of argv - if command is "currenttrack" then - return GetCurrentTrack() - else if command is "play" - StartPlaying() - else if command is "pause" - PausePlaying() - else if command is "stop" - StopPlaying() - else if command is "next" - PlayNextTrack() - else if command is "previous" - PlayPreviousTrack() - else if command is "fadeout" - FadeOut() - else if command is "fadein" - FadeIn() - else - return "{\"error\":\"Unsupported command\"}" - end if + set command to item 1 of argv + if command is "currenttrack" then + return GetCurrentTrack() + else if command is "play" then + StartPlaying() + else if command is "pause" then + PausePlaying() + else if command is "stop" then + StopPlaying() + else if command is "next" then + PlayNextTrack() + else if command is "previous" then + PlayPreviousTrack() + else if command is "fadeout" then + FadeOut() + else if command is "fadein" then + FadeIn() + else if command is "art" then + return GetCurrentArt() + else + return "{\"error\":\"Unsupported command\"}" + end if end run \ No newline at end of file diff --git a/applescripts/ITunesTransport.scpt b/applescripts/ITunesTransport.scpt index 138dcacf7a37970498aa7d126cb939eee91545df..e1cab2e50c806827cbe46bbd67dcc31137ced9c9 100644 GIT binary patch literal 21102 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 o_=S Date: Sun, 2 Aug 2015 22:29:04 +0200 Subject: [PATCH 2/4] Added docs, and small hotfi --- index.js | 4 +++- readme.md | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index f5d1ac5..bbec2df 100644 --- a/index.js +++ b/index.js @@ -145,4 +145,6 @@ Playback.prototype.setVolume = function(volume, callback) { this.runTransportScript('setvolume ' + volume, callback); }; -module.exports = new Playback(); +module.exports = function(opts){ + return new Playback(opts); +}; diff --git a/readme.md b/readme.md index d691a30..1d16b40 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,7 @@ Control the iTunes transport on OS X and Windows and receive track change events If you are in public, plug in some headphones or lower your volume, then: - var itunes = require('playback'); + var itunes = require('playback')({fetchArtwork:true}); itunes.on('playing', function(data){ console.dir(data);} ); itunes.on('paused', function(data){ console.log('paused');} ); itunes.play(); @@ -15,7 +15,9 @@ Pause, play, and change tracks in iTunes and watch the Node console. # methods - var itunes = require('playback') + var itunes = require('playback')(opts) + +* opts.fetchArtwork (boolean) - If true, will also fetch artwork as base64 and add the field called 'art' to the current track ## itunes.play([callback]) @@ -97,6 +99,10 @@ With [npm](https://npmjs.org) do: # release notes +## 0.3.0 + +Add ``art`` property to current track (Mac only) + ## 0.2.0 Add ``setVolume`` command (Windows only) From 62193c7492bdd62a42db04fc2a637dacc6c12852 Mon Sep 17 00:00:00 2001 From: Dylan Vorster Date: Sun, 2 Aug 2015 22:29:04 +0200 Subject: [PATCH 3/4] Added docs, and small hotfix --- index.js | 4 +++- readme.md | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index f5d1ac5..bbec2df 100644 --- a/index.js +++ b/index.js @@ -145,4 +145,6 @@ Playback.prototype.setVolume = function(volume, callback) { this.runTransportScript('setvolume ' + volume, callback); }; -module.exports = new Playback(); +module.exports = function(opts){ + return new Playback(opts); +}; diff --git a/readme.md b/readme.md index d691a30..1d16b40 100644 --- a/readme.md +++ b/readme.md @@ -6,7 +6,7 @@ Control the iTunes transport on OS X and Windows and receive track change events If you are in public, plug in some headphones or lower your volume, then: - var itunes = require('playback'); + var itunes = require('playback')({fetchArtwork:true}); itunes.on('playing', function(data){ console.dir(data);} ); itunes.on('paused', function(data){ console.log('paused');} ); itunes.play(); @@ -15,7 +15,9 @@ Pause, play, and change tracks in iTunes and watch the Node console. # methods - var itunes = require('playback') + var itunes = require('playback')(opts) + +* opts.fetchArtwork (boolean) - If true, will also fetch artwork as base64 and add the field called 'art' to the current track ## itunes.play([callback]) @@ -97,6 +99,10 @@ With [npm](https://npmjs.org) do: # release notes +## 0.3.0 + +Add ``art`` property to current track (Mac only) + ## 0.2.0 Add ``setVolume`` command (Windows only) From 5352f144bc5827637b220de05f807d498f2a8d36 Mon Sep 17 00:00:00 2001 From: Dylan Vorster Date: Sun, 2 Aug 2015 22:33:24 +0200 Subject: [PATCH 4/4] fix demo --- demo.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo.js b/demo.js index a22a2fb..ed09ba9 100644 --- a/demo.js +++ b/demo.js @@ -1,4 +1,4 @@ -var t = require('./'); +var t = require('./')(); t.on('playing', function(data){ console.dir(data);} ); t.on('paused', function(data){ console.log('paused');} ); -t.play(); \ No newline at end of file +t.play();