]> git.r.bdr.sh - rbdr/lyricli/commitdiff
Merge branch 'release/0.3.0' 0.3.0
authorBen Beltran <redacted>
Sat, 25 Nov 2017 19:32:09 +0000 (13:32 -0600)
committerBen Beltran <redacted>
Sat, 25 Nov 2017 19:32:09 +0000 (13:32 -0600)
CHANGELOG.md
CONTRIBUTING.md
Makefile
Sources/configuration.swift
Sources/itunes_source.swift
Sources/lyricli.swift
Sources/source_manager.swift
Sources/spotify_source.swift [new file with mode: 0644]

index fc42b0d41803263ccc460215feb4c4be09e7f37c..6c63ee9d681b92e3acb025b989c738f6c7159df4 100644 (file)
@@ -4,13 +4,21 @@ 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/).
 
+## [0.3.0]
+### Added
+- Spotify Source Support
+
+### Changed
+- Fix case where iTunes returned track when app was closed
+- Fix structure and links in CHANGELOG.md
+
 ## [0.2.0]
 ### Added
 - iTunes Source Support
 
-### Fixed
-- Lyricli freezes when no track found
-- README URLs
+### Changed
+- Fix Lyricli freezes when no track found
+- Fix README URLs
 
 ## 0.1.0 - 2017-05-20
 ### Added
@@ -24,5 +32,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
 - Parsing of options to match legacy lyricli
 - Placeholder for the library with expected endpoints
 
-[Unreleased]: https://github.com/lyricli-app/lyricli/compare/0.1.0...0.2.0
+[0.3.0]: https://github.com/lyricli-app/lyricli/compare/0.2.0...0.3.0
+[0.2.0]: https://github.com/lyricli-app/lyricli/compare/0.1.0...0.2.0
 [Unreleased]: https://github.com/lyricli-app/lyricli/compare/master...develop
index 966e0e1682f1bd35e279f60b0cc4f2b44687670e..b91c725069de2e27b3f5197cc8c46890a5372536 100644 (file)
@@ -8,7 +8,7 @@ support more sources.
 ## The ~~Roadmap~~ ~~Streetmap~~ ~~Pathmap~~ Corridormap
 
 * Writing sources (They're used to automatically obtain artist and song
-  name from
+  name from apps or services)
 * Writing tests
 * Improving code to match idiomatic swift
 * Improving the documentation
index 6e2d27d1aa13740d2807f2c5571f6bd3a890a5af..6bbe7357771803b076b18335c18ccd4648c1712f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@ document: build
                --author Lyricli \
                --author_url https://github.com/lyricli-app \
                --github_url https://github.com/lyricli-app/lyricli \
-               --module-version 0.2.0 \
+               --module-version 0.3.0 \
                --module Lyricli \
 
 clean:
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] =  [
-        "enabled_sources": ["arguments", "itunes"]
+        "enabled_sources": ["arguments", "itunes", "spotify"]
     ]
 
     // 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 {
 
+                            // track properties are empty strings if itunes is closed
+                            if (!(name != "" && artist != "")) {
+                                return nil
+                            }
                             return Track(withName: name, andArtist: artist)
                         }
                     }
index 91e0c5115882d5932f356eb4c215a8293982e8a5..8aeb5c01b530ea74b923080e4b69c985e0828375 100644 (file)
@@ -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
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(),
-        "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 (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
+    }
+
+}
+