mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-22 11:03:21 -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
|
// refresh library
|
||||||
guard let data = try await fetchData() else {
|
guard let data = try await fetchData() else {
|
||||||
|
// 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
|
error = nil
|
||||||
process.state = .complete
|
process.state = .complete
|
||||||
return
|
return
|
||||||
|
} else {
|
||||||
|
error = LibraryRefreshError.process
|
||||||
|
process.state = .error
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
error = nil
|
||||||
|
process.state = .complete
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let parser = try await parse(data: data)
|
let parser = try await parse(data: data)
|
||||||
// delete all old ISO Lang Code entries if needed, by passing in an empty parser
|
// delete all old ISO Lang Code entries if needed, by passing in an empty parser
|
||||||
@ -139,6 +159,22 @@ final class LibraryViewModel: ObservableObject {
|
|||||||
CategoriesToLanguages.save(dictionary)
|
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.
|
/// The fetched content is filtered by the languages set in settings.
|
||||||
/// We need to make sure, whatever was set by the user is
|
/// We need to make sure, whatever was set by the user is
|
||||||
/// still on the list of languages we now have from the feed
|
/// still on the list of languages we now have from the feed
|
||||||
|
Loading…
x
Reference in New Issue
Block a user