resolve static method

VersionResolution resolve({
  1. required Syncable local,
  2. required Syncable remote,
  3. required ConflictResolutionStrategy strategy,
})

Apply the given strategy to resolve conflicts between local and remote Syncable objects.

Implementation

static VersionResolution resolve({
  required Syncable local,
  required Syncable remote,
  required ConflictResolutionStrategy strategy,
}) {
  switch (strategy) {
    case ConflictResolutionStrategy.serverWins:
      return VersionResolution(
        applyLocal: false,
        applyRemote: true,
        hasConflict: remote.version > local.version,
        winner: ResolutionWinner.remote,
      );

    case ConflictResolutionStrategy.clientWins:
      return VersionResolution(
        applyLocal: true,
        applyRemote: false,
        hasConflict: local.version > remote.version,
        winner: ResolutionWinner.local,
      );

    case ConflictResolutionStrategy.mergeBoth:
      return VersionResolution(
        applyLocal: true,
        applyRemote: true,
        hasConflict: local.version != remote.version,
        winner: ResolutionWinner.merge,
      );

    case ConflictResolutionStrategy.highestVersionWins:
      return _resolveByHighestVersion(local, remote);
  }
}