NotifierUI // Deduplicate messages when necessary.
This commit is contained in:
parent
082e4ba455
commit
c04684d5e4
|
@ -21,17 +21,33 @@ public class Notifier: NSWindowController {
|
|||
}
|
||||
}
|
||||
|
||||
private var currentMessage: String // 承載該副本在初期化時被傳入的訊息內容。
|
||||
private var isNew = true // 新通知標記。
|
||||
|
||||
// MARK: - Private Declarations
|
||||
|
||||
private static var instanceStack: [Notifier] = []
|
||||
private let blankValue = ""
|
||||
|
||||
@discardableResult private init(_ message: String) {
|
||||
currentMessage = message
|
||||
let rawMessage = message.replacingOccurrences(of: "\n", with: "")
|
||||
guard let screenRect = NSScreen.main?.visibleFrame, !rawMessage.isEmpty else {
|
||||
let isDuplicated: Bool = {
|
||||
if let firstInstanceExisted = Self.instanceStack.first {
|
||||
return message == firstInstanceExisted.currentMessage && firstInstanceExisted.isNew
|
||||
}
|
||||
return false
|
||||
}()
|
||||
guard let screenRect = NSScreen.main?.visibleFrame, !rawMessage.isEmpty, !isDuplicated else {
|
||||
super.init(window: nil)
|
||||
return
|
||||
}
|
||||
// 正式進入處理環節。
|
||||
defer { // 先讓新通知標記自此開始過 0.3 秒自動變為 false。
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
|
||||
self.isNew = false
|
||||
}
|
||||
}
|
||||
let kLargeFontSize: Double = 17
|
||||
let kSmallFontSize: Double = 15
|
||||
let messageArray = message.components(separatedBy: "\n")
|
||||
|
|
Loading…
Reference in New Issue