diff --git a/pom.xml b/pom.xml index 39be58049..167578233 100644 --- a/pom.xml +++ b/pom.xml @@ -357,7 +357,7 @@ ${project.groupId} jitsi-xmpp-extensions - 1.0-78-g62d03d4 + 1.0-82-ge8aacab org.slf4j diff --git a/src/main/java/org/jitsi/jigasi/JigasiBundleActivator.java b/src/main/java/org/jitsi/jigasi/JigasiBundleActivator.java index 31e08dd18..4a90e1908 100644 --- a/src/main/java/org/jitsi/jigasi/JigasiBundleActivator.java +++ b/src/main/java/org/jitsi/jigasi/JigasiBundleActivator.java @@ -236,6 +236,17 @@ public void startWithServices(final BundleContext bundleContext) new DefaultPacketExtensionProvider<>(RecordingStatus.class) ); + ProviderManager.addExtensionProvider( + ConferenceProperties.ELEMENT, + ConferenceProperties.NAMESPACE, + new DefaultPacketExtensionProvider<>(ConferenceProperties.class) + ); + ProviderManager.addExtensionProvider( + ConferenceProperties.ConferenceProperty.ELEMENT, + ConferenceProperties.NAMESPACE, + new DefaultPacketExtensionProvider<>(ConferenceProperties.ConferenceProperty.class) + ); + logger.info("initialized SipGateway"); sipGateway = new SipGateway(bundleContext) { diff --git a/src/main/java/org/jitsi/jigasi/sounds/SoundNotificationManager.java b/src/main/java/org/jitsi/jigasi/sounds/SoundNotificationManager.java index 8d35462f6..e6629d58d 100644 --- a/src/main/java/org/jitsi/jigasi/sounds/SoundNotificationManager.java +++ b/src/main/java/org/jitsi/jigasi/sounds/SoundNotificationManager.java @@ -30,6 +30,7 @@ import org.jitsi.utils.*; import org.jitsi.utils.logging.Logger; import org.jitsi.xmpp.extensions.jibri.*; +import org.jitsi.xmpp.extensions.jitsimeet.*; import org.jivesoftware.smack.packet.*; import java.util.*; @@ -232,13 +233,37 @@ private CallContext getCallContext() */ public void process(Presence presence) { - RecordingStatus rs = presence.getExtension(RecordingStatus.class); - - if (rs != null - && gatewaySession.getFocusResourceAddr().equals( - presence.getFrom().getResourceOrEmpty().toString())) + if (gatewaySession.getFocusResourceAddr().equals(presence.getFrom().getResourceOrEmpty().toString())) { - notifyRecordingStatusChanged(rs.getRecordingMode(), rs.getStatus()); + boolean isJibriRecordingOn = false; + RecordingStatus rs = presence.getExtension(RecordingStatus.class); + if (rs != null) + { + isJibriRecordingOn = rs.getStatus() == JibriIq.Status.ON; + } + + boolean isAudioRecordingOn = false; + ConferenceProperties props = presence.getExtension(ConferenceProperties.class); + + if (props != null) + { + ConferenceProperties.ConferenceProperty prop + = props.getProperties().stream() + .filter(p -> ConferenceProperties.KEY_AUDIO_RECORDING_ENABLED.equals(p.getKey())) + .findFirst().orElse(null); + + isAudioRecordingOn = prop != null && Boolean.parseBoolean(prop.getValue()); + } + + JibriIq.Status newStatus + = isJibriRecordingOn || isAudioRecordingOn ? JibriIq.Status.ON : JibriIq.Status.OFF; + + if (currentJibriStatus.equals(newStatus)) + { + return; + } + + notifyRecordingStatusChanged(rs != null ? rs.getRecordingMode() : JibriIq.RecordingMode.FILE, newStatus); } } @@ -251,11 +276,6 @@ public void process(Presence presence) private void notifyRecordingStatusChanged( JibriIq.RecordingMode mode, JibriIq.Status status) { - // not a change, ignore - if (currentJibriStatus.equals(status)) - { - return; - } currentJibriStatus = status; String offSound;