Skip to content

Commit 275d0ad

Browse files
committed
feat: json format时使用原key顺序, 增加json minify. #32
1 parent 46600a2 commit 275d0ad

17 files changed

+93
-34
lines changed

Tests/Helper/CodableTest.swift

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//
2+
// JSONHelperTest.swift
3+
// Tests
4+
//
5+
// Created by chengpan on 2024/1/28.
6+
//
7+
8+
9+
@testable import redis_pro
10+
import XCTest
11+
12+
final class JSONHelperTest: RedisClientBaseTest {
13+
14+
override func setUpWithError() throws {
15+
// Put setup code here. This method is called before the invocation of each test method in the class.
16+
}
17+
18+
override func tearDownWithError() throws {
19+
// Put teardown code here. This method is called after the invocation of each test method in the class.
20+
}
21+
22+
func testParse() throws {
23+
24+
let text = #"{"latestVersionNum": 1, "latestVersion": null}"#
25+
let v = try JSONDecoder().decode(VersionModel.self, from: text.data(using: .utf8)!)
26+
27+
print("test parse: \(v)")
28+
}
29+
30+
}

Tests/Tests.swift Tests/Helper/Tests.swift

+20
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,25 @@ final class Tests: XCTestCase {
3131
// Put the code you want to measure the time of here.
3232
}
3333
}
34+
35+
func testJson() {
36+
let text = "{\"latestVersionNum\": 1}"
37+
38+
// let data = Data(text.utf8)
39+
// do {
40+
// // make sure this JSON is in the format we expect
41+
// if let dictionary = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
42+
// let latestVersionNum = dictionary["latestVersionNum"]
43+
// print("Dictionary format: \(dictionary), \(latestVersionNum)")
44+
// let b = Int("\(latestVersionNum)") ?? 0
45+
// print("\(b > 0)")
46+
// }
47+
// } catch let error as NSError {
48+
// print("Failed to load: \(error.localizedDescription)")
49+
// }
50+
51+
try JSONDecoder().decode(VersionModel.self, from: text.data(using: .utf8)!)
52+
53+
}
3454

3555
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//
2+
// RedisIdleHandler.swift
3+
// redis-pro
4+
//
5+
// Created by chengpan on 2024/1/21.
6+
//
7+
8+
import Foundation

redis-pro/Common/VersionManager.swift

+6-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import Foundation
99
import SwiftUI
1010
import Logging
11-
import SwiftyJSON
1211

