mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Add includeMessages API [skip ci]
This commit is contained in:
@@ -766,17 +766,13 @@ public final class StorageBox {
|
|||||||
return allStats
|
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] = []
|
var resultIds: [Data] = []
|
||||||
|
|
||||||
self.valueBox.begin()
|
self.valueBox.begin()
|
||||||
|
|
||||||
var scannedIds: [Data: Data] = [:]
|
var scannedIds: [Data: Data] = [:]
|
||||||
|
|
||||||
for contentType in contentTypes {
|
|
||||||
self.internalAddSize(contentType: contentType, delta: 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
self.valueBox.scan(self.hashIdToInfoTable, values: { key, value in
|
self.valueBox.scan(self.hashIdToInfoTable, values: { key, value in
|
||||||
let info = ItemInfo(buffer: value)
|
let info = ItemInfo(buffer: value)
|
||||||
if !contentTypes.contains(info.contentType) {
|
if !contentTypes.contains(info.contentType) {
|
||||||
@@ -786,6 +782,10 @@ public final class StorageBox {
|
|||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
for id in includeIds {
|
||||||
|
scannedIds[md5Hash(id).data] = id
|
||||||
|
}
|
||||||
|
|
||||||
let excludeIds = Set(excludeIds)
|
let excludeIds = Set(excludeIds)
|
||||||
|
|
||||||
if let peerId = peerId {
|
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
|
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)
|
completion(ids)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
let mediaBox = account.postbox.mediaBox
|
||||||
return Signal { subscriber in
|
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 {
|
for message in excludeMessages {
|
||||||
extractMediaResourceIds(message: message, resourceIds: &resourceIds)
|
extractMediaResourceIds(message: message, resourceIds: &excludeResourceIds)
|
||||||
}
|
}
|
||||||
var excludeIds: [Data] = []
|
var excludeIds: [Data] = []
|
||||||
for resourceId in resourceIds {
|
for resourceId in excludeResourceIds {
|
||||||
if let data = resourceId.stringRepresentation.data(using: .utf8) {
|
if let data = resourceId.stringRepresentation.data(using: .utf8) {
|
||||||
excludeIds.append(data)
|
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] = []
|
var resourceIds: [MediaResourceId] = []
|
||||||
for id in ids {
|
for id in ids {
|
||||||
if let value = String(data: id, encoding: .utf8) {
|
if let value = String(data: id, encoding: .utf8) {
|
||||||
|
|||||||
@@ -233,8 +233,8 @@ public extension TelegramEngine {
|
|||||||
return _internal_renderStorageUsageStatsMessages(account: self.account, stats: stats, categories: categories, existingMessages: existingMessages)
|
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> {
|
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, excludeMessages: excludeMessages)
|
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> {
|
public func clearStorage(peerIds: Set<EnginePeer.Id>, includeMessages: [Message], excludeMessages: [Message]) -> Signal<Never, NoError> {
|
||||||
|
|||||||
@@ -2509,7 +2509,7 @@ final class StorageUsageScreenComponent: Component {
|
|||||||
self.isClearing = true
|
self.isClearing = true
|
||||||
self.state?.updated(transition: .immediate)
|
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
|
|> deliverOnMainQueue).start(completed: { [weak self] in
|
||||||
guard let self, let component = self.component, let currentStats = self.currentStats else {
|
guard let self, let component = self.component, let currentStats = self.currentStats else {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user