mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 06:35:51 +00:00
Refactoring
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user