Display message in selector instead of disabling browser action

This commit is contained in:
hensm
2019-09-11 00:10:05 +01:00
parent 2050854ca7
commit 2300101695
8 changed files with 75 additions and 37 deletions

View File

@@ -106,33 +106,48 @@ class ViewController : NSViewController {
stackView.addArrangedSubview(mediaTypeStackView) stackView.addArrangedSubview(mediaTypeStackView)
/** if initData.receivers.count < 1 {
* For each receiver in the initData list, create a new let separator = NSBox()
* ReceiverView, set self as a ReceiverViewDelegate and separator.boxType = .separator
* appends to main stack view.
*
* Keeps a reference to the receiver view to call disable()
* later.
*/
for receiver in initData.receivers {
// Create separator between last receiver / media type
let receiverSeparator = NSBox()
receiverSeparator.boxType = .separator
let receiverView = ReceiverView(receiver: receiver) let notFoundStackView = NSStackView(views: [
receiverView.receiverViewDelegate = self makeLabel(initData.i18n_noReceiversFound)
])
if UInt(initData.availableMediaTypes) == 0 notFoundStackView.alignment = .centerX
|| (initData.availableMediaTypes notFoundStackView.edgeInsets = NSEdgeInsetsMake(18, 0, 18, 0)
& initData.defaultMediaType.rawValue) == 0 {
receiverView.isEnabled = false stackView.addArrangedSubview(separator)
stackView.addArrangedSubview(notFoundStackView)
} else {
/**
* For each receiver in the initData list, create a new
* ReceiverView, set self as a ReceiverViewDelegate and
* appends to main stack view.
*
* Keeps a reference to the receiver view to call disable()
* later.
*/
for receiver in initData.receivers {
// Create separator between last receiver / media type
let receiverSeparator = NSBox()
receiverSeparator.boxType = .separator
let receiverView = ReceiverView(receiver: receiver)
receiverView.receiverViewDelegate = self
if UInt(initData.availableMediaTypes) == 0
|| (initData.availableMediaTypes
& initData.defaultMediaType.rawValue) == 0 {
receiverView.isEnabled = false
}
self.receiverViews.append(receiverView)
stackView.addArrangedSubview(receiverSeparator)
stackView.addArrangedSubview(receiverView)
} }
self.receiverViews.append(receiverView)
stackView.addArrangedSubview(receiverSeparator)
stackView.addArrangedSubview(receiverView)
} }

View File

@@ -16,4 +16,5 @@ struct InitData : Codable {
let i18n_mediaTypeFile: String let i18n_mediaTypeFile: String
let i18n_mediaSelectCastLabel: String let i18n_mediaSelectCastLabel: String
let i18n_mediaSelectToLabel: String let i18n_mediaSelectToLabel: String
let i18n_noReceiversFound: String
} }

View File

@@ -34,6 +34,10 @@
"message": "to:" "message": "to:"
, "description": "Cast <select> (to:)" , "description": "Cast <select> (to:)"
} }
, "popupNoReceiversFound": {
"message": "No receiver devices found"
, "description": "Message displayed in the receiver selector if there are no available receivers."
}
, "popupCastButtonTitle": { , "popupCastButtonTitle": {
"message": "Cast" "message": "Cast"
, "description": "Button text for each receiver entry in the receiver selector." , "description": "Button text for each receiver entry in the receiver selector."

View File

@@ -149,10 +149,15 @@ export default new class StatusManager
// Cleanup // Cleanup
this.receivers.clear(); this.receivers.clear();
this.bridgePort.onDisconnect.removeListener(
this.onBridgePortDisconnect); if (this.bridgePort) {
this.bridgePort.onMessage.removeListener(this.onBridgePortMessage); this.bridgePort.onDisconnect.removeListener(
this.bridgePort = null; this.onBridgePortDisconnect);
this.bridgePort.onMessage.removeListener(
this.onBridgePortMessage);
this.bridgePort = null;
}
window.setTimeout(async () => { window.setTimeout(async () => {
this.bridgePort = await this.createBridgePort(); this.bridgePort = await this.createBridgePort();

View File

@@ -44,7 +44,7 @@ browser.runtime.onInstalled.addListener(async details => {
function initBrowserAction () { function initBrowserAction () {
browser.browserAction.disable(); /*browser.browserAction.disable();
function onServiceChange () { function onServiceChange () {
if (StatusManager.getReceivers().length) { if (StatusManager.getReceivers().length) {
@@ -55,7 +55,7 @@ function initBrowserAction () {
} }
StatusManager.addEventListener("serviceUp", onServiceChange); StatusManager.addEventListener("serviceUp", onServiceChange);
StatusManager.addEventListener("serviceDown", onServiceChange); StatusManager.addEventListener("serviceDown", onServiceChange);*/
/** /**

View File

@@ -100,6 +100,7 @@ export default class NativeReceiverSelector
, i18n_mediaTypeFile: _("popupMediaTypeFile") , i18n_mediaTypeFile: _("popupMediaTypeFile")
, i18n_mediaSelectCastLabel: _("popupMediaSelectCastLabel") , i18n_mediaSelectCastLabel: _("popupMediaSelectCastLabel")
, i18n_mediaSelectToLabel: _("popupMediaSelectToLabel") , i18n_mediaSelectToLabel: _("popupMediaSelectToLabel")
, i18n_noReceiversFound: _("popupNoReceiversFound")
}) })
}); });

View File

@@ -152,13 +152,17 @@ class PopupApp extends Component<{}, PopupAppState> {
</div> </div>
</div> </div>
<ul className="receivers"> <ul className="receivers">
{ this.state.receivers && this.state.receivers.map( { this.state.receivers && this.state.receivers.length
(receiver, i) => ( ? this.state.receivers.map((receiver, i) => (
<ReceiverEntry receiver={ receiver } <ReceiverEntry receiver={ receiver }
onCast={ this.onCast } onCast={ this.onCast }
isLoading={ this.state.isLoading } isLoading={ this.state.isLoading }
canCast={ canCast } canCast={ canCast }
key={ i }/> ))} key={ i } /> ))
: (
<div className="receivers__not-found">
{ _("popupNoReceiversFound") }
</div> )}
</ul> </ul>
</div> </div>
); );

View File

@@ -33,6 +33,14 @@ body {
padding: initial; padding: initial;
} }
.receivers__not-found {
align-items: center;
display: flex;
height: 50px;
justify-content: center;
padding: 0.75em 1em;
}
.receiver { .receiver {
column-gap: 0.75em; column-gap: 0.75em;
display: grid; display: grid;