155 lines
4.9 KiB
Swift
155 lines
4.9 KiB
Swift
//
|
|
// Example
|
|
// man
|
|
//
|
|
// Created by man 11/11/2018.
|
|
// Copyright © 2020 man. All rights reserved.
|
|
//
|
|
|
|
enum EditType {
|
|
case unknown
|
|
case requestHeader
|
|
case responseHeader
|
|
case log
|
|
}
|
|
|
|
import Foundation
|
|
import UIKit
|
|
|
|
class JsonViewController: UIViewController {
|
|
|
|
@IBOutlet weak var textView: CustomTextView!
|
|
@IBOutlet weak var imageView: UIImageView!
|
|
@IBOutlet weak var naviItem: UINavigationItem!
|
|
|
|
var naviItemTitleLabel: UILabel?
|
|
|
|
var editType: EditType = .unknown
|
|
var httpModel: _HttpModel?
|
|
var detailModel: NetworkDetailModel?
|
|
|
|
//Edited url
|
|
var editedURLString: String?
|
|
//Edited content
|
|
var editedContent: String?
|
|
|
|
//log
|
|
var logTitleString: String?
|
|
var logModels: [_OCLogModel]?
|
|
var logModel: _OCLogModel?
|
|
var justCancelCallback:(() -> Void)?
|
|
|
|
static func instanceFromStoryBoard() -> JsonViewController {
|
|
let storyboard = UIStoryboard(name: "Network", bundle: Bundle(for: CocoaDebug.self))
|
|
return storyboard.instantiateViewController(withIdentifier: "JsonViewController") as! JsonViewController
|
|
}
|
|
|
|
//MARK: - tool
|
|
|
|
//detect format (JSON/Form)
|
|
func detectSerializer() {
|
|
guard let content = detailModel?.content else {
|
|
detailModel?.requestSerializer = RequestSerializer.JSON//default JSON format
|
|
return
|
|
}
|
|
|
|
if let _ = content.stringToDictionary() {
|
|
//JSON format
|
|
detailModel?.requestSerializer = RequestSerializer.JSON
|
|
} else {
|
|
//Form format
|
|
detailModel?.requestSerializer = RequestSerializer.form
|
|
|
|
if let jsonString = detailModel?.content?.formStringToJsonString() {
|
|
textView.text = jsonString
|
|
detailModel?.requestSerializer = RequestSerializer.JSON
|
|
detailModel?.content = textView.text
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//MARK: - init
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
// navigationController?.hidesBarsOnSwipe = true
|
|
}
|
|
|
|
override func viewWillDisappear(_ animated: Bool) {
|
|
super.viewWillDisappear(animated)
|
|
// navigationController?.hidesBarsOnSwipe = false
|
|
|
|
if let index = logModels?.firstIndex(where: { (model) -> Bool in
|
|
return model.isSelected == true
|
|
}) {
|
|
logModels?[index].isSelected = false
|
|
}
|
|
|
|
logModel?.isSelected = true
|
|
|
|
if let justCancelCallback = justCancelCallback {
|
|
justCancelCallback()
|
|
}
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
naviItemTitleLabel = UILabel.init(frame: CGRect(x: 0, y: 0, width: 80, height: 40))
|
|
naviItemTitleLabel?.textAlignment = .center
|
|
naviItemTitleLabel?.textColor = Color.mainGreen
|
|
naviItemTitleLabel?.font = .boldSystemFont(ofSize: 20)
|
|
naviItemTitleLabel?.text = detailModel?.title
|
|
naviItem.titleView = naviItemTitleLabel
|
|
|
|
textView.textContainer.lineFragmentPadding = 15
|
|
// textView.textContainerInset = .zero
|
|
|
|
//detect type (default type URL)
|
|
if detailModel?.title == "REQUEST HEADER" {
|
|
editType = .requestHeader
|
|
}
|
|
if detailModel?.title == "RESPONSE HEADER" {
|
|
editType = .responseHeader
|
|
}
|
|
|
|
//setup UI
|
|
if editType == .requestHeader
|
|
{
|
|
imageView.isHidden = true
|
|
textView.isHidden = false
|
|
textView.text = String(detailModel?.requestHeaderFields?.dictionaryToString()?.dropFirst().dropLast().dropFirst().dropLast().dropFirst().dropFirst() ?? "").replacingOccurrences(of: "\",\n \"", with: "\",\n\"")
|
|
}
|
|
else if editType == .responseHeader
|
|
{
|
|
imageView.isHidden = true
|
|
textView.isHidden = false
|
|
textView.text = String(detailModel?.responseHeaderFields?.dictionaryToString()?.dropFirst().dropLast().dropFirst().dropLast().dropFirst().dropFirst() ?? "").replacingOccurrences(of: "\",\n \"", with: "\",\n\"")
|
|
}
|
|
else if editType == .log
|
|
{
|
|
imageView.isHidden = true
|
|
textView.isHidden = false
|
|
naviItemTitleLabel?.text = logTitleString
|
|
|
|
if let data = logModel?.contentData {
|
|
textView.text = data.dataToString()
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if let content = detailModel?.content {
|
|
imageView.isHidden = true
|
|
textView.isHidden = false
|
|
textView.text = content
|
|
detectSerializer()//detect format (JSON/Form)
|
|
}
|
|
if let image = detailModel?.image {
|
|
textView.isHidden = true
|
|
imageView.isHidden = false
|
|
imageView.image = image
|
|
}
|
|
}
|
|
}
|
|
}
|