mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-28 20:29:53 +00:00
test
This commit is contained in:
parent
1d8bc5e622
commit
553be124d5
2 changed files with 14 additions and 14 deletions
|
@ -273,17 +273,17 @@ class ActiveChatState {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct BoxedValue2<T: Hashable>: /*Identifiable, */Hashable {
|
class BoxedValue2<T: Hashable>: /*Identifiable, */Hashable {
|
||||||
// var id: Int64 { (boxedValue as! MergedItem).id }
|
// var id: Int64 { (boxedValue as! MergedItem).id }
|
||||||
|
|
||||||
static func == (lhs: BoxedValue2<T>, rhs: BoxedValue2<T>) -> Bool {
|
static func == (lhs: BoxedValue2<T>, rhs: BoxedValue2<T>) -> Bool {
|
||||||
lhs.boxedValue == rhs.boxedValue
|
lhs.boxedValue == rhs.boxedValue
|
||||||
}
|
}
|
||||||
|
|
||||||
var hashValue: Int { (boxedValue as! MergedItem).newest().hashValue }
|
var hashValue: Int { (boxedValue as! MergedItem).newest().item.hashValue }
|
||||||
|
|
||||||
func hash(into hasher: inout Hasher) {
|
func hash(into hasher: inout Hasher) {
|
||||||
hasher.combine("\((boxedValue as! MergedItem).newest())")
|
hasher.combine("\((boxedValue as! MergedItem).newest().item)")
|
||||||
}
|
}
|
||||||
|
|
||||||
var boxedValue : T
|
var boxedValue : T
|
||||||
|
|
|
@ -48,7 +48,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||||
itemsUpdaterTask?.cancel()
|
itemsUpdaterTask?.cancel()
|
||||||
// when tableView is dragging and new items are added, scroll position cannot be set correctly
|
// when tableView is dragging and new items are added, scroll position cannot be set correctly
|
||||||
// so it's better to just wait until dragging ends
|
// so it's better to just wait until dragging ends
|
||||||
if controller.tableView.isDragging {
|
if false && controller.tableView.isDragging {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
itemsUpdaterTask = Task {
|
itemsUpdaterTask = Task {
|
||||||
while controller.tableView.isDragging {
|
while controller.tableView.isDragging {
|
||||||
|
@ -78,7 +78,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||||
// Putting MergedItem here directly prevents UITableViewDiffableDataSource to make partial updates
|
// Putting MergedItem here directly prevents UITableViewDiffableDataSource to make partial updates
|
||||||
// which looks like UITableView scrolls to bottom on insert values to bottom instead of
|
// which looks like UITableView scrolls to bottom on insert values to bottom instead of
|
||||||
// remains in the same scroll position
|
// remains in the same scroll position
|
||||||
private var dataSource: UITableViewDiffableDataSource<Section, Int>!
|
private var dataSource: UITableViewDiffableDataSource<Section, BoxedValue2<MergedItem>>!
|
||||||
var itemCount: Int {
|
var itemCount: Int {
|
||||||
get {
|
get {
|
||||||
representer.mergedItems.items.count
|
representer.mergedItems.items.count
|
||||||
|
@ -114,7 +114,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Configure data source
|
// 3. Configure data source
|
||||||
self.dataSource = UITableViewDiffableDataSource<Section, Int>(
|
self.dataSource = UITableViewDiffableDataSource<Section, BoxedValue2<MergedItem>>(
|
||||||
tableView: tableView
|
tableView: tableView
|
||||||
) { (tableView, indexPath, item) -> UITableViewCell? in
|
) { (tableView, indexPath, item) -> UITableViewCell? in
|
||||||
if indexPath.item > self.itemCount - 8 {
|
if indexPath.item > self.itemCount - 8 {
|
||||||
|
@ -124,12 +124,12 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||||
}
|
}
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseId, for: indexPath)
|
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseId, for: indexPath)
|
||||||
if #available(iOS 16.0, *) {
|
if #available(iOS 16.0, *) {
|
||||||
cell.contentConfiguration = UIHostingConfiguration { self.representer.content(indexPath.item, self.itemsInPrevSnapshot[item]!) }
|
cell.contentConfiguration = UIHostingConfiguration { self.representer.content(indexPath.item, item.boxedValue) }
|
||||||
.margins(.all, 0)
|
.margins(.all, 0)
|
||||||
.minSize(height: 1) // Passing zero will result in system default of 44 points being used
|
.minSize(height: 1) // Passing zero will result in system default of 44 points being used
|
||||||
} else {
|
} else {
|
||||||
if let cell = cell as? HostingCell<Content> {
|
if let cell = cell as? HostingCell<Content> {
|
||||||
cell.set(content: self.representer.content(indexPath.item, self.itemsInPrevSnapshot[item]!), parent: self)
|
cell.set(content: self.representer.content(indexPath.item, item.boxedValue), parent: self)
|
||||||
} else {
|
} else {
|
||||||
fatalError("Unexpected Cell Type for: \(item)")
|
fatalError("Unexpected Cell Type for: \(item)")
|
||||||
}
|
}
|
||||||
|
@ -256,21 +256,21 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||||
let insertedOneNewestItem = wasCount != 0 && representer.mergedItems.items.count - wasCount == 1 && prevSnapshot.itemIdentifiers.first!.hashValue == self.representer.mergedItems.items[1].hashValue
|
let insertedOneNewestItem = wasCount != 0 && representer.mergedItems.items.count - wasCount == 1 && prevSnapshot.itemIdentifiers.first!.hashValue == self.representer.mergedItems.items[1].hashValue
|
||||||
logger.debug("LALAL WAS \(wasCount) will be \(self.representer.mergedItems.items.count)")
|
logger.debug("LALAL WAS \(wasCount) will be \(self.representer.mergedItems.items.count)")
|
||||||
//self.representer.mergedItems = MergedItems.create(items, representer.unreadCount, representer.revealedItems, ItemsModel.shared.chatState)
|
//self.representer.mergedItems = MergedItems.create(items, representer.unreadCount, representer.revealedItems, ItemsModel.shared.chatState)
|
||||||
let snapshot: NSDiffableDataSourceSnapshot<Section, Int>
|
let snapshot: NSDiffableDataSourceSnapshot<Section, BoxedValue2<MergedItem>>
|
||||||
let itemsInCurrentSnapshot: Dictionary<Int, MergedItem>
|
let itemsInCurrentSnapshot: Dictionary<Int, MergedItem>
|
||||||
if insertedOneNewestItem {
|
if insertedOneNewestItem {
|
||||||
prevSnapshot.insertItems([representer.mergedItems.items.first!.hashValue], beforeItem: prevSnapshot.itemIdentifiers.first!)
|
prevSnapshot.insertItems([BoxedValue2(representer.mergedItems.items.first!)], beforeItem: prevSnapshot.itemIdentifiers.first!)
|
||||||
var new = itemsInPrevSnapshot
|
var new = itemsInPrevSnapshot
|
||||||
new[representer.mergedItems.items.first!.hashValue] = representer.mergedItems.items.first!
|
//new[representer.mergedItems.items.first!.hashValue] = representer.mergedItems.items.first!
|
||||||
itemsInCurrentSnapshot = new
|
itemsInCurrentSnapshot = new
|
||||||
snapshot = prevSnapshot
|
snapshot = prevSnapshot
|
||||||
} else {
|
} else {
|
||||||
var new: Dictionary<Int, MergedItem> = [:]
|
var new: Dictionary<Int, MergedItem> = [:]
|
||||||
var snap = NSDiffableDataSourceSnapshot<Section, Int>()
|
var snap = NSDiffableDataSourceSnapshot<Section, BoxedValue2<MergedItem>>()
|
||||||
snap.appendSections([.main])
|
snap.appendSections([.main])
|
||||||
snap.appendItems(representer.mergedItems.items.map({ merged in
|
snap.appendItems(representer.mergedItems.items.map({ merged in
|
||||||
new[merged.hashValue] = merged
|
new[merged.hashValue] = merged
|
||||||
return merged.hashValue
|
return BoxedValue2(merged)//.hashValue
|
||||||
}))
|
}))
|
||||||
itemsInCurrentSnapshot = new
|
itemsInCurrentSnapshot = new
|
||||||
|
|
||||||
|
@ -295,7 +295,7 @@ struct ReverseList<Content: View>: UIViewControllerRepresentable {
|
||||||
snapshot,
|
snapshot,
|
||||||
animatingDifferences: insertedOneNewestItem
|
animatingDifferences: insertedOneNewestItem
|
||||||
)
|
)
|
||||||
if let firstUnreadItem = snapshot.itemIdentifiers.lastIndex(where: { hash in itemsInPrevSnapshot[hash]!.hasUnread() }) {
|
if let firstUnreadItem = snapshot.itemIdentifiers.lastIndex(where: { item in item.boxedValue.hasUnread() }) {
|
||||||
scrollToRowWhenKnowSize(firstUnreadItem)
|
scrollToRowWhenKnowSize(firstUnreadItem)
|
||||||
} else {
|
} else {
|
||||||
tableView.setContentOffset(
|
tableView.setContentOffset(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue