Refactoring

This commit is contained in:
Ali
2021-08-01 18:12:53 +02:00
parent 878afc62bf
commit 648a74003e
87 changed files with 812 additions and 357 deletions

View File

@@ -1,15 +1,14 @@
import Foundation
import UIKit
import Postbox
import TelegramCore
import SwiftSignalKit
import Display
enum CallListNodeLocation: Equatable {
case initial(count: Int)
case changeType(index: MessageIndex)
case navigation(index: MessageIndex)
case scroll(index: MessageIndex, sourceIndex: MessageIndex, scrollPosition: ListViewScrollPosition, animated: Bool)
case changeType(index: EngineMessage.Index)
case navigation(index: EngineMessage.Index)
case scroll(index: EngineMessage.Index, sourceIndex: EngineMessage.Index, scrollPosition: ListViewScrollPosition, animated: Bool)
static func ==(lhs: CallListNodeLocation, rhs: CallListNodeLocation) -> Bool {
switch lhs {
@@ -28,11 +27,7 @@ enum CallListNodeLocation: Equatable {
struct CallListNodeLocationAndType: Equatable {
let location: CallListNodeLocation
let type: CallListViewType
static func ==(lhs: CallListNodeLocationAndType, rhs: CallListNodeLocationAndType) -> Bool {
return lhs.location == rhs.location && lhs.type == rhs.type
}
let scope: EngineCallList.Scope
}
enum CallListNodeViewUpdateType {
@@ -44,47 +39,67 @@ enum CallListNodeViewUpdateType {
}
struct CallListNodeViewUpdate {
let view: CallListView
let view: EngineCallList
let type: CallListNodeViewUpdateType
let scrollPosition: CallListNodeViewScrollPosition?
}
func callListViewForLocationAndType(locationAndType: CallListNodeLocationAndType, account: Account) -> Signal<(CallListNodeViewUpdate, CallListViewType), NoError> {
func callListViewForLocationAndType(locationAndType: CallListNodeLocationAndType, engine: TelegramEngine) -> Signal<(CallListNodeViewUpdate, EngineCallList.Scope), NoError> {
switch locationAndType.location {
case let .initial(count):
return account.viewTracker.callListView(type: locationAndType.type, index: MessageIndex.absoluteUpperBound(), count: count) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in
return (CallListNodeViewUpdate(view: view, type: .Generic, scrollPosition: nil), locationAndType.type)
case let .initial(count):
return engine.messages.callList(
scope: locationAndType.scope,
index: EngineMessage.Index.absoluteUpperBound(),
itemCount: count
)
|> map { view -> (CallListNodeViewUpdate, EngineCallList.Scope) in
return (CallListNodeViewUpdate(view: view, type: .Generic, scrollPosition: nil), locationAndType.scope)
}
case let .changeType(index):
return engine.messages.callList(
scope: locationAndType.scope,
index: index,
itemCount: 120
)
|> map { view -> (CallListNodeViewUpdate, EngineCallList.Scope) in
return (CallListNodeViewUpdate(view: view, type: .ReloadAnimated, scrollPosition: nil), locationAndType.scope)
}
case let .navigation(index):
var first = true
return engine.messages.callList(
scope: locationAndType.scope,
index: index,
itemCount: 120
)
|> map { view -> (CallListNodeViewUpdate, EngineCallList.Scope) in
let genericType: CallListNodeViewUpdateType
if first {
first = false
genericType = .UpdateVisible
} else {
genericType = .Generic
}
case let .changeType(index):
return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 120) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in
return (CallListNodeViewUpdate(view: view, type: .ReloadAnimated, scrollPosition: nil), locationAndType.type)
}
case let .navigation(index):
var first = true
return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 120) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in
let genericType: CallListNodeViewUpdateType
if first {
first = false
genericType = .UpdateVisible
} else {
genericType = .Generic
}
return (CallListNodeViewUpdate(view: view, type: genericType, scrollPosition: nil), locationAndType.type)
}
case let .scroll(index, sourceIndex, scrollPosition, animated):
let directionHint: ListViewScrollToItemDirectionHint = sourceIndex > index ? .Down : .Up
let callScrollPosition: CallListNodeViewScrollPosition = .index(index: index, position: scrollPosition, directionHint: directionHint, animated: animated)
var first = true
return account.viewTracker.callListView(type: locationAndType.type, index: index, count: 120) |> map { view -> (CallListNodeViewUpdate, CallListViewType) in
let genericType: CallListNodeViewUpdateType
let scrollPosition: CallListNodeViewScrollPosition? = first ? callScrollPosition : nil
if first {
first = false
genericType = .UpdateVisible
} else {
genericType = .Generic
}
return (CallListNodeViewUpdate(view: view, type: genericType, scrollPosition: scrollPosition), locationAndType.type)
return (CallListNodeViewUpdate(view: view, type: genericType, scrollPosition: nil), locationAndType.scope)
}
case let .scroll(index, sourceIndex, scrollPosition, animated):
let directionHint: ListViewScrollToItemDirectionHint = sourceIndex > index ? .Down : .Up
let callScrollPosition: CallListNodeViewScrollPosition = .index(index: index, position: scrollPosition, directionHint: directionHint, animated: animated)
var first = true
return engine.messages.callList(
scope: locationAndType.scope,
index: index,
itemCount: 120
)
|> map { view -> (CallListNodeViewUpdate, EngineCallList.Scope) in
let genericType: CallListNodeViewUpdateType
let scrollPosition: CallListNodeViewScrollPosition? = first ? callScrollPosition : nil
if first {
first = false
genericType = .UpdateVisible
} else {
genericType = .Generic
}
return (CallListNodeViewUpdate(view: view, type: genericType, scrollPosition: scrollPosition), locationAndType.scope)
}
}
}