use of org.jivesoftware.spark.ui.ChatRoom in project Spark by igniterealtime.
the class SoftPhoneTabHandler method handlePhoneCall.
/**
* Called when the underlying component has a phone call.
*
* @param state the CallRoomState.
* @param tab the SparkTab.
* @param component the component within the tab.
* @param isSelectedTab true if the tab is selected.
* @param chatFrameFocused true if the chat frame is in focus.
*/
private void handlePhoneCall(CallRoomState state, SparkTab tab, Component component, boolean isSelectedTab, boolean chatFrameFocused) {
boolean isTyping = false;
if (component instanceof ChatRoom) {
isTyping = SparkManager.getChatManager().containsTypingNotification(((ChatRoom) component));
}
// Check if is typing.
if (isTyping) {
tab.setIcon(SparkRes.getImageIcon(SparkRes.SMALL_MESSAGE_EDIT_IMAGE));
} else if (CallRoomState.inCall == state) {
tab.setIcon(PhoneRes.getImageIcon("RECEIVER2_IMAGE"));
} else if (CallRoomState.muted == state) {
tab.setIcon(PhoneRes.getImageIcon("MUTE_IMAGE"));
} else if (CallRoomState.onHold == state) {
tab.setIcon(PhoneRes.getImageIcon("ON_HOLD_IMAGE"));
} else if (CallRoomState.callWasEnded == state) {
tab.setIcon(PhoneRes.getImageIcon("HANG_UP_PHONE_16x16_IMAGE"));
}
if (component instanceof ChatRoom) {
handleChatRoom(component, tab, chatFrameFocused, isSelectedTab);
return;
} else {
if (isSelectedTab && chatFrameFocused) {
tab.setTitleColor(Color.black);
tab.setTabFont(tab.getDefaultFont());
}
}
// Handle title frame
if (isSelectedTab && component instanceof PhonePanel) {
final ChatFrame chatFrame = SparkManager.getChatManager().getChatContainer().getChatFrame();
chatFrame.setTitle(((PhonePanel) component).getFrameTitle());
}
}
use of org.jivesoftware.spark.ui.ChatRoom in project Spark by igniterealtime.
the class TicTacToePlugin method addButtonToToolBar.
/**
* Add the TTT-Button to every opening Chatroom
* and create Listeners for it
*/
private void addButtonToToolBar() {
_chatRoomListener = new ChatRoomListenerAdapter() {
@Override
public void chatRoomOpened(final ChatRoom room) {
if (!(room instanceof ChatRoomImpl)) {
// Don't do anything if this is not a 1on1-Chat
return;
}
final ChatRoomButton sendGameButton = new ChatRoomButton(buttonimg);
room.getToolBar().addChatRoomButton(sendGameButton);
final String opponentJID = ((ChatRoomImpl) room).getJID();
sendGameButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (_currentInvitations.contains(XmppStringUtils.parseBareJid(opponentJID))) {
return;
}
final GameOfferPacket offer = new GameOfferPacket();
offer.setTo(opponentJID);
offer.setType(IQ.Type.get);
_currentInvitations.add(XmppStringUtils.parseBareJid(opponentJID));
room.getTranscriptWindow().insertCustomText(TTTRes.getString("ttt.request.sent"), false, false, Color.BLUE);
try {
SparkManager.getConnection().sendStanza(offer);
} catch (SmackException.NotConnectedException e1) {
Log.warning("Unable to send offer to " + opponentJID, e1);
}
SparkManager.getConnection().addAsyncStanzaListener(new StanzaListener() {
@Override
public void processPacket(Stanza stanza) {
GameOfferPacket answer = (GameOfferPacket) stanza;
answer.setStartingPlayer(offer.isStartingPlayer());
answer.setGameID(offer.getGameID());
if (answer.getType() == IQ.Type.result) {
// ACCEPT
_currentInvitations.remove(XmppStringUtils.parseBareJid(opponentJID));
room.getTranscriptWindow().insertCustomText(TTTRes.getString("ttt.request.accept"), false, false, Color.BLUE);
createTTTWindow(answer, opponentJID);
} else {
// DECLINE
room.getTranscriptWindow().insertCustomText(TTTRes.getString("ttt.request.decline"), false, false, Color.RED);
_currentInvitations.remove(XmppStringUtils.parseBareJid(opponentJID));
}
}
}, new PacketIDFilter(offer.getPacketID()));
}
});
}
@Override
public void chatRoomClosed(ChatRoom room) {
if (room instanceof ChatRoomImpl) {
ChatRoomImpl cri = (ChatRoomImpl) room;
_currentInvitations.remove(cri.getParticipantJID());
}
}
};
SparkManager.getChatManager().addChatRoomListener(_chatRoomListener);
}
use of org.jivesoftware.spark.ui.ChatRoom in project Spark by igniterealtime.
the class TranslatorPlugin method initialize.
/**
* Called after Spark is loaded to initialize the new plugin.
*/
public void initialize() {
// Retrieve ChatManager from the SparkManager
final ChatManager chatManager = SparkManager.getChatManager();
// Add to a new ChatRoom when the ChatRoom opens.
chatManager.addChatRoomListener(new ChatRoomListenerAdapter() {
public void chatRoomOpened(ChatRoom room) {
// only do the translation for single chat
if (room instanceof ChatRoomImpl) {
final ChatRoomImpl roomImpl = (ChatRoomImpl) room;
// Create a new ChatRoomButton.
final JComboBox<TranslatorUtil.TranslationType> translatorBox = new JComboBox<>(TranslatorUtil.TranslationType.getTypes());
translatorBox.addActionListener(e -> {
// Set the focus back to the message box.
roomImpl.getChatInputEditor().requestFocusInWindow();
});
roomImpl.addChatRoomComponent(translatorBox);
// do the translation for outgoing messages.
final MessageEventListener messageListener = new MessageEventListener() {
public void sendingMessage(Message message) {
String currentBody = message.getBody();
String oldBody = message.getBody();
TranslatorUtil.TranslationType type = (TranslatorUtil.TranslationType) translatorBox.getSelectedItem();
if (type != null && type != TranslatorUtil.TranslationType.None) {
message.setBody(null);
currentBody = TranslatorUtil.translate(currentBody, type);
TranscriptWindow transcriptWindow = chatManager.getChatRoom(XmppStringUtils.parseBareJid(message.getTo())).getTranscriptWindow();
if (oldBody.equals(currentBody.substring(0, currentBody.length() - 1))) {
transcriptWindow.insertNotificationMessage("Could not translate: " + currentBody, ChatManager.ERROR_COLOR);
} else {
transcriptWindow.insertNotificationMessage("-> " + currentBody, Color.gray);
message.setBody(currentBody);
}
}
}
public void receivingMessage(Message message) {
// do nothing
}
};
roomImpl.addMessageEventListener(messageListener);
}
}
});
}
use of org.jivesoftware.spark.ui.ChatRoom in project Spark by igniterealtime.
the class Workspace method handleIncomingPacket.
private void handleIncomingPacket(Stanza stanza) throws SmackException.NotConnectedException {
// We only handle message packets here.
if (stanza instanceof Message) {
final Message message = (Message) stanza;
boolean isGroupChat = message.getType() == Message.Type.groupchat;
// Check if Conference invite. If so, do not handle here.
if (message.getExtension("x", "jabber:x:conference") != null) {
return;
}
final String body = message.getBody();
final JivePropertiesExtension extension = ((JivePropertiesExtension) message.getExtension(JivePropertiesExtension.NAMESPACE));
final boolean broadcast = extension != null && extension.getProperty("broadcast") != null;
// Handle offline message.
DelayInformation offlineInformation = message.getExtension("delay", "urn:xmpp:delay");
if (offlineInformation != null && (Message.Type.chat == message.getType() || Message.Type.normal == message.getType())) {
handleOfflineMessage(message);
}
if (body == null || isGroupChat || broadcast || message.getType() == Message.Type.normal || message.getType() == Message.Type.headline || message.getType() == Message.Type.error) {
return;
}
// Create new chat room for Agent Invite.
final String from = stanza.getFrom();
final String host = SparkManager.getSessionManager().getServerAddress();
// Don't allow workgroup notifications to come through here.
final String bareJID = XmppStringUtils.parseBareJid(from);
if (host.equalsIgnoreCase(from) || from == null) {
return;
}
ChatRoom room = null;
try {
room = SparkManager.getChatManager().getChatContainer().getChatRoom(bareJID);
} catch (ChatRoomNotFoundException e) {
// Ignore
}
// Check for non-existent rooms.
if (room == null) {
createOneToOneRoom(bareJID, message);
}
}
}
use of org.jivesoftware.spark.ui.ChatRoom in project Spark by igniterealtime.
the class InvitationDialog method inviteUsersToRoom.
public void inviteUsersToRoom(final String serviceName, Collection<BookmarkedConference> rooms, String adHocRoomName, Collection<String> jids) {
fillRoomsUI(rooms, adHocRoomName);
JFrame parent = SparkManager.getChatManager().getChatContainer().getChatFrame();
if (parent == null || !parent.isVisible()) {
parent = SparkManager.getMainWindow();
}
// Add jids to user list
if (jids != null) {
for (Object jid : jids) {
invitedUsers.addElement(jid);
}
}
final JOptionPane pane;
TitlePanel titlePanel;
// Create the title panel for this dialog
titlePanel = new TitlePanel(Res.getString("title.invite.to.conference"), Res.getString("message.invite.users.to.conference"), SparkRes.getImageIcon(SparkRes.BLANK_IMAGE), true);
// Construct main panel w/ layout.
final JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(titlePanel, BorderLayout.NORTH);
// The user should only be able to close this dialog.
Object[] options = { Res.getString("invite"), Res.getString("cancel") };
pane = new JOptionPane(this, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
mainPanel.add(pane, BorderLayout.CENTER);
final JOptionPane p = new JOptionPane();
dlg = p.createDialog(parent, Res.getString("title.conference.rooms"));
dlg.setModal(false);
dlg.pack();
dlg.setSize(500, 450);
dlg.setResizable(true);
dlg.setContentPane(mainPanel);
dlg.setLocationRelativeTo(parent);
PropertyChangeListener changeListener = e -> {
String value = (String) pane.getValue();
if (Res.getString("cancel").equals(value)) {
pane.setValue(JOptionPane.UNINITIALIZED_VALUE);
dlg.dispose();
} else if (Res.getString("invite").equals(value)) {
final String roomTitle = getSelectedRoomName();
final BookmarkedConference selectedBookmarkedConf = getSelectedBookmarkedConference();
int size = invitedUserList.getModel().getSize();
UIManager.put("OptionPane.okButtonText", Res.getString("ok"));
if (size == 0) {
JOptionPane.showMessageDialog(dlg, Res.getString("message.specify.users.to.join.conference"), Res.getString("title.error"), JOptionPane.ERROR_MESSAGE);
pane.setValue(JOptionPane.UNINITIALIZED_VALUE);
return;
}
if (!ModelUtil.hasLength(roomTitle)) {
JOptionPane.showMessageDialog(dlg, Res.getString("message.no.room.to.join.error"), Res.getString("title.error"), JOptionPane.ERROR_MESSAGE);
pane.setValue(JOptionPane.UNINITIALIZED_VALUE);
return;
}
String roomName = "";
// Add all rooms the user is in to list.
ChatManager chatManager = SparkManager.getChatManager();
for (ChatRoom chatRoom : chatManager.getChatContainer().getChatRooms()) {
if (chatRoom instanceof GroupChatRoom) {
GroupChatRoom groupRoom = (GroupChatRoom) chatRoom;
if (groupRoom.getRoomname().equals(roomTitle)) {
roomName = groupRoom.getMultiUserChat().getRoom();
break;
}
}
}
String message = messageField.getText();
final String messageText = message != null ? message : Res.getString("message.please.join.in.conference");
if (invitedUsers.getSize() > 0) {
invitedUserList.setSelectionInterval(0, invitedUsers.getSize() - 1);
}
GroupChatRoom chatRoom;
try {
chatRoom = SparkManager.getChatManager().getGroupChat(roomName);
} catch (ChatNotFoundException e1) {
dlg.setVisible(false);
final List<String> jidList = new ArrayList<>();
Object[] jids1 = invitedUserList.getSelectedValues();
final int no = jids1 != null ? jids1.length : 0;
for (int i = 0; i < no; i++) {
try {
jidList.add((String) jids1[i]);
} catch (NullPointerException ee) {
Log.error(ee);
}
}
SwingWorker worker = new SwingWorker() {
public Object construct() {
try {
Thread.sleep(15);
} catch (InterruptedException e2) {
Log.error(e2);
}
return "ok";
}
public void finished() {
try {
if (selectedBookmarkedConf == null) {
ConferenceUtils.createPrivateConference(serviceName, messageText, roomTitle, jidList);
} else {
ConferenceUtils.joinConferenceOnSeperateThread(selectedBookmarkedConf.getName(), selectedBookmarkedConf.getJid(), selectedBookmarkedConf.getPassword(), messageText, jidList);
}
} catch (SmackException ex) {
UIManager.put("OptionPane.okButtonText", Res.getString("ok"));
JOptionPane.showMessageDialog(pane, "An error occurred.", Res.getString("title.error"), JOptionPane.ERROR_MESSAGE);
}
}
};
worker.start();
pane.setValue(JOptionPane.UNINITIALIZED_VALUE);
return;
}
pane.setValue(JOptionPane.UNINITIALIZED_VALUE);
dlg.dispose();
Object[] values = invitedUserList.getSelectedValues();
final int no = values != null ? values.length : 0;
for (int i = 0; i < no; i++) {
String jid = (String) values[i];
try {
chatRoom.getMultiUserChat().invite(jid, message != null ? message : Res.getString("message.please.join.in.conference"));
} catch (SmackException.NotConnectedException e1) {
Log.warning("Unable to send stanza to " + jid, e1);
}
String nickname = SparkManager.getUserManager().getUserNicknameFromJID(jid);
chatRoom.getTranscriptWindow().insertNotificationMessage("Invited " + nickname, ChatManager.NOTIFICATION_COLOR);
}
}
};
pane.addPropertyChangeListener(changeListener);
dlg.setVisible(true);
dlg.toFront();
dlg.requestFocus();
}
Aggregations