diff options
author | Damian Minkov <damencho@jitsi.org> | 2007-11-27 16:27:51 +0000 |
---|---|---|
committer | Damian Minkov <damencho@jitsi.org> | 2007-11-27 16:27:51 +0000 |
commit | 0d4c6b51a68e82b1f79f90f9e5560973d9839339 (patch) | |
tree | ec2c771cf34124cdce6524a7a07c1a9de13bb8b8 /src | |
parent | daf20bc6252e41aa95d4a0b8b782157a8ad8e417 (diff) | |
download | jitsi-0d4c6b51a68e82b1f79f90f9e5560973d9839339.zip jitsi-0d4c6b51a68e82b1f79f90f9e5560973d9839339.tar.gz jitsi-0d4c6b51a68e82b1f79f90f9e5560973d9839339.tar.bz2 |
1. Improve status messages (incoming and outgoing)
2. Fix systrayservice not to throw an exception if not initialized
Diffstat (limited to 'src')
16 files changed, 257 insertions, 24 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java index a7510eb..aa47bd8 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java @@ -143,12 +143,15 @@ public class ContactListCellRenderer extends JPanel String contactDisplayName = protocolContact.getDisplayName(); String contactAddress = protocolContact.getAddress(); + String statusMessage = protocolContact.getStatusMessage(); toolTipText += "<br>" + ((!contactDisplayName .equals(contactAddress)) ? contactDisplayName + " ("+contactAddress + ")" - : contactDisplayName); + : contactDisplayName) + + ((statusMessage != null && statusMessage.length() > 0) + ? " - " + statusMessage : ""); } this.buttonsPanel.setPreferredSize( new Dimension(buttonsPanelWidth, 16)); diff --git a/src/net/java/sip/communicator/impl/protocol/gibberish/ContactGibberishImpl.java b/src/net/java/sip/communicator/impl/protocol/gibberish/ContactGibberishImpl.java index 218a91f..e82df97 100644 --- a/src/net/java/sip/communicator/impl/protocol/gibberish/ContactGibberishImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/gibberish/ContactGibberishImpl.java @@ -246,6 +246,16 @@ public class ContactGibberishImpl { return isResolved; } + + /** + * Return the current status message of this contact. + * + * @return null as the protocol has currently no support of status messages + */ + public String getStatusMessage() + { + return null; + } /** * Makes the contact resolved or unresolved. diff --git a/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java b/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java index 126b68d..a8d7d3f 100644 --- a/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/icq/ContactIcqImpl.java @@ -23,6 +23,7 @@ public class ContactIcqImpl private boolean isResolved = false; private String nickName = null; + private String statusMessage = null; /** * Creates an IcqContactImpl @@ -339,4 +340,23 @@ public class ContactIcqImpl { this.image = image; } + + /** + * Return the current status message of this contact. + * + * @return the current status message + */ + public String getStatusMessage() + { + return statusMessage; + } + + /** + * Sets the current status message for this contact + * @param statusMessage the message + */ + protected void setStatusMessage(String statusMessage) + { + this.statusMessage = statusMessage; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java index d3fd16f..464e2a8 100644 --- a/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/icq/OperationSetPersistentPresenceIcqImpl.java @@ -26,8 +26,10 @@ import net.kano.joustsim.*; import net.kano.joustsim.oscar.*; import net.kano.joustsim.oscar.oscar.service.bos.*; import net.kano.joustsim.oscar.oscar.service.buddy.*; +import net.kano.joustsim.oscar.oscar.service.info.*; import net.kano.joustsim.oscar.oscar.service.ssi.*; import net.kano.joustsim.oscar.oscar.service.icon.*; +import net.kano.joustsim.trust.*; /** @@ -738,7 +740,12 @@ public class OperationSetPersistentPresenceIcqImpl logger.debug("Will set status: " + status + " long=" + icqStatus); bosService.getOscarConnection().sendSnac(new SetExtraInfoCmd(icqStatus)); - bosService.setStatusMessage(statusMessage); + + if(status.equals(IcqStatusEnum.AWAY)) + icqProvider.getAimConnection().getInfoService(). + setAwayMessage(statusMessage); + else + bosService.setStatusMessage(statusMessage); } //so that everyone sees the change. @@ -866,7 +873,7 @@ public class OperationSetPersistentPresenceIcqImpl ContactGroupIcqImpl theAwaitingAuthorizationGroup = ssContactList.findContactGroup( - ssContactList.awaitingAuthorizationGroupName); + ServerStoredContactListIcqImpl.awaitingAuthorizationGroupName); if(newParent.equals(theAwaitingAuthorizationGroup)) throw new IllegalArgumentException( @@ -1390,6 +1397,9 @@ public class OperationSetPersistentPresenceIcqImpl getIconServiceArbiter().addIconRequestListener( new IconUpdateListener()); + icqProvider.getAimConnection().getInfoService(). + addInfoListener(new AwayMessageListener()); + if(icqProvider.USING_ICQ) { opSetExtendedAuthorizations = @@ -1625,10 +1635,6 @@ public class OperationSetPersistentPresenceIcqImpl ContactGroupIcqImpl parent = ssContactList.findContactGroup(sourceContact); - logger.debug("Will Dispatch the contact status event."); - fireContactPresenceStatusChangeEvent(sourceContact, parent, - oldStatus, newStatus); - List extraInfoBlocks = info.getExtraInfoBlocks(); if(extraInfoBlocks != null){ for (int i = 0; i < extraInfoBlocks.size(); i++) @@ -1640,9 +1646,14 @@ public class OperationSetPersistentPresenceIcqImpl String status = ExtraInfoData.readAvailableMessage( block.getExtraData()); logger.info("Status Message is: " + status + "."); + sourceContact.setStatusMessage(status); } } } + + logger.debug("Will Dispatch the contact status event."); + fireContactPresenceStatusChangeEvent(sourceContact, parent, + oldStatus, newStatus); } /** @@ -1689,10 +1700,21 @@ public class OperationSetPersistentPresenceIcqImpl public void receivedStatusUpdate(BuddyInfoManager manager, Screenname buddy, BuddyInfo info) { + String statusMessage = info.getStatusMessage(); logger.debug("buddy=" + buddy); logger.debug("info.getAwayMessage()=" + info.getAwayMessage()); logger.debug("info.getOnlineSince()=" + info.getOnlineSince()); - logger.debug("info.getStatusMessage()=" + info.getStatusMessage()); + logger.debug("info.getStatusMessage()=" + statusMessage); + + ContactIcqImpl sourceContact + = ssContactList.findContactByScreenName(buddy.getFormatted()); + + if(sourceContact != null) + { + if(statusMessage != null) + sourceContact.setStatusMessage(statusMessage); + } + } } @@ -1777,15 +1799,17 @@ public class OperationSetPersistentPresenceIcqImpl ((VolatileBuddy)buddy).setAwaitingAuthorization(true); ContactGroupIcqImpl theAwaitingAuthorizationGroup = - ssContactList.findContactGroup(ssContactList.awaitingAuthorizationGroupName); + ssContactList.findContactGroup( + ServerStoredContactListIcqImpl.awaitingAuthorizationGroupName); if(theAwaitingAuthorizationGroup == null) { List emptyBuddies = new LinkedList(); theAwaitingAuthorizationGroup = new ContactGroupIcqImpl( - new VolatileGroup(ssContactList.awaitingAuthorizationGroupName), - emptyBuddies, ssContactList, false); + new VolatileGroup( + ServerStoredContactListIcqImpl.awaitingAuthorizationGroupName), + emptyBuddies, ssContactList, false); ((RootContactGroupIcqImpl)ssContactList.getRootGroup()). addSubGroup(theAwaitingAuthorizationGroup); @@ -1801,7 +1825,7 @@ public class OperationSetPersistentPresenceIcqImpl Object lock = new Object(); synchronized(lock){ try{ lock.wait(500); }catch(Exception e){} - }; + } fireSubscriptionMovedEvent(srcContact, parent, theAwaitingAuthorizationGroup); @@ -1876,7 +1900,7 @@ public class OperationSetPersistentPresenceIcqImpl ContactGroupIcqImpl theAwaitingAuthorizationGroup = ssContactList.findContactGroup( - ssContactList.awaitingAuthorizationGroupName); + ServerStoredContactListIcqImpl.awaitingAuthorizationGroupName); if(theAwaitingAuthorizationGroup == null) return; @@ -1920,4 +1944,31 @@ public class OperationSetPersistentPresenceIcqImpl } } } + + /** + * Notifies for changes in away message + */ + private class AwayMessageListener + implements InfoServiceListener + { + public void handleAwayMessage( + InfoService service, Screenname buddy, String awayMessage) + { + ContactIcqImpl sourceContact + = ssContactList.findContactByScreenName(buddy.getFormatted()); + + if(sourceContact != null) + { + sourceContact.setStatusMessage(awayMessage); + } + } + public void handleUserProfile(InfoService service, Screenname buddy, + String userInfo){} + public void handleCertificateInfo(InfoService service, Screenname buddy, + BuddyCertificateInfo certInfo){} + public void handleInvalidCertificates(InfoService service, Screenname buddy, + CertificateInfo origCertInfo, Throwable ex){} + public void handleDirectoryInfo(InfoService service, Screenname buddy, + DirInfo dirInfo){} + } }
\ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ContactJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/ContactJabberImpl.java index f84113e..7ce5350 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/ContactJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/ContactJabberImpl.java @@ -30,6 +30,7 @@ public class ContactJabberImpl private boolean isResolved = false; private String tempId = null; + private String statusMessage = null; /** * Creates an JabberContactImpl @@ -302,4 +303,23 @@ public class ContactJabberImpl { return rosterEntry; } + + /** + * Return the current status message of this contact. + * + * @return the current status message + */ + public String getStatusMessage() + { + return statusMessage; + } + + /** + * Sets the current status message for this contact + * @param statusMessage the message + */ + protected void setStatusMessage(String statusMessage) + { + this.statusMessage = statusMessage; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java index d59cbaa..1c0e180 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetPersistentPresenceJabberImpl.java @@ -1075,6 +1075,10 @@ public class OperationSetPersistentPresenceJabberImpl logger.warn("No source contact found for id=" + userID); return; } + + // statuses maybe the same and only change in status message + sourceContact.setStatusMessage(presence.getStatus()); + PresenceStatus oldStatus = sourceContact.getPresenceStatus(); diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java b/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java index 0ebcd40..0a3f2e2 100644 --- a/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java +++ b/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java @@ -235,4 +235,14 @@ public class MockContact return this.getAddress().equals(mockContact.getAddress()); } + + /** + * Return the current status message of this contact. + * + * @return null as the protocol has currently no support of status messages + */ + public String getStatusMessage() + { + return null; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/msn/ContactMsnImpl.java b/src/net/java/sip/communicator/impl/protocol/msn/ContactMsnImpl.java index 99b946f..3cdd329 100644 --- a/src/net/java/sip/communicator/impl/protocol/msn/ContactMsnImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/msn/ContactMsnImpl.java @@ -273,4 +273,14 @@ public class ContactMsnImpl { return contact; } + + /** + * Return the current status message of this contact. + * + * @return null as the protocol has currently no support of status messages + */ + public String getStatusMessage() + { + return null; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/rss/ContactRssImpl.java b/src/net/java/sip/communicator/impl/protocol/rss/ContactRssImpl.java index f455b3d..0e2ab4c 100644 --- a/src/net/java/sip/communicator/impl/protocol/rss/ContactRssImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/rss/ContactRssImpl.java @@ -539,4 +539,14 @@ public class ContactRssImpl { return rssFeedReader; } + + /** + * Return the current status message of this contact. + * + * @return null as the protocol has no support of status messages + */ + public String getStatusMessage() + { + return null; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/sip/ContactSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/ContactSipImpl.java index 27e7ca7..0526f2b 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/ContactSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/ContactSipImpl.java @@ -428,4 +428,14 @@ public class ContactSipImpl return (OperationSetPresenceSipImpl) parentProvider .getOperationSet(OperationSetPresence.class); } + + /** + * Return the current status message of this contact. + * + * @return null as the protocol has currently no support of status messages + */ + public String getStatusMessage() + { + return null; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java b/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java index 83c54bb..41f0574 100644 --- a/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java @@ -882,6 +882,16 @@ public class ContactSSHImpl this.sshConfigurationForm.setPasswordField(password); savePersistentDetails(); } + + /** + * Return the current status message of this contact. + * + * @return null as the protocol has no support of status messages + */ + public String getStatusMessage() + { + return null; + } // /** // * Sets the PS1 prompt of the current shell of Contact diff --git a/src/net/java/sip/communicator/impl/protocol/yahoo/ContactYahooImpl.java b/src/net/java/sip/communicator/impl/protocol/yahoo/ContactYahooImpl.java index 591219d..6a3bd6c 100644 --- a/src/net/java/sip/communicator/impl/protocol/yahoo/ContactYahooImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/yahoo/ContactYahooImpl.java @@ -31,6 +31,8 @@ public class ContactYahooImpl private String yahooID = null; private String id = null; + + private String statusMessage = null; /** * Creates an YahooContactImpl with custom yahooID @@ -152,7 +154,7 @@ public class ContactYahooImpl { logger.warn("Error requesting image!", e); } - +logger.info("returning picture " + image); return image; } @@ -163,6 +165,7 @@ public class ContactYahooImpl */ protected void setImage(byte[] image) { +logger.info("setting image " + image); this.image = image; } @@ -349,4 +352,23 @@ public class ContactYahooImpl { return contact; } + + /** + * Return the current status message of this contact. + * + * @return the current status message + */ + public String getStatusMessage() + { + return statusMessage; + } + + /** + * Sets the current status message for this contact + * @param statusMessage the message + */ + protected void setStatusMessage(String statusMessage) + { + this.statusMessage = statusMessage; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetPersistentPresenceYahooImpl.java b/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetPersistentPresenceYahooImpl.java index 144cbfd..d7af988 100644 --- a/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetPersistentPresenceYahooImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/yahoo/OperationSetPersistentPresenceYahooImpl.java @@ -446,9 +446,22 @@ public class OperationSetPersistentPresenceYahooImpl try { - yahooProvider.getYahooSession().setStatus( - ((Long)scToYahooModesMappings.get(status)).longValue()); - + if(statusMessage != null) + { + boolean isAvailable = false; + + if(status.equals(YahooStatusEnum.AVAILABLE)) + isAvailable = true; + + // false - away + // true - available + yahooProvider.getYahooSession(). + setStatus(statusMessage, isAvailable); + } + else + yahooProvider.getYahooSession().setStatus( + ((Long)scToYahooModesMappings.get(status)).longValue()); + fireProviderPresenceStatusChangeEvent(currentStatus, status); } catch(IOException ex) @@ -820,7 +833,7 @@ public class OperationSetPersistentPresenceYahooImpl ssContactList.findContactById(user.getId()); if(sourceContact != null) - handleContactStatusChange(sourceContact, user.getStatus()); + handleContactStatusChange(sourceContact, user); } } } @@ -1084,17 +1097,20 @@ public class OperationSetPersistentPresenceYahooImpl else return; } - - handleContactStatusChange(sourceContact, yFriend.getStatus()); + + handleContactStatusChange(sourceContact, yFriend); } - void handleContactStatusChange(ContactYahooImpl sourceContact, long newStat) + void handleContactStatusChange(ContactYahooImpl sourceContact, YahooUser yFriend) { PresenceStatus oldStatus = sourceContact.getPresenceStatus(); - PresenceStatus newStatus = yahooStatusToPresenceStatus(newStat); + PresenceStatus newStatus = yahooStatusToPresenceStatus(yFriend.getStatus()); + // statuses maybe the same and only change in status message + sourceContact.setStatusMessage(yFriend.getCustomStatusMessage()); + // when old and new status are the same do nothing - no change if(oldStatus.equals(newStatus)) { @@ -1145,8 +1161,7 @@ public class OperationSetPersistentPresenceYahooImpl if(!contact.isPersistent() || !contact.isResolved()) return; - handleContactStatusChange(contact, - contact.getSourceContact().getStatus()); + handleContactStatusChange(contact, contact.getSourceContact()); } public void subscriptionFailed(SubscriptionEvent evt) {} diff --git a/src/net/java/sip/communicator/impl/protocol/zeroconf/ContactZeroconfImpl.java b/src/net/java/sip/communicator/impl/protocol/zeroconf/ContactZeroconfImpl.java index df1854f..be4a022 100644 --- a/src/net/java/sip/communicator/impl/protocol/zeroconf/ContactZeroconfImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/zeroconf/ContactZeroconfImpl.java @@ -464,4 +464,14 @@ public class ContactZeroconfImpl return (OperationSetPersistentPresenceZeroconfImpl)parentProvider .getOperationSet(OperationSetPersistentPresence.class); } + + /** + * Return the current status message of this contact. + * + * @return null as the protocol has currently no support of status messages + */ + public String getStatusMessage() + { + return null; + } } diff --git a/src/net/java/sip/communicator/impl/systray/jdic/SystrayServiceJdicImpl.java b/src/net/java/sip/communicator/impl/systray/jdic/SystrayServiceJdicImpl.java index 4e81346..7e60c83 100644 --- a/src/net/java/sip/communicator/impl/systray/jdic/SystrayServiceJdicImpl.java +++ b/src/net/java/sip/communicator/impl/systray/jdic/SystrayServiceJdicImpl.java @@ -84,6 +84,8 @@ public class SystrayServiceJdicImpl private ImageIcon logoIconWhite; private ImageIcon envelopeIcon; private ImageIcon envelopeIconWhite; + + private boolean initialized = false; /** * Creates an instance of <tt>Systray</tt>. @@ -238,6 +240,8 @@ public class SystrayServiceJdicImpl }); systray.addTrayIcon(trayIcon); + + initialized = true; } /** @@ -315,6 +319,9 @@ public class SystrayServiceJdicImpl String messageContent, int messageType) { + if(!checkInitialized()) + return; + int trayMsgType = TrayIcon.NONE_MESSAGE_TYPE; if (messageType == SystrayService.ERROR_MESSAGE_TYPE) @@ -391,6 +398,9 @@ public class SystrayServiceJdicImpl */ public void setSystrayIcon(int imageType) { + if(!checkInitialized()) + return; + String osName = System.getProperty("os.name"); if (imageType == SystrayService.SC_IMG_TYPE) @@ -420,6 +430,17 @@ public class SystrayServiceJdicImpl } } } + + private boolean checkInitialized() + { + if(!initialized) + { + logger.error("Systray not init"); + return false; + } + else + return true; + } /** * Shows the oldest message in the message queue and then removes it from diff --git a/src/net/java/sip/communicator/service/protocol/Contact.java b/src/net/java/sip/communicator/service/protocol/Contact.java index 7cc896c..0faa5d2 100644 --- a/src/net/java/sip/communicator/service/protocol/Contact.java +++ b/src/net/java/sip/communicator/service/protocol/Contact.java @@ -110,4 +110,11 @@ public interface Contact * establishing network connectivity or null if no such data is required. */ public String getPersistentData(); + + /** + * Return the current status message of this contact. + * + * @return the current status message + */ + public String getStatusMessage(); } |