From 5b321fcc78e40efc8b3a168ba250f3be7ae10f92 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 28 May 2023 11:11:15 -0700 Subject: [PATCH] Remove deferred loading indicator, causes more trouble than it's worth Closes #404 --- Tusker/TimelineLikeController.swift | 47 +++++++---------------------- 1 file changed, 11 insertions(+), 36 deletions(-) diff --git a/Tusker/TimelineLikeController.swift b/Tusker/TimelineLikeController.swift index a11aca77..9c45e69d 100644 --- a/Tusker/TimelineLikeController.swift +++ b/Tusker/TimelineLikeController.swift @@ -63,19 +63,20 @@ class TimelineLikeController { } let token = LoadAttemptToken() state = .loadingInitial(token, hasAddedLoadingIndicator: false) - let loadingIndicator = DeferredLoadingIndicator(owner: self, state: state, addedIndicatorState: .loadingInitial(token, hasAddedLoadingIndicator: true)) + await emit(event: .addLoadingIndicator) + state = .loadingInitial(token, hasAddedLoadingIndicator: true) do { let items = try await delegate.loadInitial() guard case .loadingInitial(token, _) = state else { return } - await loadingIndicator.end() await emit(event: .replaceAllItems(items, token)) + await emit(event: .removeLoadingIndicator) state = .idle } catch is CancellationError { return } catch { - await loadingIndicator.end() + await emit(event: .removeLoadingIndicator) await emit(event: .loadAllError(error, token)) state = .notLoadedInitial } @@ -88,9 +89,10 @@ class TimelineLikeController { } let token = LoadAttemptToken() state = .restoringInitial(token, hasAddedLoadingIndicator: false) - let loadingIndicator = DeferredLoadingIndicator(owner: self, state: state, addedIndicatorState: .restoringInitial(token, hasAddedLoadingIndicator: true)) + await emit(event: .addLoadingIndicator) + state = .restoringInitial(token, hasAddedLoadingIndicator: true) await doRestore() - await loadingIndicator.end() + await emit(event: .removeLoadingIndicator) state = .idle } @@ -128,19 +130,20 @@ class TimelineLikeController { return } state = .loadingOlder(token, hasAddedLoadingIndicator: false) - let loadingIndicator = DeferredLoadingIndicator(owner: self, state: state, addedIndicatorState: .loadingOlder(token, hasAddedLoadingIndicator: true)) + await emit(event: .addLoadingIndicator) + state = .loadingOlder(token, hasAddedLoadingIndicator: true) do { let items = try await delegate.loadOlder() guard case .loadingOlder(token, _) = state else { return } - await loadingIndicator.end() await emit(event: .appendItems(items, token)) + await emit(event: .removeLoadingIndicator) state = .idle } catch is CancellationError { return } catch { - await loadingIndicator.end() + await emit(event: .removeLoadingIndicator) await emit(event: .loadOlderError(error, token)) state = .idle } @@ -349,34 +352,6 @@ class TimelineLikeController { } } - @MainActor - class DeferredLoadingIndicator { - private let owner: TimelineLikeController - private let addedIndicatorState: State - private let task: Task - - init(owner: TimelineLikeController, state: State, addedIndicatorState: State) { - self.owner = owner - self.addedIndicatorState = addedIndicatorState - self.task = Task { @MainActor in - try await Task.sleep(nanoseconds: 150 * NSEC_PER_MSEC) - guard state == owner.state else { - return - } - await owner.emit(event: .addLoadingIndicator) - owner.transition(to: addedIndicatorState) - } - } - - func end() async { - if owner.state == addedIndicatorState { - await owner.emit(event: .removeLoadingIndicator) - } else { - task.cancel() - } - } - } - } enum TimelineGapDirection {