Container_Peers.swift   [plain text]


import CloudKitCode
import CloudKitCodeProtobuf
import CoreData
import Foundation
import os
import Security
import SecurityFoundation

extension Container {
    internal static func removingDuplicates(vouchers: Set<VoucherMO>) -> Set<VoucherMO> {
        var unique: Set<VoucherMO> = Set()

        for voucher in vouchers {
            if !unique.contains(voucher) {
                unique.insert(voucher)
            }
        }
        return unique
    }

    internal static func onqueueRemoveDuplicateVouchersPerPeer(container: ContainerMO, moc: NSManagedObjectContext) {
        var peersWithUniqueSetOfVouchers: Set<PeerMO> = Set()
        let peers = container.peers as? Set<PeerMO> ?? Set()
        for peer in peers {
            let vouchers = peer.vouchers as? Set<VoucherMO> ?? Set()
            let uniqueSet = Container.removingDuplicates(vouchers: vouchers)
            for voucher in vouchers {
                peer.removeFromVouchers(voucher)
            }
            for voucher in uniqueSet {
                peer.addToVouchers(voucher)
            }
            peersWithUniqueSetOfVouchers.insert(peer)
        }
        for peer in peers {
            container.removeFromPeers(peer)
        }
        for peer in peersWithUniqueSetOfVouchers {
            container.addToPeers(peer)
        }
    }
}