+ {
+ switch (screenState)
+ {
+ case 'on':
+ {
+ onUnShareScreen();
+ break;
+ }
+ case 'off':
+ {
+ onShareScreen();
+ break;
+ }
+ case 'need-extension':
+ {
+ onNeedExtension();
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }}
+ />
+
{
+ const producersArray = Object.values(state.producers);
+ const screenProducer =
+ producersArray.find((producer) => producer.source === 'screen');
+
return {
room : state.room,
me : state.me,
- amActiveSpeaker : state.me.name === state.room.activeSpeakerName
+ amActiveSpeaker : state.me.name === state.room.activeSpeakerName,
+ screenProducer : screenProducer
};
};
@@ -161,6 +216,18 @@ const mapDispatchToProps = (dispatch) =>
onLeaveMeeting : () =>
{
dispatch(requestActions.leaveRoom());
+ },
+ onShareScreen : () =>
+ {
+ dispatch(requestActions.enableScreenSharing());
+ },
+ onUnShareScreen : () =>
+ {
+ dispatch(requestActions.disableScreenSharing());
+ },
+ onNeedExtension : () =>
+ {
+ dispatch(requestActions.installExtension());
}
};
};
diff --git a/app/lib/redux/reducers/me.js b/app/lib/redux/reducers/me.js
index be24a81..dd6b41c 100644
--- a/app/lib/redux/reducers/me.js
+++ b/app/lib/redux/reducers/me.js
@@ -6,7 +6,8 @@ const initialState =
device : null,
canSendMic : false,
canSendWebcam : false,
- canShareScreen : true,
+ canShareScreen : false,
+ needExtension : false,
canChangeWebcam : false,
webcamInProgress : false,
screenShareInProgress : false,
@@ -28,9 +29,16 @@ const me = (state = initialState, action) =>
case 'SET_MEDIA_CAPABILITIES':
{
- const { canSendMic, canSendWebcam, canShareScreen } = action.payload;
+ const { canSendMic, canSendWebcam } = action.payload;
- return { ...state, canSendMic, canSendWebcam, canShareScreen };
+ return { ...state, canSendMic, canSendWebcam };
+ }
+
+ case 'SET_SCREEN_CAPABILITIES':
+ {
+ const { canShareScreen, needExtension } = action.payload;
+
+ return { ...state, canShareScreen, needExtension };
}
case 'SET_CAN_CHANGE_WEBCAM':
diff --git a/app/lib/redux/requestActions.js b/app/lib/redux/requestActions.js
index 5a53fb5..1c3b304 100644
--- a/app/lib/redux/requestActions.js
+++ b/app/lib/redux/requestActions.js
@@ -99,6 +99,13 @@ export const disableScreenSharing = () =>
};
};
+export const installExtension = () =>
+{
+ return {
+ type : 'INSTALL_EXTENSION'
+ };
+};
+
export const sendChatMessage = (text, name) =>
{
const message = createNewMessage(text, 'response', name);
diff --git a/app/lib/redux/roomClientMiddleware.js b/app/lib/redux/roomClientMiddleware.js
index 9ba36a8..fed0951 100644
--- a/app/lib/redux/roomClientMiddleware.js
+++ b/app/lib/redux/roomClientMiddleware.js
@@ -123,6 +123,13 @@ export default ({ dispatch, getState }) => (next) =>
break;
}
+ case 'INSTALL_EXTENSION':
+ {
+ client.installExtension();
+
+ break;
+ }
+
case 'SEND_CHAT_MESSAGE':
{
const { message } = action.payload;
diff --git a/app/lib/redux/stateActions.js b/app/lib/redux/stateActions.js
index c788b25..c55bfcd 100644
--- a/app/lib/redux/stateActions.js
+++ b/app/lib/redux/stateActions.js
@@ -30,11 +30,19 @@ export const setMe = ({ peerName, displayName, displayNameSet, device }) =>
};
};
-export const setMediaCapabilities = ({ canSendMic, canSendWebcam, canShareScreen }) =>
+export const setMediaCapabilities = ({ canSendMic, canSendWebcam }) =>
{
return {
type : 'SET_MEDIA_CAPABILITIES',
- payload : { canSendMic, canSendWebcam, canShareScreen }
+ payload : { canSendMic, canSendWebcam }
+ };
+};
+
+export const setScreenCapabilities = ({ canShareScreen, needExtension }) =>
+{
+ return {
+ type : 'SET_SCREEN_CAPABILITIES',
+ payload : { canShareScreen, needExtension }
};
};
diff --git a/app/resources/images/share-screen-extension.svg b/app/resources/images/share-screen-extension.svg
new file mode 100644
index 0000000..8d30bb3
--- /dev/null
+++ b/app/resources/images/share-screen-extension.svg
@@ -0,0 +1,53 @@
+
+
diff --git a/app/stylus/components/Room.styl b/app/stylus/components/Room.styl
index d305da7..8f8ec1e 100644
--- a/app/stylus/components/Room.styl
+++ b/app/stylus/components/Room.styl
@@ -234,20 +234,20 @@
&.screen {
&.on {
- background-image: url('/resources/images/unshare-screen.svg');
+ background-image: url('/resources/images/no-share-screen-black.svg');
}
&.off {
- background-image: url('/resources/images/share-screen.svg');
+ background-image: url('/resources/images/share-screen-black.svg');
}
&.unsupported {
- background-image: url('/resources/images/unshare-screen.svg');
+ background-image: url('/resources/images/no-share-screen-white.svg');
background-color: rgba(#d42241, 0.7);
}
&.need-extension {
- background-image: url('/resources/images/share-screen.svg');
+ background-image: url('/resources/images/share-screen-extension.svg');
}
}