mirror of
https://github.com/schlagmichdoch/PairDrop.git
synced 2025-04-21 07:16:18 -04:00
When switching public rooms disconnect from devices in old room (fixes #298)
This commit is contained in:
parent
9b3571feac
commit
be381ea438
3 changed files with 24 additions and 18 deletions
|
@ -1502,9 +1502,12 @@ class PeersManager {
|
||||||
Events.on('peer-connected', e => this._onPeerConnected(e.detail.peerId));
|
Events.on('peer-connected', e => this._onPeerConnected(e.detail.peerId));
|
||||||
Events.on('peer-disconnected', e => this._onPeerDisconnected(e.detail));
|
Events.on('peer-disconnected', e => this._onPeerDisconnected(e.detail));
|
||||||
|
|
||||||
|
// ROOMS
|
||||||
|
Events.on('join-public-room', e => this._onJoinPublicRoom(e.detail.roomId));
|
||||||
|
|
||||||
// this device closes connection
|
// this device closes connection
|
||||||
Events.on('room-secrets-deleted', e => this._onRoomSecretsDeleted(e.detail));
|
Events.on('room-secrets-deleted', e => this._onRoomSecretsDeleted(e.detail));
|
||||||
Events.on('leave-public-room', e => this._onLeavePublicRoom(e.detail));
|
Events.on('leave-public-room', _ => this._onLeavePublicRoom());
|
||||||
|
|
||||||
// peer closes connection
|
// peer closes connection
|
||||||
Events.on('secret-room-deleted', e => this._onSecretRoomDeleted(e.detail));
|
Events.on('secret-room-deleted', e => this._onSecretRoomDeleted(e.detail));
|
||||||
|
@ -1682,6 +1685,9 @@ class PeersManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
_onJoinPublicRoom(roomId) {
|
_onJoinPublicRoom(roomId) {
|
||||||
|
if (roomId !== this._device.publicRoomId) {
|
||||||
|
this._disconnectFromPublicRoom();
|
||||||
|
}
|
||||||
this._device.publicRoomId = roomId;
|
this._device.publicRoomId = roomId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2046,8 +2046,8 @@ class PublicRoomDialog extends Dialog {
|
||||||
|
|
||||||
Events.on('keydown', e => this._onKeyDown(e));
|
Events.on('keydown', e => this._onKeyDown(e));
|
||||||
Events.on('public-room-created', e => this._onPublicRoomCreated(e.detail));
|
Events.on('public-room-created', e => this._onPublicRoomCreated(e.detail));
|
||||||
Events.on('peers', e => this._onPeers(e.detail));
|
Events.on('peers', e => this._onPeers(e.detail.peers, e.detail.roomId));
|
||||||
Events.on('peer-joined', e => this._onPeerJoined(e.detail.peer, e.detail.roomId));
|
Events.on('peer-joined', e => this._onPeerJoined(e.detail.roomId));
|
||||||
Events.on('public-room-id-invalid', e => this._onPublicRoomIdInvalid(e.detail));
|
Events.on('public-room-id-invalid', e => this._onPublicRoomIdInvalid(e.detail));
|
||||||
Events.on('public-room-left', _ => this._onPublicRoomLeft());
|
Events.on('public-room-left', _ => this._onPublicRoomLeft());
|
||||||
this.$el.addEventListener('paste', e => this._onPaste(e));
|
this.$el.addEventListener('paste', e => this._onPaste(e));
|
||||||
|
@ -2177,29 +2177,30 @@ class PublicRoomDialog extends Dialog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onPeers(message) {
|
_onPeers(peers, roomId) {
|
||||||
message.peers.forEach(messagePeer => {
|
// Do not evaluate if creating new room
|
||||||
this._evaluateJoinedPeer(messagePeer.id, message.roomId);
|
if (this.roomId && !peers.length) return;
|
||||||
});
|
|
||||||
|
this._evaluateJoinedPeer(roomId);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onPeerJoined(peer, roomId) {
|
_onPeerJoined(roomId) {
|
||||||
this._evaluateJoinedPeer(peer.id, roomId);
|
this._evaluateJoinedPeer(roomId);
|
||||||
}
|
}
|
||||||
|
|
||||||
_evaluateJoinedPeer(peerId, roomId) {
|
_evaluateJoinedPeer(roomId) {
|
||||||
const isInitiatedRoomId = roomId === this.roomId;
|
const peerJoinedThisRoom = roomId === this.roomId;
|
||||||
const isJoinedRoomId = roomId === this.roomIdJoin;
|
const switchedToOtherRoom = roomId === this.roomIdJoin;
|
||||||
|
|
||||||
if (!peerId || !roomId || (!isInitiatedRoomId && !isJoinedRoomId)) return;
|
if (!roomId || (!peerJoinedThisRoom && !switchedToOtherRoom)) return;
|
||||||
|
|
||||||
this.hide();
|
this.hide();
|
||||||
|
|
||||||
sessionStorage.setItem('public_room_id', roomId);
|
sessionStorage.setItem('public_room_id', roomId);
|
||||||
|
|
||||||
if (isJoinedRoomId) {
|
if (switchedToOtherRoom) {
|
||||||
|
this.roomIdJoin = null;
|
||||||
this.roomId = roomId;
|
this.roomId = roomId;
|
||||||
this.roomIdJoin = false;
|
|
||||||
this._setKeyAndQrCode();
|
this._setKeyAndQrCode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2212,7 +2213,7 @@ class PublicRoomDialog extends Dialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
_leavePublicRoom() {
|
_leavePublicRoom() {
|
||||||
Events.fire('leave-public-room', this.roomId);
|
Events.fire('leave-public-room');
|
||||||
}
|
}
|
||||||
|
|
||||||
_onPublicRoomLeft() {
|
_onPublicRoomLeft() {
|
||||||
|
|
|
@ -251,7 +251,6 @@ export default class PairDropWsServer {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._leavePublicRoom(sender);
|
|
||||||
this._joinPublicRoom(sender, message.publicRoomId);
|
this._joinPublicRoom(sender, message.publicRoomId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +311,7 @@ export default class PairDropWsServer {
|
||||||
|
|
||||||
_joinPublicRoom(peer, publicRoomId) {
|
_joinPublicRoom(peer, publicRoomId) {
|
||||||
// prevent joining of 2 public rooms simultaneously
|
// prevent joining of 2 public rooms simultaneously
|
||||||
this._leavePublicRoom(peer);
|
this._leavePublicRoom(peer, true);
|
||||||
|
|
||||||
this._joinRoom(peer, 'public-id', publicRoomId);
|
this._joinRoom(peer, 'public-id', publicRoomId);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue