Add includeMessages API [skip ci]

This commit is contained in:
Ali
2022-12-29 00:14:29 +04:00
parent a2da668fdf
commit b3ac092f2f
4 changed files with 26 additions and 15 deletions

View File

@@ -766,17 +766,13 @@ public final class StorageBox {
return allStats
}
func remove(peerId: Int64?, contentTypes: [UInt8], excludeIds: [Data]) -> [Data] {
func remove(peerId: Int64?, contentTypes: [UInt8], includeIds: [Data], excludeIds: [Data]) -> [Data] {
var resultIds: [Data] = []
self.valueBox.begin()
var scannedIds: [Data: Data] = [:]
for contentType in contentTypes {
self.internalAddSize(contentType: contentType, delta: 0)
}
self.valueBox.scan(self.hashIdToInfoTable, values: { key, value in
let info = ItemInfo(buffer: value)
if !contentTypes.contains(info.contentType) {
@@ -786,6 +782,10 @@ public final class StorageBox {
return true
})
for id in includeIds {
scannedIds[md5Hash(id).data] = id
}
let excludeIds = Set(excludeIds)
if let peerId = peerId {
@@ -945,9 +945,9 @@ public final class StorageBox {
}
}
public func remove(peerId: PeerId?, contentTypes: [UInt8], excludeIds: [Data], completion: @escaping ([Data]) -> Void) {
public func remove(peerId: PeerId?, contentTypes: [UInt8], includeIds: [Data], excludeIds: [Data], completion: @escaping ([Data]) -> Void) {
self.impl.with { impl in
let ids = impl.remove(peerId: peerId?.toInt64(), contentTypes: contentTypes, excludeIds: excludeIds)
let ids = impl.remove(peerId: peerId?.toInt64(), contentTypes: contentTypes, includeIds: includeIds, excludeIds: excludeIds)
completion(ids)
}
}

View File

@@ -284,15 +284,26 @@ func _internal_renderStorageUsageStatsMessages(account: Account, stats: StorageU
}
}
func _internal_clearStorage(account: Account, peerId: EnginePeer.Id?, categories: [StorageUsageStats.CategoryKey], excludeMessages: [Message]) -> Signal<Never, NoError> {
func _internal_clearStorage(account: Account, peerId: EnginePeer.Id?, categories: [StorageUsageStats.CategoryKey], includeMessages: [Message], excludeMessages: [Message]) -> Signal<Never, NoError> {
let mediaBox = account.postbox.mediaBox
return Signal { subscriber in
var resourceIds = Set<MediaResourceId>()
var includeResourceIds = Set<MediaResourceId>()
for message in includeMessages {
extractMediaResourceIds(message: message, resourceIds: &includeResourceIds)
}
var includeIds: [Data] = []
for resourceId in includeResourceIds {
if let data = resourceId.stringRepresentation.data(using: .utf8) {
includeIds.append(data)
}
}
var excludeResourceIds = Set<MediaResourceId>()
for message in excludeMessages {
extractMediaResourceIds(message: message, resourceIds: &resourceIds)
extractMediaResourceIds(message: message, resourceIds: &excludeResourceIds)
}
var excludeIds: [Data] = []
for resourceId in resourceIds {
for resourceId in excludeResourceIds {
if let data = resourceId.stringRepresentation.data(using: .utf8) {
excludeIds.append(data)
}
@@ -319,7 +330,7 @@ func _internal_clearStorage(account: Account, peerId: EnginePeer.Id?, categories
}
}
mediaBox.storageBox.remove(peerId: peerId, contentTypes: mappedContentTypes, excludeIds: excludeIds, completion: { ids in
mediaBox.storageBox.remove(peerId: peerId, contentTypes: mappedContentTypes, includeIds: includeIds, excludeIds: excludeIds, completion: { ids in
var resourceIds: [MediaResourceId] = []
for id in ids {
if let value = String(data: id, encoding: .utf8) {

View File

@@ -233,8 +233,8 @@ public extension TelegramEngine {
return _internal_renderStorageUsageStatsMessages(account: self.account, stats: stats, categories: categories, existingMessages: existingMessages)
}
public func clearStorage(peerId: EnginePeer.Id?, categories: [StorageUsageStats.CategoryKey], excludeMessages: [Message]) -> Signal<Never, NoError> {
return _internal_clearStorage(account: self.account, peerId: peerId, categories: categories, excludeMessages: excludeMessages)
public func clearStorage(peerId: EnginePeer.Id?, categories: [StorageUsageStats.CategoryKey], includeMessages: [Message], excludeMessages: [Message]) -> Signal<Never, NoError> {
return _internal_clearStorage(account: self.account, peerId: peerId, categories: categories, includeMessages: includeMessages, excludeMessages: excludeMessages)
}
public func clearStorage(peerIds: Set<EnginePeer.Id>, includeMessages: [Message], excludeMessages: [Message]) -> Signal<Never, NoError> {

View File

@@ -2509,7 +2509,7 @@ final class StorageUsageScreenComponent: Component {
self.isClearing = true
self.state?.updated(transition: .immediate)
let _ = (component.context.engine.resources.clearStorage(peerId: peerId, categories: mappedCategories, excludeMessages: [])
let _ = (component.context.engine.resources.clearStorage(peerId: peerId, categories: mappedCategories, includeMessages: [], excludeMessages: [])
|> deliverOnMainQueue).start(completed: { [weak self] in
guard let self, let component = self.component, let currentStats = self.currentStats else {
return