]> git.r.bdr.sh - rbdr/lyricli/commitdiff
Added Spotify source support (#2)
authorEssau Ramirez <redacted>
Sat, 25 Nov 2017 19:22:29 +0000 (13:22 -0600)
committerRubén Beltrán del Río <redacted>
Sat, 25 Nov 2017 19:22:29 +0000 (13:22 -0600)
* Added Spotify source support. Fixes #1

* Handle empty track being returned from itunes

CHANGELOG.md
Sources/configuration.swift
Sources/itunes_source.swift
Sources/source_manager.swift
Sources/spotify_source.swift [new file with mode: 0644]

index fc42b0d41803263ccc460215feb4c4be09e7f37c..0e78b44d545e9b1635d3f8f9cbb08d338b75b428 100644 (file)
@@ -4,6 +4,9 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
 
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
 
+## [0.3.0]
+- Spotify Source Support
+
 ## [0.2.0]
 ### Added
 - iTunes Source Support
 ## [0.2.0]
 ### Added
 - iTunes Source Support
index 1db36959f2367a38e218ac3521049924e3308686..05e28021ec4429a03b81d3508030e1c55e52c708 100644 (file)
@@ -8,7 +8,7 @@ class Configuration {
     // Default options, will be automatically written to the global config if
     // not found.
     private var configuration: [String: Any] =  [
     // 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
     ]
 
     // The shared instance of the object
index 449dd8a2e8dc83a1d98ad8a3385a610524712c83..6f4aef97f9787a0554743946aa068ad6c283387d 100644 (file)
@@ -44,6 +44,10 @@ class ItunesSource: Source {
                     if let name = track.name {
                         if let artist = track.artist {
 
                     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)
                         }
                     }
                             return Track(withName: name, andArtist: artist)
                         }
                     }
index aaac6963dfacef66482e3a1f7f054eb0138b5010..e6c42da6f66419937a31a5457893d339b1b32836 100644 (file)
@@ -4,7 +4,8 @@ class SourceManager {
     // List of sources enabled for the crurent platform
     private var availableSources: [String: Source] = [
         "arguments": ArgumentsSource(),
     // 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
     ]
 
     // 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 (file)
index 0000000..2e56c8e
--- /dev/null
@@ -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
+    }
+
+}
+