Skip to content

Commit 972084a

Browse files
committed
Rename the TimelineProvider to TimelineItemProvider
1 parent d058e7c commit 972084a

File tree

18 files changed

+102
-119
lines changed

18 files changed

+102
-119
lines changed

ElementX.xcodeproj/project.pbxproj

Lines changed: 26 additions & 39 deletions
Large diffs are not rendered by default.

ElementX/Sources/Mocks/Generated/GeneratedMocks.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15297,7 +15297,7 @@ class TimelineControllerFactoryMock: TimelineControllerFactoryProtocol, @uncheck
1529715297
}
1529815298
}
1529915299
}
15300-
class TimelineProviderMock: TimelineProviderProtocol, @unchecked Sendable {
15300+
class TimelineItemProviderMock: TimelineItemProviderProtocol, @unchecked Sendable {
1530115301
var updatePublisher: AnyPublisher<([TimelineItemProxy], PaginationState), Never> {
1530215302
get { return underlyingUpdatePublisher }
1530315303
set(value) { underlyingUpdatePublisher = value }
@@ -15322,11 +15322,11 @@ class TimelineProviderMock: TimelineProviderProtocol, @unchecked Sendable {
1532215322

1532315323
}
1532415324
class TimelineProxyMock: TimelineProxyProtocol, @unchecked Sendable {
15325-
var timelineProvider: TimelineProviderProtocol {
15326-
get { return underlyingTimelineProvider }
15327-
set(value) { underlyingTimelineProvider = value }
15325+
var timelineItemProvider: TimelineItemProviderProtocol {
15326+
get { return underlyingTimelineItemProvider }
15327+
set(value) { underlyingTimelineItemProvider = value }
1532815328
}
15329-
var underlyingTimelineProvider: TimelineProviderProtocol!
15329+
var underlyingTimelineItemProvider: TimelineItemProviderProtocol!
1533015330

1533115331
//MARK: - subscribeForUpdates
1533215332

ElementX/Sources/Mocks/TimelineProviderMock.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Foundation
1010
import MatrixRustSDK
1111

1212
@MainActor
13-
class AutoUpdatingTimelineProviderMock: TimelineProvider {
13+
class AutoUpdatingTimelineItemProviderMock: TimelineItemProvider {
1414
static var timelineListener: TimelineListener?
1515

1616
private let innerPaginationStatePublisher: PassthroughSubject<PaginationState, Never>

ElementX/Sources/Mocks/TimelineProxyMock.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ extension TimelineProxyMock {
2424
sendReadReceiptForTypeReturnValue = .success(())
2525

2626
if configuration.isAutoUpdating {
27-
underlyingTimelineProvider = AutoUpdatingTimelineProviderMock()
27+
underlyingTimelineItemProvider = AutoUpdatingTimelineItemProviderMock()
2828
} else {
29-
let timelineProvider = TimelineProviderMock()
30-
timelineProvider.paginationState = .init(backward: configuration.timelineStartReached ? .timelineEndReached : .idle, forward: .timelineEndReached)
31-
timelineProvider.underlyingMembershipChangePublisher = PassthroughSubject().eraseToAnyPublisher()
32-
underlyingTimelineProvider = timelineProvider
29+
let timelineItemProvider = TimelineItemProviderMock()
30+
timelineItemProvider.paginationState = .init(backward: configuration.timelineStartReached ? .timelineEndReached : .idle, forward: .timelineEndReached)
31+
timelineItemProvider.underlyingMembershipChangePublisher = PassthroughSubject().eraseToAnyPublisher()
32+
underlyingTimelineItemProvider = timelineItemProvider
3333
}
3434
}
3535
}

ElementX/Sources/Other/NetworkMonitor/NetworkMonitor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class NetworkMonitor: NetworkMonitorProtocol {
1919
}
2020

2121
init() {
22-
queue = DispatchQueue(label: "io.element.elementx.networkmonitor", qos: .background)
22+
queue = DispatchQueue(label: "io.element.elementx.network_monitor", qos: .background)
2323
pathMonitor = NWPathMonitor()
2424
reachabilitySubject = CurrentValueSubject<NetworkMonitorReachability, Never>(.reachable)
2525

ElementX/Sources/Other/SDKListener.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ extension SDKListener: ProgressWatcher where T == Double {
9494
}
9595
}
9696

97-
// MARK: TimelineProvider
97+
// MARK: TimelineItemProvider
9898

9999
extension SDKListener: TimelineListener where T == [TimelineDiff] {
100100
func onUpdate(diff: [TimelineDiff]) { onUpdateClosure(diff) }

ElementX/Sources/Screens/RoomChangeRolesScreen/RoomChangeRolesScreenViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class RoomChangeRolesScreenViewModel: RoomChangeRolesScreenViewModelType, RoomCh
4545
}
4646
.store(in: &cancellables)
4747

48-
roomProxy.timeline.timelineProvider.membershipChangePublisher.sink { [roomProxy] in
48+
roomProxy.timeline.timelineItemProvider.membershipChangePublisher.sink { [roomProxy] in
4949
Task { await roomProxy.updateMembers() }
5050
}
5151
.store(in: &cancellables)

ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
2020
private let attributedStringBuilder: AttributedStringBuilderProtocol
2121
private let appSettings: AppSettings
2222

23-
private var pinnedEventsTimelineProvider: TimelineProviderProtocol? {
23+
private var pinnedEventsTimelineItemProvider: TimelineItemProviderProtocol? {
2424
didSet {
25-
guard let pinnedEventsTimelineProvider else {
25+
guard let pinnedEventsTimelineItemProvider else {
2626
return
2727
}
2828

29-
state.pinnedEventsActionState = .loaded(numberOfItems: pinnedEventsTimelineProvider.itemProxies.filter(\.isEvent).count)
29+
state.pinnedEventsActionState = .loaded(numberOfItems: pinnedEventsTimelineItemProvider.itemProxies.filter(\.isEvent).count)
3030

31-
pinnedEventsTimelineProvider.updatePublisher
31+
pinnedEventsTimelineItemProvider.updatePublisher
3232
// When pinning or unpinning an item, the timeline might return empty for a short while, so we need to debounce it to prevent weird UI behaviours like the banner disappearing
3333
.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main)
3434
.sink { [weak self] updatedItems, _ in
@@ -86,7 +86,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
8686
.filter { $0 == .reachable }
8787
.receive(on: DispatchQueue.main)
8888
.sink { [weak self] _ in
89-
self?.setupPinnedEventsTimelineProviderIfNeeded()
89+
self?.setupPinnedEventsTimelineItemProviderIfNeeded()
9090
}
9191
.store(in: &cancellables)
9292

@@ -439,8 +439,8 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
439439
}
440440
}
441441

442-
private func setupPinnedEventsTimelineProviderIfNeeded() {
443-
guard pinnedEventsTimelineProvider == nil else {
442+
private func setupPinnedEventsTimelineItemProviderIfNeeded() {
443+
guard pinnedEventsTimelineItemProvider == nil else {
444444
return
445445
}
446446

@@ -449,8 +449,8 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
449449
return
450450
}
451451

452-
if pinnedEventsTimelineProvider == nil {
453-
pinnedEventsTimelineProvider = pinnedEventsTimeline.timelineProvider
452+
if pinnedEventsTimelineItemProvider == nil {
453+
pinnedEventsTimelineItemProvider = pinnedEventsTimeline.timelineItemProvider
454454
}
455455
}
456456
}

ElementX/Sources/Screens/RoomMemberListScreen/RoomMembersListScreenViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
7878
}
7979
.store(in: &cancellables)
8080

81-
roomProxy.timeline.timelineProvider.membershipChangePublisher.sink { [roomProxy] _ in
81+
roomProxy.timeline.timelineItemProvider.membershipChangePublisher.sink { [roomProxy] _ in
8282
Task { await roomProxy.updateMembers() }
8383
}
8484
.store(in: &cancellables)

ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
3232
actionsSubject.eraseToAnyPublisher()
3333
}
3434

35-
private var pinnedEventsTimelineProvider: TimelineProviderProtocol? {
35+
private var pinnedEventsTimelineItemProvider: TimelineItemProviderProtocol? {
3636
didSet {
37-
guard let pinnedEventsTimelineProvider else {
37+
guard let pinnedEventsTimelineItemProvider else {
3838
return
3939
}
4040

41-
buildPinnedEventContents(timelineItems: pinnedEventsTimelineProvider.itemProxies)
42-
pinnedEventsTimelineProvider.updatePublisher
41+
buildPinnedEventContents(timelineItems: pinnedEventsTimelineItemProvider.itemProxies)
42+
pinnedEventsTimelineItemProvider.updatePublisher
4343
// When pinning or unpinning an item, the timeline might return empty for a short while, so we need to debounce it to prevent weird UI behaviours like the banner disappearing
4444
.debounce(for: .milliseconds(100), scheduler: DispatchQueue.main)
4545
.sink { [weak self] updatedItems, _ in
@@ -193,7 +193,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
193193
.filter { $0 == .reachable }
194194
.receive(on: DispatchQueue.main)
195195
.sink { [weak self] _ in
196-
self?.setupPinnedEventsTimelineProviderIfNeeded()
196+
self?.setupPinnedEventsTimelineItemProviderIfNeeded()
197197
}
198198
.store(in: &cancellables)
199199

@@ -347,8 +347,8 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
347347
state.canBan = await (try? roomProxy.canUserBan(userID: ownUserID).get()) == true
348348
}
349349

350-
private func setupPinnedEventsTimelineProviderIfNeeded() {
351-
guard pinnedEventsTimelineProvider == nil else {
350+
private func setupPinnedEventsTimelineItemProviderIfNeeded() {
351+
guard pinnedEventsTimelineItemProvider == nil else {
352352
return
353353
}
354354

@@ -357,8 +357,8 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
357357
return
358358
}
359359

360-
if pinnedEventsTimelineProvider == nil {
361-
pinnedEventsTimelineProvider = pinnedEventsTimeline.timelineProvider
360+
if pinnedEventsTimelineItemProvider == nil {
361+
pinnedEventsTimelineItemProvider = pinnedEventsTimeline.timelineItemProvider
362362
}
363363
}
364364
}

ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
6363
notificationSettings: NotificationSettingsProxyProtocol,
6464
appSettings: AppSettings) {
6565
self.roomListService = roomListService
66-
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.roomsummaryprovider", qos: .default)
66+
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.room_summary_provider", qos: .default)
6767
self.eventStringBuilder = eventStringBuilder
6868
self.name = name
6969
self.shouldUpdateVisibleRange = shouldUpdateVisibleRange

ElementX/Sources/Services/RoomDirectorySearch/RoomDirectorySearchProxy.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import MatrixRustSDK
1313
final class RoomDirectorySearchProxy: RoomDirectorySearchProxyProtocol {
1414
private let roomDirectorySearch: RoomDirectorySearchProtocol
1515
private let appSettings: AppSettings
16-
private let serialDispatchQueue = DispatchQueue(label: "io.element.elementx.roomdirectorysearch", qos: .default)
16+
private let serialDispatchQueue = DispatchQueue(label: "io.element.elementx.room_directory_search_proxy", qos: .default)
1717

1818
private let resultsSubject = CurrentValueSubject<[RoomDirectorySearchResult], Never>([])
1919

ElementX/Sources/Services/Timeline/TimelineController/TimelineController.swift

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,17 @@ import UIKit
1313

1414
class TimelineController: TimelineControllerProtocol {
1515
private let roomProxy: JoinedRoomProxyProtocol
16-
private let liveTimelineProvider: TimelineProviderProtocol
16+
private let liveTimelineItemProvider: TimelineItemProviderProtocol
1717
private let timelineItemFactory: RoomTimelineItemFactoryProtocol
1818
private let mediaProvider: MediaProviderProtocol
1919
private let appSettings: AppSettings
2020

21-
private let serialDispatchQueue: DispatchQueue
22-
2321
let callbacks = PassthroughSubject<TimelineControllerCallback, Never>()
2422

2523
private var activeTimeline: TimelineProxyProtocol
26-
private var activeTimelineProvider: TimelineProviderProtocol {
24+
private var activeTimelineItemProvider: TimelineItemProviderProtocol {
2725
didSet {
28-
configureActiveTimelineProvider()
26+
configureActiveTimelineItemProvider()
2927
}
3028
}
3129

@@ -42,7 +40,7 @@ class TimelineController: TimelineControllerProtocol {
4240
}
4341

4442
var timelineKind: TimelineKind {
45-
activeTimelineProvider.kind
43+
activeTimelineItemProvider.kind
4644
}
4745

4846
init(roomProxy: JoinedRoomProxyProtocol,
@@ -52,18 +50,16 @@ class TimelineController: TimelineControllerProtocol {
5250
mediaProvider: MediaProviderProtocol,
5351
appSettings: AppSettings) {
5452
self.roomProxy = roomProxy
55-
liveTimelineProvider = timelineProxy.timelineProvider
53+
liveTimelineItemProvider = timelineProxy.timelineItemProvider
5654
self.timelineItemFactory = timelineItemFactory
5755
self.mediaProvider = mediaProvider
5856
self.appSettings = appSettings
5957

60-
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.timelineprovider", qos: .utility)
61-
6258
activeTimeline = timelineProxy
63-
activeTimelineProvider = liveTimelineProvider
59+
activeTimelineItemProvider = liveTimelineItemProvider
6460

6561
guard let initialFocussedEventID else {
66-
configureActiveTimelineProvider()
62+
configureActiveTimelineItemProvider()
6763
return
6864
}
6965

@@ -75,7 +71,7 @@ class TimelineController: TimelineControllerProtocol {
7571
break
7672
case .failure:
7773
// Setup the live timeline as a fallback.
78-
configureActiveTimelineProvider()
74+
configureActiveTimelineItemProvider()
7975
}
8076
}
8177
}
@@ -85,7 +81,7 @@ class TimelineController: TimelineControllerProtocol {
8581
case .success(let timeline):
8682
await timeline.subscribeForUpdates()
8783
activeTimeline = timeline
88-
activeTimelineProvider = timeline.timelineProvider
84+
activeTimelineItemProvider = timeline.timelineItemProvider
8985
return .success(())
9086
case .failure(let error):
9187
if case .eventNotFound = error {
@@ -98,7 +94,7 @@ class TimelineController: TimelineControllerProtocol {
9894

9995
func focusLive() {
10096
activeTimeline = roomProxy.timeline
101-
activeTimelineProvider = liveTimelineProvider
97+
activeTimelineItemProvider = liveTimelineItemProvider
10298
}
10399

104100
func paginateBackwards(requestSize: UInt16) async -> Result<Void, TimelineControllerError> {
@@ -328,7 +324,7 @@ class TimelineController: TimelineControllerProtocol {
328324
// Handle this parallel to the timeline items so we're not forced
329325
// to bundle the Rust side objects within them
330326
func debugInfo(for itemID: TimelineItemIdentifier) -> TimelineItemDebugInfo {
331-
for timelineItemProxy in activeTimelineProvider.itemProxies {
327+
for timelineItemProxy in activeTimelineItemProvider.itemProxies {
332328
switch timelineItemProxy {
333329
case .event(let item):
334330
if item.id == itemID {
@@ -343,7 +339,7 @@ class TimelineController: TimelineControllerProtocol {
343339
}
344340

345341
func sendHandle(for itemID: TimelineItemIdentifier) -> SendHandleProxy? {
346-
for timelineItemProxy in activeTimelineProvider.itemProxies {
342+
for timelineItemProxy in activeTimelineItemProvider.itemProxies {
347343
switch timelineItemProxy {
348344
case .event(let item):
349345
if item.id == itemID {
@@ -361,24 +357,24 @@ class TimelineController: TimelineControllerProtocol {
361357

362358
/// The cancellable used to update the timeline items.
363359
private var updateTimelineItemsCancellable: AnyCancellable?
364-
/// The controller is switching the `activeTimelineProvider`.
360+
/// The controller is switching the `activeTimelineItemProvider`.
365361
private var isSwitchingTimelines = false
366362

367363
/// Configures the controller to listen to `activeTimeline` for events.
368364
/// - Parameter clearExistingItems: Whether or not to clear any existing items before loading the timeline's contents.
369-
private func configureActiveTimelineProvider() {
365+
private func configureActiveTimelineItemProvider() {
370366
updateTimelineItemsCancellable = nil
371367

372368
isSwitchingTimelines = true
373369

374370
// Inform the world that the initial items are loading from the store
375371
paginationState = PaginationState(backward: .paginating, forward: .paginating)
376-
callbacks.send(.isLive(activeTimelineProvider.kind == .live))
372+
callbacks.send(.isLive(activeTimelineItemProvider.kind == .live))
377373

378-
updateTimelineItemsCancellable = Task { [weak self, activeTimelineProvider] in
374+
updateTimelineItemsCancellable = Task { [weak self, activeTimelineItemProvider] in
379375
let contentSizeChangePublisher = NotificationCenter.default.publisher(for: UIContentSizeCategory.didChangeNotification)
380-
let timelineUpdates = activeTimelineProvider.updatePublisher.merge(with: contentSizeChangePublisher.map { _ in
381-
(activeTimelineProvider.itemProxies, activeTimelineProvider.paginationState)
376+
let timelineUpdates = activeTimelineItemProvider.updatePublisher.merge(with: contentSizeChangePublisher.map { _ in
377+
(activeTimelineItemProvider.itemProxies, activeTimelineItemProvider.paginationState)
382378
})
383379

384380
for await (items, paginationState) in timelineUpdates.values {
@@ -506,7 +502,7 @@ class TimelineController: TimelineControllerProtocol {
506502
}
507503

508504
func eventTimestamp(for itemID: TimelineItemIdentifier) -> Date? {
509-
for itemProxy in activeTimelineProvider.itemProxies {
505+
for itemProxy in activeTimelineItemProvider.itemProxies {
510506
switch itemProxy {
511507
case .event(let eventTimelineItemProxy):
512508
if eventTimelineItemProxy.id == itemID {

ElementX/Sources/Services/Timeline/TimelineProvider.swift renamed to ElementX/Sources/Services/Timeline/TimelineItemProvider.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Combine
99
import Foundation
1010
import MatrixRustSDK
1111

12-
class TimelineProvider: TimelineProviderProtocol {
12+
class TimelineItemProvider: TimelineItemProviderProtocol {
1313
private var cancellables = Set<AnyCancellable>()
1414
private let serialDispatchQueue: DispatchQueue
1515

@@ -46,7 +46,7 @@ class TimelineProvider: TimelineProviderProtocol {
4646
}
4747

4848
init(timeline: Timeline, kind: TimelineKind, paginationStatePublisher: AnyPublisher<PaginationState, Never>) {
49-
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.timelineprovider", qos: .utility)
49+
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.timeline_item_provider", qos: .utility)
5050
itemProxiesSubject = CurrentValueSubject<[TimelineItemProxy], Never>([])
5151
self.kind = kind
5252

ElementX/Sources/Services/Timeline/TimelineProviderProtocol.swift renamed to ElementX/Sources/Services/Timeline/TimelineItemProviderProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct PaginationState: Equatable {
2929

3030
@MainActor
3131
// sourcery: AutoMockable
32-
protocol TimelineProviderProtocol {
32+
protocol TimelineItemProviderProtocol {
3333
/// A publisher that signals when ``itemProxies`` or ``paginationState`` are changed.
3434
var updatePublisher: AnyPublisher<([TimelineItemProxy], PaginationState), Never> { get }
3535
/// The current set of items in the timeline.

0 commit comments

Comments
 (0)