mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-22 02:52:39 -04:00
Merge pull request #1063 from kiwix/categories-to-languages-fix-for-etag-304
Fix categories parsing, when eTag 304 is used
This commit is contained in:
commit
4a0d565751
@ -87,9 +87,29 @@ final class LibraryViewModel: ObservableObject {
|
||||
|
||||
// refresh library
|
||||
guard let data = try await fetchData() else {
|
||||
error = nil
|
||||
process.state = .complete
|
||||
return
|
||||
// this is the case when we have no new data (304 http)
|
||||
// but we still need to refresh the memory only stored
|
||||
// zimfile categories to languages dictionary
|
||||
if CategoriesToLanguages.allCategories().count < 2 {
|
||||
let context = Database.shared.viewContext
|
||||
if let zimFiles: [ZimFile] = try? context.fetch(ZimFile.fetchRequest()) {
|
||||
saveCategoryAvailableInLanguages(fromDBZimFiles: zimFiles)
|
||||
// populate library language code if there isn't one set already
|
||||
await setDefaultContentFilterLanguage()
|
||||
|
||||
error = nil
|
||||
process.state = .complete
|
||||
return
|
||||
} else {
|
||||
error = LibraryRefreshError.process
|
||||
process.state = .error
|
||||
return
|
||||
}
|
||||
} else {
|
||||
error = nil
|
||||
process.state = .complete
|
||||
return
|
||||
}
|
||||
}
|
||||
let parser = try await parse(data: data)
|
||||
// delete all old ISO Lang Code entries if needed, by passing in an empty parser
|
||||
@ -138,6 +158,22 @@ final class LibraryViewModel: ObservableObject {
|
||||
}
|
||||
CategoriesToLanguages.save(dictionary)
|
||||
}
|
||||
|
||||
private func saveCategoryAvailableInLanguages(fromDBZimFiles zimFiles: [ZimFile]) {
|
||||
var dictionary: [Category: Set<String>] = [:]
|
||||
for zimFile in zimFiles {
|
||||
let category = Category(rawValue: zimFile.category) ?? .other
|
||||
let allLanguagesForCategory: Set<String>
|
||||
let categoryLanguages: Set<String> = Set<String>(zimFile.languageCode.components(separatedBy: ","))
|
||||
if let existingLanguages = dictionary[category] {
|
||||
allLanguagesForCategory = existingLanguages.union(categoryLanguages)
|
||||
} else {
|
||||
allLanguagesForCategory = categoryLanguages
|
||||
}
|
||||
dictionary[category] = allLanguagesForCategory
|
||||
}
|
||||
CategoriesToLanguages.save(dictionary)
|
||||
}
|
||||
|
||||
/// The fetched content is filtered by the languages set in settings.
|
||||
/// We need to make sure, whatever was set by the user is
|
||||
|
Loading…
x
Reference in New Issue
Block a user