Skip to content
This repository was archived by the owner on Sep 25, 2025. It is now read-only.

Commit 80d6fe7

Browse files
committed
Minor issues fix
1. Fix multiple parts output logs 2. Add opened flag for auto open
1 parent b17e181 commit 80d6fe7

2 files changed

Lines changed: 13 additions & 10 deletions

File tree

Sources/AppleReserver/Request.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ struct Request {
4444
}
4545
}
4646

47-
static func monitor(region: String, model: String, storeNumbers: [String], partNumbers: [String]) -> Promise<[String: String]> {
47+
static func monitor(region: String, model: String, storeNumbers: [String], partNumbers: [String]) -> Promise<[(String, String)]> {
4848
Promise { seal in
4949
AF.request(AppleURL.availability(of: region, model: model)).responseJSON { (response) in
5050
if let error = response.error {
5151
seal.reject(error)
5252
} else {
53-
var results: [String: String] = [:]
53+
var results: [(String, String)] = []
5454
let stores = ((response.value as? [String: Any])?["stores"] as? [String: Any]) ?? [:]
5555
for store in stores.filter({ storeNumbers.contains($0.key) }) {
5656
guard let parts = store.value as? [String: [String: [String: Bool]]] else {
@@ -60,11 +60,7 @@ struct Request {
6060
guard Availability(key: part.key, value: part.value).available else {
6161
continue
6262
}
63-
if results.contains(where: { $0.key == store.key }) {
64-
results[store.key]?.append(part.key)
65-
} else {
66-
results[store.key] = part.key
67-
}
63+
results.append((store.key, part.key))
6864
}
6965
}
7066
seal.fulfill(results)

Sources/AppleReserver/main.swift

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,13 @@ struct Availabilities: ParsableCommand {
6464
struct Monitor: ParsableCommand {
6565
static var configuration = CommandConfiguration(abstract: "Monitor the availabilities for the specific stores and parts.")
6666
static var repeater: Repeater?
67-
static var count: UInt = 0
6867

6968
@Option(name: .shortAndLong, help: "Refresh interval")
7069
var interval: UInt8 = 3
7170

71+
@Option(name: .shortAndLong, help: "Auto open reverse URL")
72+
var autoOpen: Bool = false
73+
7274
@Option(name: .shortAndLong, help: "Region, eg: CN, MO")
7375
var region: String = "CN"
7476

@@ -82,18 +84,23 @@ struct Monitor: ParsableCommand {
8284
var partNumbers: [String]
8385

8486
func run() throws {
87+
var count = 0
88+
var opened = false
8589
Monitor.repeater = .every(.seconds(Double(interval))) { _ in
8690
firstly {
8791
Request.monitor(region: region, model: model, storeNumbers: storeNumbers, partNumbers: partNumbers)
8892
}.done { results in
89-
Monitor.count += 1
93+
count += 1
9094
if results.isEmpty {
91-
print("\u{1B}[1A\u{1B}[KChecked for \(Monitor.count) times.")
95+
opened = false
96+
print("\u{1B}[1A\u{1B}[KChecked for \(count) times.")
9297
} else {
9398
results.forEach { (store: String, part: String) in
9499
let url = AppleURL.reserve(of: region, model: model, store: store, part: part)
95100
print("🚨 [\(part)] 马上预约:\(url)")
101+
if autoOpen && !opened { Script.execute(command: "open '\(url.absoluteString)'") }
96102
}
103+
opened = true
97104
}
98105
}.catch { error in
99106
print(error)

0 commit comments

Comments
 (0)