Skip to content

Commit 2da9850

Browse files
committed
Remove invalid lyrics services
1 parent ee68607 commit 2da9850

26 files changed

+265
-1051
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import PackageDescription
55
let package = Package(
66
name: "LyricsKit",
77
platforms: [
8-
.macOS(.v13),
8+
.macOS(.v11),
99
],
1010
products: [
1111
.library(

Sources/LyricsService/JSONModel/Gecimi/GecimiResponseCover.swift

Lines changed: 0 additions & 24 deletions
This file was deleted.

Sources/LyricsService/JSONModel/Gecimi/GecimiResponseSearchResult.swift

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
public struct LRCLIBResponse: Codable {
3+
let id: Int
4+
let name: String
5+
let trackName: String
6+
let artistName: String
7+
let albumName: String
8+
let duration: Double
9+
let instrumental: Bool
10+
let plainLyrics: String?
11+
let syncedLyrics: String?
12+
}

Sources/LyricsService/JSONModel/LRCLIB/LRCLyrics.swift

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import Foundation
2+
3+
struct SpotifyResponseSingleLyrics: Codable {
4+
struct Lyric: Codable {
5+
struct Line: Codable {
6+
let startTimeMs: String
7+
let words: String
8+
let endTimeMs: String
9+
}
10+
11+
let syncType: String
12+
let lines: [Line]
13+
let provider: String
14+
let providerLyricsID: String
15+
let providerDisplayName: String
16+
let syncLyricsUri: String
17+
let isDenseTypeface: Bool
18+
let language: String
19+
let isRtlLanguage: Bool
20+
let capStatus: String
21+
let isSnippet: Bool
22+
23+
private enum CodingKeys: String, CodingKey {
24+
case syncType
25+
case lines
26+
case provider
27+
case providerLyricsID = "providerLyricsId"
28+
case providerDisplayName
29+
case syncLyricsUri
30+
case isDenseTypeface
31+
case language
32+
case isRtlLanguage
33+
case capStatus
34+
case isSnippet
35+
}
36+
}
37+
38+
struct Color: Codable {
39+
let background: Int
40+
let text: Int
41+
let highlightText: Int
42+
}
43+
44+
let lyrics: Lyric
45+
let colors: Color
46+
let hasVocalRemoval: Bool
47+
}

Sources/LyricsService/Provider/Spotify.swift renamed to Sources/LyricsService/JSONModel/Spotify/SpotifyResponseSearchResult.swift

Lines changed: 1 addition & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
import Regex
2-
import CXShim
31
import Foundation
4-
import LyricsCore
5-
import CXExtensions
62

7-
struct SpotifySearchResponse: Codable {
3+
struct SpotifyResponseSearchResult: Codable {
84
struct Track: Codable {
95
struct Item: Codable {
106
struct Album: Codable {
@@ -153,120 +149,3 @@ struct SpotifySearchResponse: Codable {
153149

154150
let tracks: Track
155151
}
156-
157-
struct SpotifyLyricsResponse: Codable {
158-
struct Lyric: Codable {
159-
struct Line: Codable {
160-
let startTimeMs: String
161-
let words: String
162-
let endTimeMs: String
163-
}
164-
165-
let syncType: String
166-
let lines: [Line]
167-
let provider: String
168-
let providerLyricsID: String
169-
let providerDisplayName: String
170-
let syncLyricsUri: String
171-
let isDenseTypeface: Bool
172-
let language: String
173-
let isRtlLanguage: Bool
174-
let capStatus: String
175-
let isSnippet: Bool
176-
177-
private enum CodingKeys: String, CodingKey {
178-
case syncType
179-
case lines
180-
case provider
181-
case providerLyricsID = "providerLyricsId"
182-
case providerDisplayName
183-
case syncLyricsUri
184-
case isDenseTypeface
185-
case language
186-
case isRtlLanguage
187-
case capStatus
188-
case isSnippet
189-
}
190-
}
191-
192-
struct Color: Codable {
193-
let background: Int
194-
let text: Int
195-
let highlightText: Int
196-
}
197-
198-
let lyrics: Lyric
199-
let colors: Color
200-
let hasVocalRemoval: Bool
201-
}
202-
203-
extension LyricsProviders {
204-
final class Spotify: _LyricsProvider {
205-
typealias LyricsToken = SpotifySearchResponse.Track.Item
206-
207-
let accessToken: String
208-
209-
init(accessToken: String) {
210-
self.accessToken = accessToken
211-
}
212-
213-
static let fakeSpotifyUserAgentconfig: URLSessionConfiguration = {
214-
let fakeSpotifyUserAgentconfig = URLSessionConfiguration.default
215-
fakeSpotifyUserAgentconfig.httpAdditionalHeaders = ["User-Agent": "Spotify/121000760 Win32/0 (PC laptop)"]
216-
return fakeSpotifyUserAgentconfig
217-
}()
218-
219-
static let fakeSpotifyUserAgentSession: URLSession = .init(configuration: fakeSpotifyUserAgentconfig)
220-
}
221-
}
222-
223-
extension LyricsProviders.Spotify {
224-
static let service: String? = "Spotify"
225-
226-
func lyricsSearchPublisher(request: LyricsSearchRequest) -> AnyPublisher<LyricsToken, Never> {
227-
let url: URL
228-
switch request.searchTerm {
229-
case let .keyword(string):
230-
url = URL(string: "https://api.spotify.com/v1/search?q=track:\(string)&type=track&limit=10")!
231-
case let .info(title, artist):
232-
url = URL(string: "https://api.spotify.com/v1/search?q=track:\(title) artist:\(artist)&type=track&limit=10")!
233-
}
234-
235-
var req = URLRequest(url: url)
236-
req.addValue("WebPlayer", forHTTPHeaderField: "app-platform")
237-
req.addValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
238-
return sharedURLSession.cx.dataTaskPublisher(for: req)
239-
.map(\.data)
240-
.decode(type: SpotifySearchResponse.self, decoder: JSONDecoder().cx)
241-
.map(\.tracks.items)
242-
.replaceError(with: [])
243-
.flatMap(Publishers.Sequence.init)
244-
.map { $0 as LyricsToken }
245-
.eraseToAnyPublisher()
246-
}
247-
248-
func lyricsFetchPublisher(token: LyricsToken) -> AnyPublisher<Lyrics, Never> {
249-
let url = URL(string: "https://spclient.wg.spotify.com/color-lyrics/v2/track/\(token.id)?format=json&vocalRemoval=false")!
250-
var request = URLRequest(url: url)
251-
request.addValue("WebPlayer", forHTTPHeaderField: "app-platform")
252-
request.addValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
253-
254-
return Self.fakeSpotifyUserAgentSession.cx.dataTaskPublisher(for: request)
255-
.map(\.data)
256-
.decode(type: SpotifyLyricsResponse.self, decoder: JSONDecoder().cx)
257-
.map {
258-
let lyrics = Lyrics(lines: $0.lyrics.lines.map {
259-
LyricsLine(content: $0.words, position: (Double($0.startTimeMs) ?? 0) / 1000)
260-
}, idTags: [:])
261-
lyrics.idTags[.title] = token.name
262-
lyrics.idTags[.artist] = token.artists.map(\.name).joined(separator: ", ")
263-
lyrics.idTags[.album] = token.album.name
264-
lyrics.length = Double(token.durationMs) / 1000
265-
lyrics.metadata.artworkURL = token.album.images.first?.url
266-
lyrics.metadata.serviceToken = token.id
267-
return lyrics
268-
}
269-
.ignoreError()
270-
.eraseToAnyPublisher()
271-
}
272-
}

Sources/LyricsService/JSONModel/ViewLyrics/ViewLyricsResponseSearchResult.swift

Lines changed: 0 additions & 23 deletions
This file was deleted.

Sources/LyricsService/JSONModel/Xiami/XiamiResponseSearchResult.swift

Lines changed: 0 additions & 62 deletions
This file was deleted.

Sources/LyricsService/LyricsSearchRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ extension LyricsSearchRequest.SearchTerm: CustomStringConvertible {
4444
switch self {
4545
case .keyword(let string):
4646
return string
47-
case .info(let title, let artist):
47+
case .info(let title, _):
4848
return title
4949
}
5050
}

0 commit comments

Comments
 (0)