diff --git a/ACHNBrowserUI/ACHNBrowserUI.xcodeproj/project.pbxproj b/ACHNBrowserUI/ACHNBrowserUI.xcodeproj/project.pbxproj index 6f3877e7..325e64e7 100644 --- a/ACHNBrowserUI/ACHNBrowserUI.xcodeproj/project.pbxproj +++ b/ACHNBrowserUI/ACHNBrowserUI.xcodeproj/project.pbxproj @@ -1507,7 +1507,7 @@ CODE_SIGN_ENTITLEMENTS = ACHNBrowserUI/ACHNBrowserUI.entitlements; CODE_SIGN_IDENTITY = "Apple Development: Thomas Ricouard (7MB55D6BJ5)"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 052012020; + CURRENT_PROJECT_VERSION = 052042020; DEVELOPMENT_ASSET_PATHS = "\"ACHNBrowserUI/Preview Content\""; DEVELOPMENT_TEAM = Z6P74P6T99; ENABLE_PREVIEWS = YES; @@ -1538,7 +1538,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 052012020; + CURRENT_PROJECT_VERSION = 052042020; DEVELOPMENT_ASSET_PATHS = "\"ACHNBrowserUI/Preview Content\""; DEVELOPMENT_TEAM = Z6P74P6T99; ENABLE_PREVIEWS = YES; diff --git a/ACHNBrowserUI/ACHNBrowserUI/fr.lproj/Localizable.strings b/ACHNBrowserUI/ACHNBrowserUI/fr.lproj/Localizable.strings index 2c180272..23f3b03f 100644 --- a/ACHNBrowserUI/ACHNBrowserUI/fr.lproj/Localizable.strings +++ b/ACHNBrowserUI/ACHNBrowserUI/fr.lproj/Localizable.strings @@ -340,8 +340,8 @@ You can cancel anytime with your iTunes account settings. Any unused portion of "Squirrel" = "Écureuil"; "Tiger" = "Tigre"; "Wolf" = "Loup"; -"Like" = "Aime" -"Gifts ideas" = "Idées de cadeaux" +"Like" = "Aime"; +"Gifts ideas" = "Idées de cadeaux"; // ListingRow "Make an Offer" = "Faire une offre"; diff --git a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/Items.swift b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/Items.swift index 932e4140..045bfe09 100644 --- a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/Items.swift +++ b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/Items.swift @@ -147,8 +147,7 @@ public class Items: ObservableObject { if let likes = villagersLike.values.first(where: { $0.id == villager })?.likes { return Deferred { Future { [weak self] resolve in - var categories = Category.APIFurnitures() - categories.append(contentsOf: Category.wardrobe()) + var categories = Category.villagersGifts() guard let weakself = self else { return resolve(.success([])) } @@ -156,16 +155,12 @@ public class Items: ObservableObject { var results: [Item] = [] for (_, dic) in weakself.categories.enumerated() where categories.contains(dic.key) { let items = dic.value - .filter{ $0.colors?.isEmpty == false } - var added = 0 + .filter{ $0.colors?.isEmpty == false && $0.styles?.isEmpty == false } for item in items { let colorsMatch = item.colors!.filter{ likes.contains($0.lowercased()) } - if colorsMatch.count >= 2 { + let styleMatch = item.styles!.filter{ likes.contains($0.lowercased()) } + if colorsMatch.count >= 1 && styleMatch.count >= 1 { results.append(item) - added += 1 - } - if added >= 4 { - break } } } diff --git a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/UserCollection.swift b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/UserCollection.swift index a6767e65..7c3149ee 100644 --- a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/UserCollection.swift +++ b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/UserCollection.swift @@ -33,7 +33,6 @@ public class UserCollection: ObservableObject { private let encoder = JSONEncoder() private let decoder = JSONDecoder() - private static let recordZone = "UserZone" private static let recordType = "UserCollection" private static let recordId = CKRecord.ID(recordName: "CurrentUserCollection") private static let assetKey = "data" @@ -136,19 +135,8 @@ public class UserCollection: ObservableObject { } private func subscribeToCloudKit() { - let zone = CKRecordZone(zoneName: Self.recordZone) - cloudKitDatabase?.save(zone) { (_, _) in } - - cloudKitDatabase?.fetchAllSubscriptions { (sub, _) in - if let sub = sub?.first { - let notif = CKSubscription.NotificationInfo() - notif.shouldSendContentAvailable = true - sub.notificationInfo = notif - - let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [sub], - subscriptionIDsToDelete: nil) - self.cloudKitDatabase?.add(operation) - } else { + cloudKitDatabase?.fetchAllSubscriptions { (subs, _) in + if subs == nil || subs?.isEmpty == true { self.createSubscription() } } @@ -166,14 +154,20 @@ public class UserCollection: ObservableObject { public func reloadFromCloudKit() { cloudKitDatabase?.fetch(withRecordID: Self.recordId) { (record, error) in - self.currentRecord = record - if let asset = record?[Self.assetKey] as? CKAsset, - let url = asset.fileURL { + if record == nil { DispatchQueue.main.async { - self.isSynched = true - _ = self.loadCollection(file: url) - try? FileManager.default.removeItem(at: self.filePath) - try? FileManager.default.copyItem(at: url, to: self.filePath) + self.save() + } + } else { + self.currentRecord = record + if let asset = record?[Self.assetKey] as? CKAsset, + let url = asset.fileURL { + DispatchQueue.main.async { + self.isSynched = true + _ = self.loadCollection(file: url) + try? FileManager.default.removeItem(at: self.filePath) + try? FileManager.default.copyItem(at: url, to: self.filePath) + } } } } @@ -197,8 +191,10 @@ public class UserCollection: ObservableObject { record[Self.assetKey] = asset cloudKitDatabase?.save(record) { (record, error) in - self.currentRecord = record - self.isSynched = true + DispatchQueue.main.async { + self.currentRecord = record + self.isSynched = true + } } } } diff --git a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Category.swift b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Category.swift index 0efcc30a..feb22472 100644 --- a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Category.swift +++ b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Category.swift @@ -145,13 +145,17 @@ public enum Category: String, CaseIterable { } public static func nature() -> [Category] { - return [.fish, .bugs, .fossils] + [.fish, .bugs, .fossils] } public static func icons() -> [Category] { - return [.housewares, .recipes, .floors, .rugs, .wallpapers, .posters, + [.housewares, .recipes, .floors, .rugs, .wallpapers, .posters, .fencing, .music, .tools, .nookmiles, .construction, .tops, .bottoms, .dressup, .headwear, .accessories, .socks, .bags, .umbrellas, .fish, .bugs, .fossils] } + + public static func villagersGifts() -> [Category] { + [.tops, .dressup, .headwear, .accessories] + } } diff --git a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Item.swift b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Item.swift index 4fb23913..3f692666 100644 --- a/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Item.swift +++ b/ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/models/Item.swift @@ -88,6 +88,7 @@ public struct Item: Codable, Equatable, Identifiable, Hashable { public let activeTimes: [[String: Int]]? public let set: String? public let tag: String? + public let styles: [String]? public let themes: [String]? public let colors: [String]? } @@ -176,5 +177,6 @@ public let static_item = Item(name: "Acoustic guitar", activeTimes: nil, set: nil, tag: "Instrument", + styles: nil, themes: nil, colors: nil) diff --git a/ACHNBrowserUI/ACHNBrowserUI/views/todayDashboard/TodayCollectionProgressSection.swift b/ACHNBrowserUI/ACHNBrowserUI/views/todayDashboard/TodayCollectionProgressSection.swift index 3aadbda5..c4b1c5ab 100644 --- a/ACHNBrowserUI/ACHNBrowserUI/views/todayDashboard/TodayCollectionProgressSection.swift +++ b/ACHNBrowserUI/ACHNBrowserUI/views/todayDashboard/TodayCollectionProgressSection.swift @@ -40,6 +40,7 @@ struct TodayCollectionProgressSection: View { shareButton.padding(.top, 12) } else { RowLoadingView(isLoading: .constant(true)) + .frame(height: 100) } } .animation(.interactiveSpring())