From: Ben Beltran Date: Sat, 20 May 2017 16:33:50 +0000 (-0500) Subject: Merge branch 'release/0.2.0' X-Git-Tag: 0.2.0 X-Git-Url: https://git.r.bdr.sh/rbdr/lyricli/commitdiff_plain/8c406cfb43a92d5fcfa522a6d8c579568a3a36cb?hp=ee966aa755acd8eea53c982e43e13aef4f193984 Merge branch 'release/0.2.0' --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 029adac..fc42b0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ 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.2.0] +### Added +- iTunes Source Support + +### Fixed +- Lyricli freezes when no track found +- README URLs + ## 0.1.0 - 2017-05-20 ### Added - Documentation with Jazzy / SourceKitten @@ -16,4 +24,5 @@ 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/olivierlacan/keep-a-changelog/compare/master...develop +[Unreleased]: 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/Makefile b/Makefile index 0f57bd9..6e2d27d 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.1.0 \ + --module-version 0.2.0 \ --module Lyricli \ clean: diff --git a/Sources/configuration.swift b/Sources/configuration.swift index f1a1ee1..1db3695 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"] + "enabled_sources": ["arguments", "itunes"] ] // The shared instance of the object diff --git a/Sources/itunes_source.swift b/Sources/itunes_source.swift new file mode 100644 index 0000000..449dd8a --- /dev/null +++ b/Sources/itunes_source.swift @@ -0,0 +1,57 @@ +import ScriptingBridge + +// Protocol to obtain the track from iTunes +@objc protocol iTunesTrack { + @objc optional var name: String {get} + @objc optional var artist: String {get} +} + +// Protocol to interact with iTunes +@objc protocol iTunesApplication { + @objc optional var currentTrack: iTunesTrack? {get} + @objc optional var currentStreamTitle: String? {get} +} + +extension SBApplication : iTunesApplication {} + +// Source that reads track artist and name from current itunes track +class ItunesSource: Source { + + // Calls the spotify API and returns the current track + var currentTrack: Track? { + + if let iTunes: iTunesApplication = SBApplication(bundleIdentifier: "com.apple.iTunes") { + + // Attempt to fetch the title from a stream + if let currentStreamTitle = iTunes.currentStreamTitle { + if let track = currentStreamTitle { + + let trackComponents = track.characters.split(separator: "-").map(String.init) + + if trackComponents.count == 2 { + let artist = trackComponents[0].trimmingCharacters(in: .whitespaces) + let name = trackComponents[1].trimmingCharacters(in: .whitespaces) + + return Track(withName: name, andArtist: artist) + } + + } + } + + // Attempt to fetch the title from a song + if let currentTrack = iTunes.currentTrack { + if let track = currentTrack { + if let name = track.name { + if let artist = track.artist { + + return Track(withName: name, andArtist: artist) + } + } + } + } + } + + return nil + } + +} diff --git a/Sources/lyricli.swift b/Sources/lyricli.swift index 7d77a51..91e0c51 100644 --- a/Sources/lyricli.swift +++ b/Sources/lyricli.swift @@ -2,7 +2,7 @@ class Lyricli { // Version of the application - static var version = "0.1.0" + static var version = "0.2.0" // Flag that controls whether we should show the track artist and name before // the lyrics diff --git a/Sources/lyrics_engine.swift b/Sources/lyrics_engine.swift index 85e4735..27e0e11 100644 --- a/Sources/lyrics_engine.swift +++ b/Sources/lyrics_engine.swift @@ -36,11 +36,9 @@ class LyricsEngine { // Call the API and unlock when you're done fetchLyricsFromAPI(withURL: url, completionHandler: {lyricsResult -> Void in - if let lyricsResult = lyricsResult { - lyrics = lyricsResult - requestFinished = true - asyncLock.signal() - } + lyrics = lyricsResult + requestFinished = true + asyncLock.signal() }) while !requestFinished { diff --git a/Sources/source_manager.swift b/Sources/source_manager.swift index 5ee1305..aaac696 100644 --- a/Sources/source_manager.swift +++ b/Sources/source_manager.swift @@ -3,7 +3,8 @@ class SourceManager { // List of sources enabled for the crurent platform private var availableSources: [String: Source] = [ - "arguments": ArgumentsSource() + "arguments": ArgumentsSource(), + "itunes": ItunesSource() ] // Iterate over the sources until we find a track or run out of sources