update method

StepData update(
  1. StepCountWithTimestamp stepCount
)

Implementation

StepData update(StepCountWithTimestamp stepCount) {
  // 오래된 stepCount는 무시한다.
  if (lastSavedAt != null && _location != null) {
    final dt = TZDateTime.parse(_location!, lastSavedAt!);
    if (stepCount.timeStamp.isBefore(dt)) {
      return this;
    }
  }
  // 오늘에 대한 정보가 없다면, 앱 설치등 초기 상태이므로
  // 걸음을 초기 상태부터 시작한다.
  if (todayDate == null) {
    return StepData.initialData(stepCount);
  }
  // 오늘 날짜와 같지 않으면, 날짜가 변경되었기 대문에 이전 날짜로 옮김
  // 날짜가 변경 되었는데, 기존에 저장된 걸음수가 현재 걸음수보다 높으면 부팅이 된 상태라서,
  // 기본 비교값을 0 으로 세팅함!
  else if (todayDate != formatDate(stepCount.timeStamp)) {
    return StepData.shiftDate(this, stepCount);
  }
  // 부팅이 새로 되었다면, 기존 걸음수를 stack에 저장하고,
  // 0부터 다시 시작한다.
  // 가끔 센서값이 섞여서 들어오는 경우가 있어, 5보 정도의 오차는 무시한다.
  else if (stepCount.stepsFromBoot < todayStepCount - 5) {
    return StepData.newBoot(this, stepCount);
  } else if (stepCount.stepsFromBoot < todayStepCount) {
    return this;
  }

  return StepData.accumulate(this, stepCount);
}