From 83a90cd07659f0fc4792f6a86a7859c05e469e2c Mon Sep 17 00:00:00 2001 From: Sadeq Bitarafan Date: Fri, 15 Mar 2024 14:02:32 +0330 Subject: [PATCH 1/2] #29 issue fixed. --- Sources/MagicTimer/MagicTimer.swift | 31 +++++++++++-------- .../MagicTimerBackgroundCalculator.swift | 12 +++++-- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/Sources/MagicTimer/MagicTimer.swift b/Sources/MagicTimer/MagicTimer.swift index 305aba3..98a0526 100644 --- a/Sources/MagicTimer/MagicTimer.swift +++ b/Sources/MagicTimer/MagicTimer.swift @@ -45,7 +45,20 @@ public class MagicTimer { } /// Timer count mode. Default is `.stopWatch`. Checkout ```MagicTimerMode```. - public var countMode: MagicTimerMode = .stopWatch + public var countMode: MagicTimerMode = .stopWatch { + didSet { + switch countMode { + case .stopWatch: + break + case .countDown(let fromSeconds): + // Checking if defaultValue plus fromSeconds not going to invalid format(negative seconds). + guard (defultValue + fromSeconds).truncatingRemainder(dividingBy: effectiveValue).isEqual(to: .zero) else { + fatalError("The time does not lead to a valid format. Use valid effetiveValue") + } + counter.totalCountedValue = fromSeconds + } + } + } /// Timer default value. Default is 0. public var defultValue: TimeInterval = 0 { @@ -169,18 +182,10 @@ public class MagicTimer { private func observeScheduleTimer() { executive.scheduleTimerHandler = { [weak self] in guard let self else { return } - - switch self.countMode { + switch countMode { case .stopWatch: - self.counter.add() - self.elapsedTime = self.counter.totalCountedValue - case .countDown(let fromSeconds): - // Checking if defaultValue plus fromSeconds not going to invalid format(negative seconds). - guard (self.defultValue + fromSeconds).truncatingRemainder(dividingBy: self.effectiveValue).isEqual(to: .zero) else { - fatalError("The time does not lead to a valid format. Use valid effetiveValue") - } - - self.counter.totalCountedValue = fromSeconds + counter.add() + case .countDown(_): guard counter.totalCountedValue.isBiggerThan(.zero) else { executive.suspand { self.lastState = .stopped @@ -188,8 +193,8 @@ public class MagicTimer { return } counter.subtract() - elapsedTime = self.counter.totalCountedValue } + elapsedTime = counter.totalCountedValue } } } diff --git a/Sources/MagicTimer/MagicTimerBackgroundCalculator.swift b/Sources/MagicTimer/MagicTimerBackgroundCalculator.swift index 147a356..512c432 100644 --- a/Sources/MagicTimer/MagicTimerBackgroundCalculator.swift +++ b/Sources/MagicTimer/MagicTimerBackgroundCalculator.swift @@ -16,8 +16,11 @@ public final class MagicTimerBackgroundCalculator: MagicTimerBackgroundCalculato public var isActiveBackgroundMode: Bool = true public var backgroundTimeCalculateHandler: ((TimeInterval) -> Void)? + private var shouldCalculate: Bool = false + public init() { NotificationCenter.default.addObserver(self, selector: #selector(willEnterForegroundNotification), name: UIApplication.willEnterForegroundNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(willEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil) } deinit { @@ -30,17 +33,22 @@ public final class MagicTimerBackgroundCalculator: MagicTimerBackgroundCalculato private func calculateDateDiffrence() -> TimeInterval? { guard let timerFiredDate else { return nil } - let validTimeSubtraction = abs(timerFiredDate - Date()) + let validTimeSubtraction = floor(abs(timerFiredDate - Date())) return validTimeSubtraction.convertToTimeInterval() } @objc private func willEnterForegroundNotification() { - guard isActiveBackgroundMode else { return } + guard isActiveBackgroundMode, shouldCalculate else { return } if let timeInterval = calculateDateDiffrence() { backgroundTimeCalculateHandler?(timeInterval) } } + + @objc + private func willEnterBackgroundNotification() { + shouldCalculate = true + } } From 164a94784adabefd3f12520cb54b70c73615fd12 Mon Sep 17 00:00:00 2001 From: Sadeq Bitarafan Date: Fri, 15 Mar 2024 14:03:20 +0330 Subject: [PATCH 2/2] pod spec updated. --- MagicTimer.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MagicTimer.podspec b/MagicTimer.podspec index 9226c76..84a6458 100644 --- a/MagicTimer.podspec +++ b/MagicTimer.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'MagicTimer' - s.version = '1.0.6' + s.version = '1.0.7' s.summary = 'MagicTimer framework, your ultimate solution for handling timers in your iOS applications. This framework provides a powerful and flexible timer implementation with various features to meet your timer needs.' s.homepage = 'https://github.com/MagicTimerFW/MagicTimer'