Merge logs

This commit is contained in:
Ali 2020-09-27 17:39:46 +03:00
parent e262fb40b4
commit 99e90e5df4

View File

@ -176,7 +176,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
let arguments = arguments as! DebugControllerArguments let arguments = arguments as! DebugControllerArguments
switch self { switch self {
case let .sendLogs(theme): case let .sendLogs(theme):
return ItemListDisclosureItem(presentationData: presentationData, title: "Send Logs", label: "", sectionId: self.section, style: .blocks, action: { return ItemListDisclosureItem(presentationData: presentationData, title: "Send Logs (Up to 40 MB)", label: "", sectionId: self.section, style: .blocks, action: {
let _ = (Logger.shared.collectLogs() let _ = (Logger.shared.collectLogs()
|> deliverOnMainQueue).start(next: { logs in |> deliverOnMainQueue).start(next: { logs in
let presentationData = arguments.sharedContext.currentPresentationData.with { $0 } let presentationData = arguments.sharedContext.currentPresentationData.with { $0 }
@ -193,12 +193,29 @@ private enum DebugControllerEntry: ItemListNodeEntry {
if let strongController = controller { if let strongController = controller {
strongController.dismiss() strongController.dismiss()
let messages = logs.map { (name, path) -> EnqueueMessage in let lineFeed = "\n".data(using: .utf8)!
let id = arc4random64() var logData: Data = Data()
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: LocalFileReferenceMediaResource(localFilePath: path, randomId: id), previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: nil, attributes: [.FileName(fileName: name)]) for (name, path) in logs {
return .message(text: "", attributes: [], mediaReference: .standalone(media: file), replyToMessageId: nil, localGroupingKey: nil) if !logData.isEmpty {
logData.append(lineFeed)
logData.append(lineFeed)
} }
let _ = enqueueMessages(account: context.account, peerId: peerId, messages: messages).start()
logData.append("------ File: \(name) ------\n".data(using: .utf8)!)
if let data = try? Data(contentsOf: URL(fileURLWithPath: path)) {
logData.append(data)
}
}
let id = arc4random64()
let fileResource = LocalFileMediaResource(fileId: id, size: logData.count, isSecretRelated: false)
context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: logData)
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: logData.count, attributes: [.FileName(fileName: "Log-iOS-Full.txt")])
let message: EnqueueMessage = .message(text: "", attributes: [], mediaReference: .standalone(media: file), replyToMessageId: nil, localGroupingKey: nil)
let _ = enqueueMessages(account: context.account, peerId: peerId, messages: [message]).start()
} }
} }
arguments.pushController(controller) arguments.pushController(controller)
@ -227,7 +244,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
}) })
}) })
case let .sendOneLog(theme): case let .sendOneLog(theme):
return ItemListDisclosureItem(presentationData: presentationData, title: "Send Latest Log", label: "", sectionId: self.section, style: .blocks, action: { return ItemListDisclosureItem(presentationData: presentationData, title: "Send Latest Logs (Up to 4 MB)", label: "", sectionId: self.section, style: .blocks, action: {
let _ = (Logger.shared.collectLogs() let _ = (Logger.shared.collectLogs()
|> deliverOnMainQueue).start(next: { logs in |> deliverOnMainQueue).start(next: { logs in
let presentationData = arguments.sharedContext.currentPresentationData.with { $0 } let presentationData = arguments.sharedContext.currentPresentationData.with { $0 }
@ -244,14 +261,39 @@ private enum DebugControllerEntry: ItemListNodeEntry {
if let strongController = controller { if let strongController = controller {
strongController.dismiss() strongController.dismiss()
let updatedLogs = logs.last.flatMap({ [$0] }) ?? [] let lineFeed = "\n".data(using: .utf8)!
var logData: Data = Data()
let messages = updatedLogs.map { (name, path) -> EnqueueMessage in var latestLogs: [(String, String)] = []
let id = arc4random64() if logs.count < 2 {
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: LocalFileReferenceMediaResource(localFilePath: path, randomId: id), previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: nil, attributes: [.FileName(fileName: name)]) latestLogs = logs
return .message(text: "", attributes: [], mediaReference: .standalone(media: file), replyToMessageId: nil, localGroupingKey: nil) } else {
for i in (logs.count - 2) ..< logs.count {
latestLogs.append(logs[i])
} }
let _ = enqueueMessages(account: context.account, peerId: peerId, messages: messages).start() }
for (name, path) in latestLogs {
if !logData.isEmpty {
logData.append(lineFeed)
logData.append(lineFeed)
}
logData.append("------ File: \(name) ------\n".data(using: .utf8)!)
if let data = try? Data(contentsOf: URL(fileURLWithPath: path)) {
logData.append(data)
}
}
let id = arc4random64()
let fileResource = LocalFileMediaResource(fileId: id, size: logData.count, isSecretRelated: false)
context.account.postbox.mediaBox.storeResourceData(fileResource.id, data: logData)
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: fileResource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "application/text", size: logData.count, attributes: [.FileName(fileName: "Log-iOS-Short.txt")])
let message: EnqueueMessage = .message(text: "", attributes: [], mediaReference: .standalone(media: file), replyToMessageId: nil, localGroupingKey: nil)
let _ = enqueueMessages(account: context.account, peerId: peerId, messages: [message]).start()
} }
} }
arguments.pushController(controller) arguments.pushController(controller)