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
- 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
## 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
--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:
// 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
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)
}
}
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
// 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
--- /dev/null
+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
+ }
+
+}
+