diff --git a/Sources/EeveeSpotify/Lyrics/Models/Genius/GeniusSong.swift b/Sources/EeveeSpotify/Lyrics/Models/Genius/GeniusSong.swift index 98bb3488..25202109 100644 --- a/Sources/EeveeSpotify/Lyrics/Models/Genius/GeniusSong.swift +++ b/Sources/EeveeSpotify/Lyrics/Models/Genius/GeniusSong.swift @@ -2,4 +2,5 @@ import Foundation struct GeniusSong: Decodable { var lyrics: GeniusLyrics -} \ No newline at end of file + var language: String +} diff --git a/Sources/EeveeSpotify/Lyrics/Repositories/GeniusLyricsRepository.swift b/Sources/EeveeSpotify/Lyrics/Repositories/GeniusLyricsRepository.swift index 77fc1bf0..73ff2741 100644 --- a/Sources/EeveeSpotify/Lyrics/Repositories/GeniusLyricsRepository.swift +++ b/Sources/EeveeSpotify/Lyrics/Repositories/GeniusLyricsRepository.swift @@ -145,15 +145,14 @@ struct GeniusLyricsRepository: LyricsRepository { ) let songInfo = try getSongInfo(song.id) - let plainLyrics = songInfo.lyrics.plain - let plainLines = plainLyrics.components(separatedBy: "\n") + let plainLines = songInfo.lyrics.plain.components(separatedBy: "\n") var romanization = LyricsRomanizationStatus.original if hasFoundRomanizedLyrics { romanization = .romanized } - else if plainLyrics.canBeRomanized { + else if songInfo.language.isCanBeRomanizedLanguage { romanization = .canBeRomanized } diff --git a/Sources/EeveeSpotify/Lyrics/Repositories/MusixmatchLyricsRepository.swift b/Sources/EeveeSpotify/Lyrics/Repositories/MusixmatchLyricsRepository.swift index 866bb23b..c1c7f044 100644 --- a/Sources/EeveeSpotify/Lyrics/Repositories/MusixmatchLyricsRepository.swift +++ b/Sources/EeveeSpotify/Lyrics/Repositories/MusixmatchLyricsRepository.swift @@ -233,7 +233,7 @@ class MusixmatchLyricsRepository: LyricsRepository { if romanized { romanization = .romanized } - else if lyricsLines.map({ $0.content }).joined().canBeRomanized { + else if subtitleLanguage.isCanBeRomanizedLanguage { romanization = .canBeRomanized } @@ -256,6 +256,7 @@ class MusixmatchLyricsRepository: LyricsRepository { if let lyricsBody = lyricsMessage["body"] as? [String: Any], let lyrics = lyricsBody["lyrics"] as? [String: Any], + let lyricsLanguage = lyrics["lyrics_language"] as? String, let plainLyrics = lyrics["lyrics_body"] as? String { if let restricted = lyrics["restricted"] as? Bool, restricted { @@ -268,7 +269,7 @@ class MusixmatchLyricsRepository: LyricsRepository { .dropLast() .map { LyricsLineDto(content: $0.lyricsNoteIfEmpty) }, timeSynced: false, - romanization: plainLyrics.canBeRomanized ? .canBeRomanized : .original + romanization: lyricsLanguage.isCanBeRomanizedLanguage ? .canBeRomanized : .original ) } } diff --git a/Sources/EeveeSpotify/Models/Extensions/String+Extension.swift b/Sources/EeveeSpotify/Models/Extensions/String+Extension.swift index fa4e40c0..a10dcd74 100644 --- a/Sources/EeveeSpotify/Models/Extensions/String+Extension.swift +++ b/Sources/EeveeSpotify/Models/Extensions/String+Extension.swift @@ -46,12 +46,16 @@ extension String { ) } + var isCanBeRomanizedLanguage: Bool { + ["ja", "ko", "z1"].contains(self) || self.contains("zh") + } + var canBeRomanized: Bool { let languageRecognizer = NLLanguageRecognizer() languageRecognizer.processString(self) if let code = languageRecognizer.dominantLanguage?.rawValue { - return ["ja", "ko"].contains(code) || code.contains("zh") + return code.isCanBeRomanizedLanguage } return false diff --git a/Sources/EeveeSpotify/Models/Extensions/UserDefaults+Extension.swift b/Sources/EeveeSpotify/Models/Extensions/UserDefaults+Extension.swift index e1cd1743..7b118109 100644 --- a/Sources/EeveeSpotify/Models/Extensions/UserDefaults+Extension.swift +++ b/Sources/EeveeSpotify/Models/Extensions/UserDefaults+Extension.swift @@ -21,6 +21,10 @@ extension UserDefaults { return LyricsSource(rawValue: rawValue)! } + if Locale.isInRegion("JP", orHasLanguage: "ja") { + return .petit + } + return .lrclib } set (newSource) {