mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 06:35:51 +00:00
Refactor LegacyMediaPickerUI and WebSearchUI [skip ci]
This commit is contained in:
74
submodules/WebSearchUI/Sources/WebSearchRecentQueries.swift
Normal file
74
submodules/WebSearchUI/Sources/WebSearchRecentQueries.swift
Normal file
@@ -0,0 +1,74 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
import Postbox
|
||||
import SwiftSignalKit
|
||||
import TelegramUIPreferences
|
||||
|
||||
private struct WebSearchRecentQueryItemId {
|
||||
public let rawValue: MemoryBuffer
|
||||
|
||||
var value: String {
|
||||
return String(data: self.rawValue.makeData(), encoding: .utf8) ?? ""
|
||||
}
|
||||
|
||||
init(_ rawValue: MemoryBuffer) {
|
||||
self.rawValue = rawValue
|
||||
}
|
||||
|
||||
init?(_ value: String) {
|
||||
if let data = value.data(using: .utf8) {
|
||||
self.rawValue = MemoryBuffer(data: data)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public final class RecentWebSearchQueryItem: OrderedItemListEntryContents {
|
||||
init() {
|
||||
}
|
||||
|
||||
public init(decoder: PostboxDecoder) {
|
||||
}
|
||||
|
||||
public func encode(_ encoder: PostboxEncoder) {
|
||||
}
|
||||
}
|
||||
|
||||
func addRecentWebSearchQuery(postbox: Postbox, string: String) -> Signal<Void, NoError> {
|
||||
return postbox.transaction { transaction in
|
||||
if let itemId = WebSearchRecentQueryItemId(string) {
|
||||
transaction.addOrMoveToFirstPositionOrderedItemListItem(collectionId: ApplicationSpecificOrderedItemListCollectionId.webSearchRecentQueries, item: OrderedItemListEntry(id: itemId.rawValue, contents: RecentWebSearchQueryItem()), removeTailIfCountExceeds: 100)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func removeRecentWebSearchQuery(postbox: Postbox, string: String) -> Signal<Void, NoError> {
|
||||
return postbox.transaction { transaction -> Void in
|
||||
if let itemId = WebSearchRecentQueryItemId(string) {
|
||||
transaction.removeOrderedItemListItem(collectionId: ApplicationSpecificOrderedItemListCollectionId.webSearchRecentQueries, itemId: itemId.rawValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func clearRecentWebSearchQueries(postbox: Postbox) -> Signal<Void, NoError> {
|
||||
return postbox.transaction { transaction -> Void in
|
||||
transaction.replaceOrderedItemListItems(collectionId: ApplicationSpecificOrderedItemListCollectionId.webSearchRecentQueries, items: [])
|
||||
}
|
||||
}
|
||||
|
||||
func webSearchRecentQueries(postbox: Postbox) -> Signal<[String], NoError> {
|
||||
return postbox.combinedView(keys: [.orderedItemList(id: ApplicationSpecificOrderedItemListCollectionId.webSearchRecentQueries)])
|
||||
|> mapToSignal { view -> Signal<[String], NoError> in
|
||||
return postbox.transaction { transaction -> [String] in
|
||||
var result: [String] = []
|
||||
if let view = view.views[.orderedItemList(id: ApplicationSpecificOrderedItemListCollectionId.webSearchRecentQueries)] as? OrderedItemListView {
|
||||
for item in view.items {
|
||||
let value = WebSearchRecentQueryItemId(item.id).value
|
||||
result.append(value)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user