mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
72 lines
2.8 KiB
Swift
72 lines
2.8 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import Postbox
|
|
import SwiftSignalKit
|
|
import TelegramUIPreferences
|
|
|
|
private struct SettingsSearchRecentQueryItemId {
|
|
public let rawValue: MemoryBuffer
|
|
|
|
var value: Int64 {
|
|
return self.rawValue.makeData().withUnsafeBytes { $0.pointee } as Int64
|
|
}
|
|
|
|
init(_ rawValue: MemoryBuffer) {
|
|
self.rawValue = rawValue
|
|
}
|
|
|
|
init(_ value: Int64) {
|
|
var value = value
|
|
self.rawValue = MemoryBuffer(data: Data(bytes: &value, count: MemoryLayout.size(ofValue: value)))
|
|
}
|
|
}
|
|
|
|
public final class RecentSettingsSearchQueryItem: OrderedItemListEntryContents {
|
|
public init() {
|
|
}
|
|
|
|
public init(decoder: PostboxDecoder) {
|
|
}
|
|
|
|
public func encode(_ encoder: PostboxEncoder) {
|
|
}
|
|
}
|
|
|
|
func addRecentSettingsSearchItem(postbox: Postbox, item: SettingsSearchableItemId) {
|
|
let _ = (postbox.transaction { transaction in
|
|
let itemId = SettingsSearchRecentQueryItemId(item.index)
|
|
transaction.addOrMoveToFirstPositionOrderedItemListItem(collectionId: ApplicationSpecificOrderedItemListCollectionId.settingsSearchRecentItems, item: OrderedItemListEntry(id: itemId.rawValue, contents: RecentSettingsSearchQueryItem()), removeTailIfCountExceeds: 100)
|
|
}).start()
|
|
}
|
|
|
|
func removeRecentSettingsSearchItem(postbox: Postbox, item: SettingsSearchableItemId) {
|
|
let _ = (postbox.transaction { transaction -> Void in
|
|
let itemId = SettingsSearchRecentQueryItemId(item.index)
|
|
transaction.removeOrderedItemListItem(collectionId: ApplicationSpecificOrderedItemListCollectionId.settingsSearchRecentItems, itemId: itemId.rawValue)
|
|
}).start()
|
|
}
|
|
|
|
func clearRecentSettingsSearchItems(postbox: Postbox) {
|
|
let _ = (postbox.transaction { transaction -> Void in
|
|
transaction.replaceOrderedItemListItems(collectionId: ApplicationSpecificOrderedItemListCollectionId.settingsSearchRecentItems, items: [])
|
|
}).start()
|
|
}
|
|
|
|
func settingsSearchRecentItems(postbox: Postbox) -> Signal<[SettingsSearchableItemId], NoError> {
|
|
return postbox.combinedView(keys: [.orderedItemList(id: ApplicationSpecificOrderedItemListCollectionId.settingsSearchRecentItems)])
|
|
|> mapToSignal { view -> Signal<[SettingsSearchableItemId], NoError> in
|
|
return postbox.transaction { transaction -> [SettingsSearchableItemId] in
|
|
var result: [SettingsSearchableItemId] = []
|
|
if let view = view.views[.orderedItemList(id: ApplicationSpecificOrderedItemListCollectionId.settingsSearchRecentItems)] as? OrderedItemListView {
|
|
for item in view.items {
|
|
let index = SettingsSearchRecentQueryItemId(item.id).value
|
|
if let itemId = SettingsSearchableItemId(index: index) {
|
|
result.append(itemId)
|
|
}
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
}
|
|
}
|