Add stop action to receiver selectors

This commit is contained in:
hensm
2020-01-16 00:47:38 +00:00
parent 4858642caa
commit 9295d8ee83
15 changed files with 219 additions and 30 deletions

View File

@@ -2,6 +2,7 @@ import Cocoa
protocol ReceiverViewDelegate : AnyObject {
func didCast (_ receiver: Receiver)
func didStop (_ receiver: Receiver)
}
class ReceiverView : NSStackView {
@@ -74,6 +75,23 @@ class ReceiverView : NSStackView {
self.addArrangedSubview(self.castButton)
self.distribution = .fill
NSEvent.addLocalMonitorForEvents(
matching: .flagsChanged) { event in
if !self.receiver.status.application.isIdleScreen &&
event.modifierFlags.contains(.option) {
self.castButton.title =
InitDataProvider.shared.data.i18n_stopButtonTitle
self.castButton.action = #selector(ReceiverView.onStop)
} else {
self.castButton.title =
InitDataProvider.shared.data.i18n_castButtonTitle
self.castButton.action = #selector(ReceiverView.onCast)
}
return event
}
}
override func updateConstraints () {
@@ -103,4 +121,9 @@ class ReceiverView : NSStackView {
self.castingSpinner.isHidden = false
self.castingSpinner.startAnimation(nil)
}
@objc
func onStop () {
self.receiverViewDelegate?.didStop(self.receiver);
}
}

View File

@@ -197,4 +197,20 @@ extension ViewController : ReceiverViewDelegate {
fatalError("Error: Failed to encode output data")
}
}
func didStop (_ receiver: Receiver) {
// TODO: Use separate type and do proper JSON encoding
let selection = ReceiverSelection(
receiver: receiver
, mediaType: nil
, filePath: nil)
if let jsonData = try? JSONEncoder().encode(selection)
, let jsonString = String(data: jsonData, encoding: .utf8) {
print(jsonString)
fflush(stdout)
} else {
fatalError("Error: Failed to encode output data")
}
}
}

View File

@@ -10,6 +10,7 @@ struct InitData : Decodable {
let i18n_extensionName: String
let i18n_castButtonTitle: String
let i18n_stopButtonTitle: String
let i18n_mediaTypeApp: String
let i18n_mediaTypeTab: String
let i18n_mediaTypeScreen: String

View File

@@ -1,5 +1,5 @@
struct ReceiverSelection : Codable {
let receiver: Receiver
let mediaType: MediaType
let mediaType: MediaType?
let filePath: String?
}