summaryrefslogtreecommitdiff
path: root/Sources
diff options
context:
space:
mode:
Diffstat (limited to 'Sources')
-rw-r--r--Sources/configuration.swift2
-rw-r--r--Sources/itunes_source.swift4
-rw-r--r--Sources/lyricli.swift2
-rw-r--r--Sources/source_manager.swift3
-rw-r--r--Sources/spotify_source.swift41
5 files changed, 49 insertions, 3 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/lyricli.swift b/Sources/lyricli.swift
index 91e0c51..8aeb5c0 100644
--- a/Sources/lyricli.swift
+++ b/Sources/lyricli.swift
@@ -2,7 +2,7 @@
class Lyricli {
// Version of the application
- static var version = "0.2.0"
+ static var version = "0.3.0"
// Flag that controls whether we should show the track artist and name before
// the lyrics
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
+ }
+
+}
+