summaryrefslogtreecommitdiff
path: root/Sora/Data/Settings/SettingsSyncCoordinator.swift
blob: 4771b37f22af97a273b9ed71815f418d57d3b9a3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import Foundation

actor SettingsSyncCoordinator {
  private var pendingKeys: Set<SettingsSyncKey> = []
  private var isDraining = false

  func enqueue(_ keys: Set<SettingsSyncKey>) -> Bool {
    pendingKeys.formUnion(keys)

    guard !isDraining else { return false }

    isDraining = true

    return true
  }

  func dequeueBatch() -> Set<SettingsSyncKey> {
    guard !pendingKeys.isEmpty else {
      isDraining = false
      return []
    }

    let nextBatch = pendingKeys
    pendingKeys.removeAll()

    return nextBatch
  }
}