1312
struct VersionManager {
1413
let logger = Logger(label: "version-manager")
@@ -31,22 +30,17 @@ struct VersionManager {
3130
return
3231
}
3332

34-
let jsonObj = JSON(parseJSON: contents)
35-
let latestVersionNum = jsonObj["latestVersionNum"]
36-
let latestVersion = String(describing: jsonObj["latestVersion"])
37-
let updateType = String(describing: jsonObj["updateType"])
38-
let releaseNotes = String(describing: jsonObj["releaseNotes"])
33+
let versionInfo = try JSONDecoder().decode(VersionModel.self, from: contents.data(using: .utf8)!)
3934

4035
let currentVersionInt = Int("\(currentVersionNum ?? 0)") ?? 0
41-
let latestVersionInt = Int("\(latestVersionNum)") ?? 0
42-
logger.info("compare latest version, latest version: \(latestVersionInt), current version: \(currentVersionInt)")
43-
if latestVersionInt > currentVersionInt {
36+
logger.info("compare latest version, latest version info: \(versionInfo), current version: \(currentVersionInt)")
37+
if versionInfo.latestVersionNum > currentVersionInt {
4438
logger.info("get new version success, please update!")
4539

4640
// 提示升级
47-
if updateType == "hint" {
41+
if versionInfo.updateType == "hint" {
4842
Task {
49-
let r = await Messages.confirmAsync("New version \(latestVersion) is available", message: releaseNotes,
43+
let r = await Messages.confirmAsync("New version \(versionInfo.latestVersion) is available", message: versionInfo.releaseNotes,
5044
primaryButton: "Upgrade")
5145

5246
if r {
@@ -57,7 +51,7 @@ struct VersionManager {
5751
}
5852
}
5953
// 强制升级
60-
else if updateType == "force" {
54+
else if versionInfo.updateType == "force" {
6155

6256
}
6357
} else {

redis-pro/Model/VersionModel.swift

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//
2+
// VersionModel.swift
3+
// redis-pro
4+
//
5+
// Created by chengpan on 2024/1/28.
6+
//
7+
8+
import Foundation

redis-pro/Store/ClientListStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import Logging
99
import Foundation
10-
import SwiftyJSON
1110
import ComposableArchitecture
1211

1312
private let logger = Logger(label: "client-list-store")

redis-pro/Store/HashValueStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import Logging
1010
import Foundation
11-
import SwiftyJSON
1211
import ComposableArchitecture
1312

1413
private let logger = Logger(label: "hash-value-store")

redis-pro/Store/ListValueStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import Logging
99
import Foundation
10-
import SwiftyJSON
1110
import ComposableArchitecture
1211

1312
private let logger = Logger(label: "list-value-store")

redis-pro/Store/RedisConfigStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import Logging
1010
import Foundation
11-
import SwiftyJSON
1211
import ComposableArchitecture
1312

1413
private let logger = Logger(label: "redis-config-store")

redis-pro/Store/RedisSystemStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import Logging
1010
import Foundation
11-
import SwiftyJSON
1211
import ComposableArchitecture
1312

1413
enum RedisSystemViewTypeEnum{

redis-pro/Store/RenameStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import Logging
99
import Foundation
10-
import SwiftyJSON
1110
import ComposableArchitecture
1211

1312
private let logger = Logger(label: "rename-store")

redis-pro/Store/SetValueStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import Logging
99
import Foundation
10-
import SwiftyJSON
1110
import ComposableArchitecture
1211

1312
private let logger = Logger(label: "set-value-store")

redis-pro/Store/SlowLogStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import Logging
1010
import Foundation
11-
import SwiftyJSON
1211
import ComposableArchitecture
1312

1413
private let logger = Logger(label: "redis-config-store")

redis-pro/Store/StringValueStore.swift

+14-11
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Logging
99
import Foundation
10-
import SwiftyJSON
10+
import SwiftJSONFormatter
1111
import ComposableArchitecture
1212

1313
private let logger = Logger(label: "string-value-store")
@@ -32,7 +32,8 @@ struct StringValueStore: Reducer {
3232
case getIntactString
3333
case updateLength(Int)
3434
case updateText(String)
35-
case jsonFormat
35+
case jsonPretty
36+
case jsonMinify
3637
case refresh
3738
case none
3839
}
@@ -124,20 +125,22 @@ struct StringValueStore: Reducer {
124125
state.text = text
125126
return .none
126127

127-
case .jsonFormat:
128+
case .jsonPretty:
128129
if state.text.count < 2 {
129-
130-
Messages.show(BizError("Format json error"))
130+
Messages.show(BizError("Invalid json format!"))
131131
return .none
132132
}
133-
let jsonObj = JSON(parseJSON: state.text)
134-
if jsonObj == JSON.null {
135-
Messages.show(BizError("Format json error"))
133+
134+
state.text = SwiftJSONFormatter.beautify(state.text, indent: " ")
135+
return .none
136+
137+
case .jsonMinify:
138+
if state.text.count < 2 {
139+
Messages.show(BizError("Invalid json format!"))
136140
return .none
137141
}
138-
if let string = jsonObj.rawString() {
139-
state.text = string
140-
}
142+
143+
state.text = SwiftJSONFormatter.minify(state.text)
141144
return .none
142145

143146
case .refresh:

redis-pro/Store/ZSetValueStore.swift

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import Logging
99
import Foundation
10-
import SwiftyJSON
1110
import ComposableArchitecture
1211

1312
private let logger = Logger(label: "zset-value-store")

redis-pro/Views/App/AboutView.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ struct AboutView: View {
1515

1616
Text("感谢以下开源项目及项目维护者").font(.title3).bold()
1717
Link("RediStack", destination: URL(string: "https://github.com/Mordil/RediStack")!)
18-
Link("SwiftyJSON", destination: URL(string: "https://github.com/SwiftyJSON/SwiftyJSON")!)
18+
Link("SwiftJSONFormatter", destination: URL(string: "https://github.com/luin/SwiftJSONFormatter")!)
1919
Link("Puppy", destination: URL(string: "https://github.com/sushichop/Puppy")!)
2020
}.padding(40)
2121
.frame(minWidth: 400, maxWidth: 1000, minHeight: 300, maxHeight: 800, alignment: .top)

redis-pro/Views/RedisEditorView/StringEditorView.swift

+6-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import SwiftUI
99
import Logging
1010
import ComposableArchitecture
11+
import FloatingButton
1112

1213
struct StringEditorView: View {
1314
var store: StoreOf<StringValueStore>
@@ -39,7 +40,11 @@ struct StringEditorView: View {
3940
}
4041

4142
Spacer()
42-
MButton(text: "Pretty Json", action: {viewStore.send(.jsonFormat)})
43+
Menu("Format", content: {
44+
Button("Json Pretty", action: { viewStore.send(.jsonPretty)})
45+
Button("Json Minify", action: { viewStore.send(.jsonMinify)})
46+
})
47+
.frame(width:80)
4348
IconButton(icon: "arrow.clockwise", name: "Refresh", action: {viewStore.send(.refresh)})
4449
IconButton(icon: "checkmark", name: "Submit", disabled: !viewStore.isIntactString, action: {viewStore.send(.submit)})
4550
}

0 commit comments

Comments
 (0)