]> git.r.bdr.sh - rbdr/lyricli/commitdiff
Merge branch 'release/0.2.0' 0.2.0
authorBen Beltran <redacted>
Sat, 20 May 2017 16:33:50 +0000 (11:33 -0500)
committerBen Beltran <redacted>
Sat, 20 May 2017 16:33:50 +0000 (11:33 -0500)
CHANGELOG.md
Makefile
Sources/configuration.swift
Sources/itunes_source.swift [new file with mode: 0644]
Sources/lyricli.swift
Sources/lyrics_engine.swift
Sources/source_manager.swift

index 029adac42c190111a5616c180715398c1b7476f4..fc42b0d41803263ccc460215feb4c4be09e7f37c 100644 (file)
@@ -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
index 0f57bd9571260d105f519b04f98df26452718ea1..6e2d27d1aa13740d2807f2c5571f6bd3a890a5af 100644 (file)
--- 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:
index f1a1ee1203ac04c5e129d80ff69ab98b96be220a..1db36959f2367a38e218ac3521049924e3308686 100644 (file)
@@ -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 (file)
index 0000000..449dd8a
--- /dev/null
@@ -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
+    }
+
+}
index 7d77a51430a63fa2c0b6badc93fa5a21dc1f2751..91e0c5115882d5932f356eb4c215a8293982e8a5 100644 (file)
@@ -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
index 85e4735eaa00a5027f795285a65b46061d89bcf2..27e0e11f111b0eb86f75192a08824eed585027ef 100644 (file)
@@ -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 {
index 5ee1305c9927cb8968ba2aba05b074c19a3c5b17..aaac6963dfacef66482e3a1f7f054eb0138b5010 100644 (file)
@@ -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