mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-22 06:12:05 +01:00
Introduce myRoomJid EntityFullJid in MultiUserChat
This commit is contained in:
parent
9161ba9e7d
commit
6ba9218c77
1 changed files with 30 additions and 13 deletions
|
@ -57,7 +57,7 @@ import org.jivesoftware.smack.packet.IQ;
|
|||
import org.jivesoftware.smack.packet.Message;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
import org.jivesoftware.smack.util.StringUtils;
|
||||
import org.jivesoftware.smack.util.Objects;
|
||||
|
||||
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
|
||||
import org.jivesoftware.smackx.disco.packet.DiscoverInfo;
|
||||
|
@ -149,7 +149,7 @@ public class MultiUserChat {
|
|||
private final StanzaListener declinesListener;
|
||||
|
||||
private String subject;
|
||||
private Resourcepart nickname;
|
||||
private EntityFullJid myRoomJid;
|
||||
private boolean joined = false;
|
||||
private StanzaCollector messageCollector;
|
||||
|
||||
|
@ -208,7 +208,7 @@ public class MultiUserChat {
|
|||
LOGGER.warning("Presence not from a full JID: " + presence.getFrom());
|
||||
return;
|
||||
}
|
||||
final String myRoomJID = MultiUserChat.this.room + "/" + nickname;
|
||||
final EntityFullJid myRoomJID = myRoomJid;
|
||||
final boolean isUserStatusModification = presence.getFrom().equals(myRoomJID);
|
||||
|
||||
asyncButOrdered.performAsyncButOrdered(MultiUserChat.this, new Runnable() {
|
||||
|
@ -383,7 +383,9 @@ public class MultiUserChat {
|
|||
|
||||
// This presence must be send from a full JID. We use the resourcepart of this JID as nick, since the room may
|
||||
// performed roomnick rewriting
|
||||
this.nickname = presence.getFrom().asEntityFullJidIfPossible().getResourcepart();
|
||||
Resourcepart receivedNickname = presence.getFrom().getResourceOrThrow();
|
||||
setNickname(receivedNickname);
|
||||
|
||||
joined = true;
|
||||
|
||||
// Update the list of joined rooms
|
||||
|
@ -391,6 +393,10 @@ public class MultiUserChat {
|
|||
return presence;
|
||||
}
|
||||
|
||||
private void setNickname(Resourcepart nickname) {
|
||||
this.myRoomJid = JidCreate.entityFullFrom(room, nickname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a new MUC enter configuration builder.
|
||||
*
|
||||
|
@ -486,6 +492,7 @@ public class MultiUserChat {
|
|||
* @deprecated use {@link #createOrJoin(MucEnterConfiguration)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
// TODO Remove in Smack 4.4
|
||||
public MucCreateConfigFormHandle createOrJoin(Resourcepart nickname, String password, @SuppressWarnings("deprecation") DiscussionHistory history, long timeout)
|
||||
throws NoResponseException, XMPPErrorException, InterruptedException, MucAlreadyJoinedException, NotConnectedException, NotAMucServiceException {
|
||||
MucEnterConfiguration.Builder builder = getEnterConfigurationBuilder(nickname).withPassword(
|
||||
|
@ -684,6 +691,7 @@ public class MultiUserChat {
|
|||
* @deprecated use {@link #join(MucEnterConfiguration)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
// TODO Remove in Smack 4.4
|
||||
public void join(
|
||||
Resourcepart nickname,
|
||||
String password,
|
||||
|
@ -759,7 +767,7 @@ public class MultiUserChat {
|
|||
// We leave a room by sending a presence packet where the "to"
|
||||
// field is in the form "roomName@service/nickname"
|
||||
Presence leavePresence = new Presence(Presence.Type.unavailable);
|
||||
leavePresence.setTo(JidCreate.fullFrom(room, nickname));
|
||||
leavePresence.setTo(myRoomJid);
|
||||
connection.sendStanza(leavePresence);
|
||||
}
|
||||
|
||||
|
@ -1096,7 +1104,11 @@ public class MultiUserChat {
|
|||
* @return the nickname currently being used.
|
||||
*/
|
||||
public Resourcepart getNickname() {
|
||||
return nickname;
|
||||
final EntityFullJid myRoomJid = this.myRoomJid;
|
||||
if (myRoomJid == null) {
|
||||
return null;
|
||||
}
|
||||
return myRoomJid.getResourcepart();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1114,7 +1126,7 @@ public class MultiUserChat {
|
|||
* @throws MucNotJoinedException
|
||||
*/
|
||||
public synchronized void changeNickname(Resourcepart nickname) throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException, MucNotJoinedException {
|
||||
StringUtils.requireNotNullOrEmpty(nickname, "Nickname must not be null or blank.");
|
||||
Objects.requireNonNull(nickname, "Nickname must not be null or blank.");
|
||||
// Check that we already have joined the room before attempting to change the
|
||||
// nickname.
|
||||
if (!joined) {
|
||||
|
@ -1137,7 +1149,8 @@ public class MultiUserChat {
|
|||
// exception will be thrown
|
||||
response.nextResultOrThrow();
|
||||
|
||||
this.nickname = nickname;
|
||||
// TODO: Shouldn't this handle nickname rewriting by the MUC service?
|
||||
setNickname(nickname);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1152,7 +1165,11 @@ public class MultiUserChat {
|
|||
* @throws MucNotJoinedException
|
||||
*/
|
||||
public void changeAvailabilityStatus(String status, Presence.Mode mode) throws NotConnectedException, InterruptedException, MucNotJoinedException {
|
||||
StringUtils.requireNotNullOrEmpty(nickname, "Nickname must not be null or blank.");
|
||||
final EntityFullJid myRoomJid = this.myRoomJid;
|
||||
if (myRoomJid == null) {
|
||||
throw new MucNotJoinedException(this);
|
||||
}
|
||||
|
||||
// Check that we already have joined the room before attempting to change the
|
||||
// availability status.
|
||||
if (!joined) {
|
||||
|
@ -1163,7 +1180,7 @@ public class MultiUserChat {
|
|||
Presence joinPresence = new Presence(Presence.Type.available);
|
||||
joinPresence.setStatus(status);
|
||||
joinPresence.setMode(mode);
|
||||
joinPresence.setTo(JidCreate.fullFrom(room, nickname));
|
||||
joinPresence.setTo(myRoomJid);
|
||||
|
||||
// Send join packet.
|
||||
connection.sendStanza(joinPresence);
|
||||
|
@ -2398,7 +2415,7 @@ public class MultiUserChat {
|
|||
|
||||
// Reset occupant information.
|
||||
occupantsMap.clear();
|
||||
nickname = null;
|
||||
myRoomJid = null;
|
||||
userHasLeft();
|
||||
}
|
||||
else {
|
||||
|
@ -2418,7 +2435,7 @@ public class MultiUserChat {
|
|||
|
||||
// Reset occupant information.
|
||||
occupantsMap.clear();
|
||||
nickname = null;
|
||||
myRoomJid = null;
|
||||
userHasLeft();
|
||||
}
|
||||
}
|
||||
|
@ -2437,7 +2454,7 @@ public class MultiUserChat {
|
|||
|
||||
// Reset occupant information.
|
||||
occupantsMap.clear();
|
||||
nickname = null;
|
||||
myRoomJid = null;
|
||||
userHasLeft();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue