mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-12 02:29:59 +00:00
Add stop action to receiver selectors
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
struct ReceiverSelection : Codable {
|
||||
let receiver: Receiver
|
||||
let mediaType: MediaType
|
||||
let mediaType: MediaType?
|
||||
let filePath: String?
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user