Fires event when room has been left. Makes sure that before unregistering we leave the rooms that have been joined. Does not display unregistered providers in chat rooms dialog.

cusax-fix
Damian Minkov 13 years ago
parent 5f5b209122
commit fe12f3b5ee

@ -180,7 +180,16 @@ public void run()
// something (changed the caret) or when a new tab has been
// added or the window has been resized.
verticalScrollBar.setValue(verticalScrollBar.getMaximum());
chatTextPane.setCaretPosition(document.getLength());
Document doc = chatTextPane.getDocument();
if(doc != null)
{
int pos = document.getLength();
if (pos >= 0 &&
pos <= chatTextPane.getDocument().getLength())
{
chatTextPane.setCaretPosition(pos);
}
}
}
}
};
@ -825,8 +834,9 @@ private void finishMessageAdd(String message, String contentType)
* video/image sources with their previews or any other substitution. Spawns
* a separate thread for replacement.
*
* @param elem the element in the HTML Document.
* @param messageID the messageID element.
* @param chatString the message.
* @param contentType
*/
private void processReplacement(final String messageID,
final String chatString,
@ -1882,10 +1892,9 @@ private Element findElement(HTML.Attribute attribute,
}
/**
*
* @param attribute
* @param matchStrings
* @return
* Finds the first element with <tt>name</tt>.
* @param name the name to search for.
* @return the first element with <tt>name</tt>.
*/
private Element findFirstElement(String name)
{
@ -1926,11 +1935,11 @@ private Element findFirstElement( Element element,
}
/**
*
* @param element
* @param attrName
* @param matchStrings
* @return
* Finds the first element with <tt>name</tt> among the child elements of
* <tt>element</tt>.
* @param element the element to searh for.
* @param name the name to search for.
* @return the first element with <tt>name</tt>.
*/
private Element findFirstElement( Element element,
String name)

@ -176,7 +176,7 @@ private void loadConfigurationForm()
Iterator<?> values = formField.getValues();
Iterator<String> options = formField.getOptions();
JComponent field = null;
JComponent field;
JLabel label = new JLabel("", JLabel.RIGHT);
if(formField.getLabel() != null)
@ -192,7 +192,7 @@ private void loadConfigurationForm()
if(values.hasNext())
{
((JCheckBox)field)
.setSelected(((Boolean)values.next()).booleanValue());
.setSelected((Boolean)values.next());
}
}
else if(fieldType.equals(
@ -205,8 +205,8 @@ else if(fieldType.equals(
String value = values.next().toString();
((JLabel) field).setText(value);
((JLabel) field).setFont(new Font(null, Font.ITALIC, 9));
((JLabel) field).setForeground(Color.GRAY);
field.setFont(new Font(null, Font.ITALIC, 9));
field.setForeground(Color.GRAY);
}
}
else if(fieldType.equals(
@ -408,7 +408,7 @@ else if (c instanceof AbstractButton)
{
boolean isSelected = ((AbstractButton)c).isSelected();
formField.addValue(Boolean.valueOf(isSelected));
formField.addValue(isSelected);
}
else if (c instanceof JComboBox)
{
@ -420,12 +420,12 @@ else if (c instanceof JPanel)
{
Component[] components = c.getComponents();
for(int i = 0; i < components.length; i++)
for(Component comp : components)
{
if(!(components[i] instanceof JCheckBox))
if(!(comp instanceof JCheckBox))
continue;
JCheckBox checkBox = (JCheckBox) components[i];
JCheckBox checkBox = (JCheckBox) comp;
formField.addValue(checkBox.getText());
}

@ -11,6 +11,7 @@
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.main.chat.conference.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
import org.jitsi.service.configuration.*;
@ -22,6 +23,7 @@
* @author Yana Stamcheva
*/
public class ChatRoomList
implements RegistrationStateChangeListener
{
/**
* The logger.
@ -79,12 +81,13 @@ public void loadList()
}
/**
* Adds a chat server and all its existing chat rooms.
* Adds a chat server which is registered and all its existing chat rooms.
*
* @param pps the <tt>ProtocolProviderService</tt> corresponding to the chat
* server
*/
public void addChatProvider(ProtocolProviderService pps)
private ChatRoomProviderWrapper
addRegisteredChatProvider(ProtocolProviderService pps)
{
ChatRoomProviderWrapper chatRoomProvider
= new ChatRoomProviderWrapper(pps);
@ -129,6 +132,22 @@ public void addChatProvider(ProtocolProviderService pps)
}
fireProviderWrapperAdded(chatRoomProvider);
return chatRoomProvider;
}
/**
* Adds a listener to wait for provider to be registered or unregistered.
*
* @param pps the <tt>ProtocolProviderService</tt> corresponding to the chat
* server
*/
public void addChatProvider(ProtocolProviderService pps)
{
if(pps.isRegistered())
addRegisteredChatProvider(pps);
else
pps.addRegistrationStateChangeListener(this);
}
/**
@ -143,7 +162,7 @@ public void removeChatProvider(ProtocolProviderService pps)
ChatRoomProviderWrapper wrapper = findServerWrapperFromProvider(pps);
if (wrapper != null)
removeChatProvider(wrapper);
removeChatProvider(wrapper, true);
}
/**
@ -152,44 +171,53 @@ public void removeChatProvider(ProtocolProviderService pps)
*
* @param chatRoomProvider the <tt>ChatRoomProviderWrapper</tt>
* corresponding to the server to remove
* @param permanently whether to remove any listener
* and stored configuration
*/
private void removeChatProvider(ChatRoomProviderWrapper chatRoomProvider)
private void removeChatProvider(ChatRoomProviderWrapper chatRoomProvider,
boolean permanently)
{
providersList.remove(chatRoomProvider);
ConfigurationService configService
= GuiActivator.getConfigurationService();
String prefix = "net.java.sip.communicator.impl.gui.accounts";
AccountID accountID =
chatRoomProvider.getProtocolProvider().getAccountID();
// if provider is just disabled don't remove its stored rooms
if(!GuiActivator.getAccountManager().getStoredAccounts()
.contains(accountID))
if(permanently)
{
String providerAccountUID = accountID.getAccountUniqueID();
for (String accountRootPropName
: configService.getPropertyNamesByPrefix(prefix, true))
chatRoomProvider.getProtocolProvider()
.removeRegistrationStateChangeListener(this);
ConfigurationService configService
= GuiActivator.getConfigurationService();
String prefix = "net.java.sip.communicator.impl.gui.accounts";
AccountID accountID =
chatRoomProvider.getProtocolProvider().getAccountID();
// if provider is just disabled don't remove its stored rooms
if(!GuiActivator.getAccountManager().getStoredAccounts()
.contains(accountID))
{
String accountUID
= configService.getString(accountRootPropName);
String providerAccountUID = accountID.getAccountUniqueID();
if(accountUID.equals(providerAccountUID))
for (String accountRootPropName
: configService.getPropertyNamesByPrefix(prefix, true))
{
List<String> chatRooms
= configService.getPropertyNamesByPrefix(
accountRootPropName + ".chatRooms",
true);
String accountUID
= configService.getString(accountRootPropName);
for (String chatRoomPropName : chatRooms)
if(accountUID.equals(providerAccountUID))
{
configService.setProperty(
chatRoomPropName + ".chatRoomName",
null);
List<String> chatRooms
= configService.getPropertyNamesByPrefix(
accountRootPropName + ".chatRooms",
true);
for (String chatRoomPropName : chatRooms)
{
configService.setProperty(
chatRoomPropName + ".chatRoomName",
null);
}
configService.setProperty(accountRootPropName, null);
}
configService.setProperty(accountRootPropName, null);
}
}
}
@ -336,6 +364,11 @@ public void synchronizeOpSetWithLocalContactList(
ChatRoomProviderWrapper chatRoomProvider
= findServerWrapperFromProvider(protocolProvider);
if(chatRoomProvider == null)
{
chatRoomProvider = addRegisteredChatProvider(protocolProvider);
}
if (chatRoomProvider != null)
{
chatRoomProvider.synchronizeProvider();
@ -404,6 +437,36 @@ private void fireProviderWrapperRemoved(ChatRoomProviderWrapper provider)
}
}
/**
* Listens for changes of providers registration state, so we can use only
* registered providers.
* @param evt a <tt>RegistrationStateChangeEvent</tt> which describes the
* event that occurred.
*/
@Override
public void registrationStateChanged(RegistrationStateChangeEvent evt)
{
ProtocolProviderService pps = evt.getProvider();
if (evt.getNewState() == RegistrationState.REGISTERED)
{
// will use synchronizeOpSetWithLocalContactList
// to avoid any concurrency
}
else if(evt.getNewState() == RegistrationState.UNREGISTERED
|| evt.getNewState() == RegistrationState.AUTHENTICATION_FAILED
|| evt.getNewState() == RegistrationState.CONNECTION_FAILED)
{
ChatRoomProviderWrapper wrapper =
findServerWrapperFromProvider(pps);
if (wrapper != null)
{
removeChatProvider(wrapper, false);
}
}
}
/**
* Listener which registers for provider add/remove changes.
*/

@ -347,7 +347,7 @@ public void actionPerformed(ActionEvent e)
getSelectedProvider().getProtocolProvider(),
new ArrayList<String>(), "", false, true);
String nickName = null;
String nickName;
ChatOperationReasonDialog reasonDialog =
new ChatOperationReasonDialog(GuiActivator.getResources()
@ -554,7 +554,7 @@ public void run()
roomsCombo.removeAllItems();
// if there is no room list comming from provider
// if there is no room list coming from provider
if(rooms == null)
{
roomsCombo.setEnabled(true);

@ -739,6 +739,9 @@ public void leave()
this.provider.getConnection().removePacketListener(
invitationRejectionListeners);
opSetMuc.fireLocalUserPresenceEvent(this,
LocalUserChatRoomPresenceChangeEvent.LOCAL_USER_LEFT, null);
}
/**

@ -371,6 +371,9 @@ public static void registrationStateChanged(
PacketFilter packetFilter,
Connection connection)
{
if(connection == null)
return;
if ((evt.getNewState() == RegistrationState.REGISTERING))
{
/* listen to specific inputevt IQ */

@ -683,6 +683,15 @@ else if (evt.getNewState() == RegistrationState.UNREGISTERED
// clear cached chatrooms as there are no longer valid
chatRoomCache.clear();
}
else if (evt.getNewState() == RegistrationState.UNREGISTERING)
{
// lets check for joined rooms and leave them
List<ChatRoom> joinedRooms = getCurrentlyJoinedChatRooms();
for(ChatRoom room : joinedRooms)
{
room.leave();
}
}
}
}

@ -1419,6 +1419,15 @@ public void unregister(boolean fireEvent)
{
synchronized(initializationLock)
{
if(fireEvent)
{
fireRegistrationStateChanged(
getRegistrationState()
, RegistrationState.UNREGISTERING
, RegistrationStateChangeEvent.REASON_NOT_SPECIFIED
, null);
}
disconnectAndCleanConnection();
RegistrationState currRegState = getRegistrationState();

Loading…
Cancel
Save