From: Ben Beltran Date: Sat, 25 Nov 2017 19:32:09 +0000 (-0600) Subject: Merge branch 'release/0.3.0' X-Git-Tag: 0.3.0 X-Git-Url: https://git.r.bdr.sh/rbdr/lyricli/commitdiff_plain/f6029252776bddf6ec1e8d4f0328582d94bec280?hp=11ad3677e9c82da39494ee75fbff56695df0d2b9 Merge branch 'release/0.3.0' --- diff --git a/CHANGELOG.md b/CHANGELOG.md index fc42b0d..6c63ee9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 966e0e1..b91c725 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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 diff --git a/Makefile b/Makefile index 6e2d27d..6bbe735 100644 --- 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: 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 + } + +} +