From 4cd76ab90b90731499bc6c04fc7ba729198980ad Mon Sep 17 00:00:00 2001 From: Danny van Heumen Date: Wed, 23 Jul 2014 23:39:56 +0200 Subject: [PATCH] Disable presence updates on UserQuit event. --- .../impl/protocol/irc/ContactIrcImpl.java | 7 +- .../impl/protocol/irc/IrcStack.java | 76 ++++++++++--------- ...OperationSetPersistentPresenceIrcImpl.java | 3 +- 3 files changed, 44 insertions(+), 42 deletions(-) diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ContactIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/ContactIrcImpl.java index 3d89d160d..10b397a3d 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ContactIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ContactIrcImpl.java @@ -37,8 +37,8 @@ public class ContactIrcImpl * @param id Contact id. * @param parentGroup The parent group of the contact. */ - public ContactIrcImpl(ProtocolProviderServiceIrcImpl provider, String id, - ContactGroupIrcImpl parentGroup, PresenceStatus initialStatus) + public ContactIrcImpl(final ProtocolProviderServiceIrcImpl provider, + final String id, final ContactGroupIrcImpl parentGroup) { if (provider == null) { @@ -55,8 +55,7 @@ public ContactIrcImpl(ProtocolProviderServiceIrcImpl provider, String id, throw new IllegalArgumentException("parentGroup cannot be null"); } this.parentGroup = parentGroup; - this.presence = - initialStatus == null ? IrcStatusEnum.ONLINE : initialStatus; + this.presence = IrcStatusEnum.ONLINE; } /** diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java index f0bf067f7..b5618ed65 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcStack.java @@ -1262,48 +1262,52 @@ public void onUserAction(final UserActionMsg msg) /** * User quit messages. - * + * * User quit messages only need to be handled in case quitting users, * since that is the only clear signal of presence change we have. - * + * * @param msg Quit message */ @Override - public void onUserQuit(QuitMessage msg) + public void onUserQuit(final QuitMessage msg) { - final String userNick = msg.getSource().getNick(); - final Contact user = - IrcStack.this.provider.getPersistentPresence().findContactByID( - userNick); - if (user == null) - { - LOGGER - .trace("User not in contact list. Not updating user presence status."); - return; - } - - final PresenceStatus previousStatus = user.getPresenceStatus(); - if (previousStatus == IrcStatusEnum.OFFLINE) - { - LOGGER.trace("User already off-line, not updating user " - + "presence status."); - return; - } - - if (!(user instanceof ContactIrcImpl)) - { - LOGGER.warn("Unexpected type of contact, expected " - + "ContactIrcImpl but got " + user.getClass().getName() - + ". Not updating presence."); - return; - } - - final ContactGroup parentGroup = user.getParentContactGroup(); - final ContactIrcImpl member = (ContactIrcImpl) user; - member.setPresenceStatus(IrcStatusEnum.OFFLINE); - IrcStack.this.provider.getPersistentPresence() - .fireContactPresenceStatusChangeEvent(user, parentGroup, - previousStatus, member.getPresenceStatus(), true); + // FIXME Disabled user presence status updates, probably not going + // to do user presence, since we cannot detect all changes and Jitsi + // does act upon different presence statuses. + + // final String userNick = msg.getSource().getNick(); + // final Contact user = + // IrcStack.this.provider.getPersistentPresence().findContactByID( + // userNick); + // if (user == null) + // { + // LOGGER + // .trace("User not in contact list. Not updating user presence status."); + // return; + // } + // + // final PresenceStatus previousStatus = user.getPresenceStatus(); + // if (previousStatus == IrcStatusEnum.OFFLINE) + // { + // LOGGER.trace("User already off-line, not updating user " + // + "presence status."); + // return; + // } + // + // if (!(user instanceof ContactIrcImpl)) + // { + // LOGGER.warn("Unexpected type of contact, expected " + // + "ContactIrcImpl but got " + user.getClass().getName() + // + ". Not updating presence."); + // return; + // } + // + // final ContactGroup parentGroup = user.getParentContactGroup(); + // final ContactIrcImpl member = (ContactIrcImpl) user; + // member.setPresenceStatus(IrcStatusEnum.OFFLINE); + // IrcStack.this.provider.getPersistentPresence() + // .fireContactPresenceStatusChangeEvent(user, parentGroup, + // previousStatus, member.getPresenceStatus(), true); // TODO Update status to online in case a message arrives from this // particular user. diff --git a/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java index 3c9c6ead7..fa3a2fb28 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/OperationSetPersistentPresenceIrcImpl.java @@ -49,8 +49,7 @@ private ContactIrcImpl createVolatileContact(String id) // Create volatile contact ContactIrcImpl newVolatileContact = - new ContactIrcImpl(this.parentProvider, id, volatileGroup, - IrcStatusEnum.ONLINE); + new ContactIrcImpl(this.parentProvider, id, volatileGroup); volatileGroup.addContact(newVolatileContact); this.fireSubscriptionEvent(newVolatileContact, volatileGroup,