From d0705bff97871fc62a9d7737dadbe4fdb39b2f79 Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Sat, 20 May 2017 11:19:19 -0500 Subject: Remove async lock even if track not found --- Sources/lyrics_engine.swift | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) 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 { -- cgit From 893a0a9b70b5c436802afccfd9639523676b39a6 Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Sat, 20 May 2017 11:19:57 -0500 Subject: Add iTunes source manager It includes support for internet streams (tested with soma.fm) and regular songs --- Sources/itunes_source.swift | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Sources/itunes_source.swift 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 + } + +} -- cgit From f24ce9a23fbe1eeb017b41c426eb2577dd9bc230 Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Sat, 20 May 2017 11:21:30 -0500 Subject: Add iTunes source to available sources --- Sources/source_manager.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 -- cgit From 56f3eeec7d0a706a017bd4edea8905d717e96f3b Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Sat, 20 May 2017 11:21:39 -0500 Subject: Include iTunes in default sources --- Sources/configuration.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 -- cgit From 4c5df35e2af0d6c048e9b366d50ef740cfe0a728 Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Sat, 20 May 2017 11:27:22 -0500 Subject: Update changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 029adac..57aa843 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ 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/). +## Unreleased +### Added +- iTunes Source Support + +### Fixed +- Lyricli freezes when no track found + ## 0.1.0 - 2017-05-20 ### Added - Documentation with Jazzy / SourceKitten -- cgit From 6536622bd1946cf297a311a946d5ad9eba126263 Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Sat, 20 May 2017 11:29:51 -0500 Subject: Update CHANGELOG --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57aa843..fc42b0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,12 +4,13 @@ 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/). -## Unreleased +## [0.2.0] ### Added - iTunes Source Support ### Fixed - Lyricli freezes when no track found +- README URLs ## 0.1.0 - 2017-05-20 ### Added @@ -23,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 -- cgit From b7375241b8ca1e34d7aca4aa77414f699985cdf7 Mon Sep 17 00:00:00 2001 From: Ben Beltran Date: Sat, 20 May 2017 11:30:21 -0500 Subject: Update the Version --- Makefile | 2 +- Sources/lyricli.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/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 -- cgit