summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md11
-rw-r--r--Makefile2
-rw-r--r--Sources/configuration.swift2
-rw-r--r--Sources/itunes_source.swift57
-rw-r--r--Sources/lyricli.swift2
-rw-r--r--Sources/lyrics_engine.swift8
-rw-r--r--Sources/source_manager.swift3
7 files changed, 75 insertions, 10 deletions
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