diff options
| author | Essau Ramirez <sauramirez@users.noreply.github.com> | 2017-11-25 13:22:29 -0600 |
|---|---|---|
| committer | Rubén Beltrán del Río <ben@nsovocal.com> | 2017-11-25 13:22:29 -0600 |
| commit | d1a147d40ae00fd1f9f48a0b5e2f8a798849fd3d (patch) | |
| tree | d03dc09446d71ab10b51671c2b1ee781d5373353 /Sources | |
| parent | 772c8a7d231044bbdc50392f3192ea34f0b23288 (diff) | |
Added Spotify source support (#2)
* Added Spotify source support. Fixes #1
* Handle empty track being returned from itunes
Diffstat (limited to 'Sources')
| -rw-r--r-- | Sources/configuration.swift | 2 | ||||
| -rw-r--r-- | Sources/itunes_source.swift | 4 | ||||
| -rw-r--r-- | Sources/source_manager.swift | 3 | ||||
| -rw-r--r-- | Sources/spotify_source.swift | 41 |
4 files changed, 48 insertions, 2 deletions
diff --git a/Sources/configuration.swift b/Sources/configuration.swift index 1db3695..05e2802 100644 --- a/Sources/configuration.swift +++ b/Sources/configuration.swift @@ -8,7 +8,7 @@ class Configuration { // Default options, will be automatically written to the global config if // not found. private var configuration: [String: Any] = [ - "enabled_sources": ["arguments", "itunes"] + "enabled_sources": ["arguments", "itunes", "spotify"] ] // The shared instance of the object diff --git a/Sources/itunes_source.swift b/Sources/itunes_source.swift index 449dd8a..6f4aef9 100644 --- a/Sources/itunes_source.swift +++ b/Sources/itunes_source.swift @@ -44,6 +44,10 @@ class ItunesSource: Source { if let name = track.name { if let artist = track.artist { + // track properties are empty strings if itunes is closed + if (!(name != "" && artist != "")) { + return nil + } return Track(withName: name, andArtist: artist) } } diff --git a/Sources/source_manager.swift b/Sources/source_manager.swift index aaac696..e6c42da 100644 --- a/Sources/source_manager.swift +++ b/Sources/source_manager.swift @@ -4,7 +4,8 @@ class SourceManager { // List of sources enabled for the crurent platform private var availableSources: [String: Source] = [ "arguments": ArgumentsSource(), - "itunes": ItunesSource() + "itunes": ItunesSource(), + "spotify": SpotifySource() ] // Iterate over the sources until we find a track or run out of sources diff --git a/Sources/spotify_source.swift b/Sources/spotify_source.swift new file mode 100644 index 0000000..2e56c8e --- /dev/null +++ b/Sources/spotify_source.swift @@ -0,0 +1,41 @@ +import ScriptingBridge + +// Protocol to obtain the track from Spotify +@objc protocol SpotifyTrack { + @objc optional var name: String {get} + @objc optional var artist: String {get} +} + +// Protocol to interact with Spotify +@objc protocol SpotifyApplication { + @objc optional var currentTrack: SpotifyTrack? {get} +} + +extension SBApplication : SpotifyApplication {} + +// Source that reads track artist and name from current Spotify track +class SpotifySource: Source { + + // Calls the spotify API and returns the current track + var currentTrack: Track? { + + if let spotify: SpotifyApplication = SBApplication(bundleIdentifier: "com.spotify.client") { + + // Attempt to fetch the title from a song + if let currentTrack = spotify.currentTrack { + if let track = currentTrack { + if let name = track.name { + if let artist = track.artist { + + return Track(withName: name, andArtist: artist) + } + } + } + } + } + + return nil + } + +} + |