Skip to content

Commit

Permalink
fix: Issue with detecting language to download xcstrings files (#312)
Browse files Browse the repository at this point in the history
  • Loading branch information
serhii-londar authored Feb 6, 2025
1 parent dda77df commit 19c7e6d
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 33 deletions.
4 changes: 4 additions & 0 deletions Sources/CrowdinSDK/CrowdinFileSystem/File.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ class ReadWriteFile<T: ReadWriteProtocol>: File {
guard let file = self.file else { return }
file.write(to: self.path)
}

func read() {
self.file = T.read(from: self.path)
}
}

#if os(iOS) || os(tvOS) || os(watchOS)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ protocol LocalizationProviderProtocol {
var localStorage: LocalLocalizationStorageProtocol { get }
var remoteStorage: RemoteLocalizationStorageProtocol { get }

var localization: String { get set }
var localization: String { get set }
var localizations: [String] { get }

func refreshLocalization()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ class CrowdinLocalizationDownloader: CrowdinDownloaderProtocol {
xcstrings.forEach { filePath in
let download = CrowdinXcstringsDownloadOperation(filePath: filePath,
localization: localization,
language: manifestManager.xcstringsLanguage,
xcstringsLanguage: manifestManager.xcstringsLanguage,
timestamp: timestamp,
contentDeliveryAPI: contentDeliveryAPI)
download.completion = { [weak self] (strings, plurals, error) in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,49 +9,59 @@ import Foundation

final class FileEtagStorage: AnyEtagStorage {
private static let fileName = "Etags.json"
private let queue = DispatchQueue(label: "com.crowdin.FileEtagStorage")
let localization: String
let dictionaryFile: DictionaryFile

var etags: [String: [String: String]] {
get {
(dictionaryFile.file as? [String: [String: String]]) ?? [String: [String: String]]()
}
set {
dictionaryFile.file = newValue
try? dictionaryFile.save()
}
private var dictionaryFile: DictionaryFile

private func getEtags() -> [String: [String: String]] {
dictionaryFile.read()
return (dictionaryFile.file as? [String: [String: String]]) ?? [:]
}

init(localization: String) {
self.localization = localization
dictionaryFile = DictionaryFile(path: CrowdinFolder.shared.path + "/" + FileEtagStorage.fileName)
let path = CrowdinFolder.shared.path + "/" + FileEtagStorage.fileName
self.dictionaryFile = DictionaryFile(path: path)
if !dictionaryFile.isCreated {
dictionaryFile.create()
}
}

func save(etag: String?, for file: String) {
var localizationEtags = etags[localization] ?? [:]
localizationEtags[file] = etag
etags[localization] = localizationEtags
queue.sync {
var currentEtags = getEtags()
var localizationEtags = currentEtags[localization] ?? [:]
localizationEtags[file] = etag
currentEtags[localization] = localizationEtags
dictionaryFile.file = currentEtags
try? self.dictionaryFile.save()
}
}

func etag(for file: String) -> String? {
etags[localization]?[file]
queue.sync {
let currentEtags = getEtags()
return currentEtags[localization]?[file]
}
}

func clear() {
etags[localization] = nil
queue.sync {
var currentEtags = getEtags()
currentEtags[localization] = nil
dictionaryFile.file = currentEtags
try? self.dictionaryFile.save()
}
}

func clear(for file: String) {
var localizationEtags = etags[localization] ?? [:]
localizationEtags[file] = nil
etags[localization] = localizationEtags
queue.sync {
var currentEtags = getEtags()
var localizationEtags = currentEtags[localization] ?? [:]
localizationEtags[file] = nil
currentEtags[localization] = localizationEtags
dictionaryFile.file = currentEtags
try? self.dictionaryFile.save()
}
}

/// Remove file
static func clear() {
try? DictionaryFile(path: CrowdinFolder.shared.path + "/" + FileEtagStorage.fileName).remove()
let path = CrowdinFolder.shared.path + "/" + FileEtagStorage.fileName
try? DictionaryFile(path: path).remove()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -174,18 +174,18 @@ class CrowdinXcstringsDownloadOperation: CrowdinDownloadOperation {
var completion: CrowdinDownloadOperationCompletion? = nil
let localization: String

init(filePath: String, localization: String, language: String, timestamp: TimeInterval?, contentDeliveryAPI: CrowdinContentDeliveryAPI, completion: CrowdinDownloadOperationCompletion?) {
init(filePath: String, localization: String, xcstringsLanguage: String, timestamp: TimeInterval?, contentDeliveryAPI: CrowdinContentDeliveryAPI, completion: CrowdinDownloadOperationCompletion?) {
self.localization = localization
self.timestamp = timestamp
self.eTagStorage = FileEtagStorage(localization: language)
self.eTagStorage = FileEtagStorage(localization: xcstringsLanguage)
super.init(filePath: filePath, contentDeliveryAPI: contentDeliveryAPI)
self.completion = completion
}

required init(filePath: String, localization: String, language: String, timestamp: TimeInterval?, contentDeliveryAPI: CrowdinContentDeliveryAPI) {
required init(filePath: String, localization: String, xcstringsLanguage: String, timestamp: TimeInterval?, contentDeliveryAPI: CrowdinContentDeliveryAPI) {
self.localization = localization
self.timestamp = timestamp
self.eTagStorage = FileEtagStorage(localization: language)
self.eTagStorage = FileEtagStorage(localization: xcstringsLanguage)
super.init(filePath: filePath, contentDeliveryAPI: contentDeliveryAPI)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class ManifestManager {
var timestamp: TimeInterval? { manifest?.timestamp }
var customLanguages: [CustomLangugage] { manifest?.customLanguages ?? [] }
var mappingFiles: [String] { manifest?.mapping ?? [] }
var xcstringsLanguage: String { languages?.sorted().first ?? sourceLanguage }
var xcstringsLanguage: String { languages?.first ?? sourceLanguage }

var iOSLanguages: [String] {
return self.languages?.compactMap({ self.iOSLanguageCode(for: $0) }) ?? []
Expand Down

0 comments on commit 19c7e6d

Please sign in to comment.