@@ -306,6 +306,23 @@ enum APEntry : Comparable, Identifiable {
306
306
func isEqual( to message: Message ) -> Bool {
307
307
return stableId == message. chatStableId
308
308
}
309
+
310
+ func isEqual( to messageId: MessageId ) -> Bool {
311
+ switch self {
312
+ case let . song( message) :
313
+ return message. id == messageId
314
+ case let . single( wrapper) :
315
+ if let stableId = wrapper. id. base as? ChatHistoryEntryId {
316
+ switch stableId {
317
+ case let . message( message) :
318
+ return message. id == messageId
319
+ default :
320
+ break
321
+ }
322
+ }
323
+ }
324
+ return false
325
+ }
309
326
310
327
var index : MessageIndex {
311
328
switch self {
@@ -770,13 +787,8 @@ class APController : NSResponder {
770
787
itemDisposable. set ( item. pullResource ( ) . start ( next: { [ weak self] resource in
771
788
if let strongSelf = self {
772
789
if resource. complete {
773
- // strongSelf.player = .player(for: resource.path)
774
- // strongSelf.player?.delegate = strongSelf
775
- // strongSelf.player?.play()
776
-
777
-
778
790
let items = strongSelf. items. modify ( { $0} ) . filter ( { $0 is APSongItem } ) . map { $0 as! APSongItem }
779
- if let index = items. index ( of: item) {
791
+ if let index = items. firstIndex ( of: item) {
780
792
let previous = index - 1
781
793
let next = index + 1
782
794
if previous >= 0 {
@@ -928,7 +940,7 @@ class APController : NSResponder {
928
940
}
929
941
930
942
func remove( listener: NSObject ) {
931
- let index = listeners. index ( where: { ( weakValue) -> Bool in
943
+ let index = listeners. firstIndex ( where: { ( weakValue) -> Bool in
932
944
return listener == weakValue. value
933
945
} )
934
946
if let index = index {
@@ -941,10 +953,11 @@ class APChatController : APController {
941
953
942
954
private let peerId : PeerId
943
955
private let index : MessageIndex ?
944
-
945
- init ( context: AccountContext , peerId: PeerId , index: MessageIndex ? , streamable: Bool , baseRate: Double = 1.0 ) {
956
+ let messages : [ Message ]
957
+ init ( context: AccountContext , peerId: PeerId , index: MessageIndex ? , streamable: Bool , baseRate: Double = 1.0 , messages : [ Message ] = [ ] ) {
946
958
self . peerId = peerId
947
959
self . index = index
960
+ self . messages = messages
948
961
super. init ( context: context, streamable: streamable, baseRate: baseRate)
949
962
}
950
963
@@ -960,27 +973,37 @@ class APChatController : APController {
960
973
let account = self . context. account
961
974
let peerId = self . peerId
962
975
let index = self . index
963
- let apply = history. get ( ) |> distinctUntilChanged |> mapToSignal { location -> Signal < ( MessageHistoryView , ViewUpdateType , InitialMessageHistoryData ? ) , NoError > in
964
- switch location {
965
- case . initial:
966
- return account. viewTracker. aroundMessageHistoryViewForLocation ( . peer( peerId) , index: MessageHistoryAnchorIndex . upperBound, anchorIndex: MessageHistoryAnchorIndex . upperBound, count: 100 , fixedCombinedReadStates: nil , tagMask: tagMask, orderStatistics: [ ] , additionalData: [ ] )
967
- case let . index( index) :
968
- return account. viewTracker. aroundMessageHistoryViewForLocation ( . peer( peerId) , index: MessageHistoryAnchorIndex . message ( index) , anchorIndex: MessageHistoryAnchorIndex . message ( index) , count: 100 , fixedCombinedReadStates: nil , tagMask: tagMask, orderStatistics: [ ] , additionalData: [ ] )
969
- }
970
-
971
- } |> map { view -> ( APHistory ? , APHistory ) in
976
+ let apply : Signal < APTransition , NoError >
977
+ if messages. isEmpty {
978
+ apply = history. get ( ) |> distinctUntilChanged |> mapToSignal { location -> Signal < ( MessageHistoryView , ViewUpdateType , InitialMessageHistoryData ? ) , NoError > in
979
+ switch location {
980
+ case . initial:
981
+ return account. viewTracker. aroundMessageHistoryViewForLocation ( . peer( peerId) , index: MessageHistoryAnchorIndex . upperBound, anchorIndex: MessageHistoryAnchorIndex . upperBound, count: 100 , fixedCombinedReadStates: nil , tagMask: tagMask, orderStatistics: [ ] , additionalData: [ ] )
982
+ case let . index( index) :
983
+ return account. viewTracker. aroundMessageHistoryViewForLocation ( . peer( peerId) , index: MessageHistoryAnchorIndex . message ( index) , anchorIndex: MessageHistoryAnchorIndex . message ( index) , count: 100 , fixedCombinedReadStates: nil , tagMask: tagMask, orderStatistics: [ ] , additionalData: [ ] )
984
+ }
985
+
986
+ } |> map { view -> ( APHistory ? , APHistory ) in
987
+ var entries : [ APEntry ] = [ ]
988
+ for viewEntry in view. 0 . entries {
989
+ entries. append ( . song( viewEntry. message) )
990
+ }
991
+
992
+ let new = APHistory ( original: view. 0 , filtred: entries)
993
+ return ( list. swap ( new) , new)
994
+ }
995
+ |> mapToQueue { view -> Signal < APTransition , NoError > in
996
+ let transition = prepareItems ( from: view. 0 ? . filtred, to: view. 1 . filtred, account: account)
997
+ return transition
998
+ } |> deliverOnMainQueue
999
+ } else {
972
1000
var entries : [ APEntry ] = [ ]
973
- for viewEntry in view . 0 . entries {
974
- entries. append ( . song( viewEntry . message) )
1001
+ for message in messages {
1002
+ entries. append ( . song( message) )
975
1003
}
976
-
977
- let new = APHistory ( original: view. 0 , filtred: entries)
978
- return ( list. swap ( new) , new)
1004
+ apply = prepareItems ( from: [ ] , to: entries, account: account) |> deliverOnMainQueue
979
1005
}
980
- |> mapToQueue { view -> Signal < APTransition , NoError > in
981
- let transition = prepareItems ( from: view. 0 ? . filtred, to: view. 1 . filtred, account: account)
982
- return transition
983
- } |> deliverOnMainQueue
1006
+
984
1007
985
1008
let first : Atomic < Bool > = Atomic ( value: true )
986
1009
disposable. set ( apply. start ( next: { [ weak self] ( transition) in
@@ -1016,8 +1039,8 @@ class APChatController : APController {
1016
1039
1017
1040
class APChatMusicController : APChatController {
1018
1041
1019
- init ( context: AccountContext , peerId: PeerId , index: MessageIndex ? , baseRate: Double = 1.0 ) {
1020
- super. init ( context: context, peerId: peerId, index: index, streamable: true , baseRate: baseRate)
1042
+ init ( context: AccountContext , peerId: PeerId , index: MessageIndex ? , baseRate: Double = 1.0 , messages : [ Message ] = [ ] ) {
1043
+ super. init ( context: context, peerId: peerId, index: index, streamable: true , baseRate: baseRate, messages : messages )
1021
1044
}
1022
1045
1023
1046
required init ? ( coder: NSCoder ) {
0 commit comments