use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class BuzzPlugin method initialize.
public void initialize() {
ProviderManager.addExtensionProvider(ELEMENTNAME, NAMESPACE, new BuzzPacket.Provider());
ProviderManager.addExtensionProvider(ELEMENTNAME_OLD, NAMESPACE_OLD, new BuzzPacket.Provider());
SparkManager.getConnection().addAsyncStanzaListener(stanza -> {
if (stanza instanceof Message) {
final Message message = (Message) stanza;
boolean buzz = message.getExtension(ELEMENTNAME_OLD, NAMESPACE_OLD) != null || message.getExtension(ELEMENTNAME, NAMESPACE) != null;
if (buzz) {
SwingUtilities.invokeLater(() -> shakeWindow(message));
}
}
}, new StanzaTypeFilter(Message.class));
SparkManager.getChatManager().addChatRoomListener(new ChatRoomListener() {
public void chatRoomOpened(final ChatRoom room) {
TimerTask task = new SwingTimerTask() {
public void doRun() {
addBuzzFeatureToChatRoom(room);
}
};
TaskEngine.getInstance().schedule(task, 100);
}
public void chatRoomLeft(ChatRoom room) {
}
public void chatRoomClosed(ChatRoom room) {
}
public void chatRoomActivated(ChatRoom room) {
}
public void userHasJoined(ChatRoom room, String userid) {
}
public void userHasLeft(ChatRoom room, String userid) {
}
});
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class ChatContainer method addChatRoom.
/**
* Adds a new ChatRoom to Spark.
*
* @param room the ChatRoom to add.
*/
public synchronized void addChatRoom(final ChatRoom room) {
createFrameIfNeeded();
room.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.LIGHT_GRAY));
AndFilter presenceFilter = new AndFilter(new StanzaTypeFilter(Presence.class), FromMatchesFilter.createBare(room.getRoomname()));
// Next, create a packet listener. We use an anonymous inner class for brevity.
StanzaListener myListener = stanza -> SwingUtilities.invokeLater(() -> handleRoomPresence((Presence) stanza));
room.registeredToFrame(chatFrame);
SparkManager.getConnection().addAsyncStanzaListener(myListener, presenceFilter);
// Add to PresenceMap
presenceMap.put(room.getRoomname(), myListener);
String tooltip;
if (room instanceof ChatRoomImpl) {
tooltip = ((ChatRoomImpl) room).getParticipantJID();
String nickname = SparkManager.getUserManager().getUserNicknameFromJID(((ChatRoomImpl) room).getParticipantJID());
tooltip = "<html><body><b>Contact: </b>" + nickname + "<br><b>JID: </b>" + tooltip;
} else {
tooltip = room.getRoomname();
}
// Create ChatRoom UI and dock
SparkTab tab = addTab(room.getTabTitle(), room.getTabIcon(), room, tooltip);
tab.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
checkTabPopup(e);
}
public void mousePressed(MouseEvent e) {
checkTabPopup(e);
}
});
room.addMessageListener(this);
// Remove brand panel
final String title = getTabAt(0).getActualText();
if (title.equals(WELCOME_TITLE)) {
chatFrame.setTitle(room.getRoomTitle());
}
final TimerTask visibleTask = new SwingTimerTask() {
public void doRun() {
checkVisibility(room);
}
};
TaskEngine.getInstance().schedule(visibleTask, 100);
// Add to ChatRoomList
chatRoomList.add(room);
// Notify users that the chat room has been opened.
fireChatRoomOpened(room);
// Focus Chat
focusChat();
// Add Room listeners to override issue with input maps and keybinding on the mac.
if (Spark.isMac()) {
room.getChatInputEditor().addKeyListener(this);
}
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class GatewayPlugin method registerPresenceListener.
private void registerPresenceListener() {
StanzaFilter orFilter = new OrFilter(new StanzaTypeFilter(Presence.class), new StanzaTypeFilter(Message.class));
SparkManager.getConnection().addAsyncStanzaListener(stanza -> {
if (stanza instanceof Presence) {
Presence presence = (Presence) stanza;
Transport transport = TransportUtils.getTransport(stanza.getFrom());
if (transport != null) {
boolean registered = true;
if (presence.getType() == Presence.Type.unavailable) {
registered = false;
}
GatewayItem button = uiMap.get(transport);
button.signedIn(registered);
SwingWorker worker = new SwingWorker() {
@Override
public Object construct() {
transferTab.revalidate();
transferTab.repaint();
return 41;
}
};
worker.start();
}
} else if (stanza instanceof Message) {
Message message = (Message) stanza;
String from = message.getFrom();
boolean hasError = message.getType() == Message.Type.error;
String body = message.getBody();
if (from != null && hasError) {
Transport transport = TransportUtils.getTransport(from);
if (transport != null) {
String title = "Alert from " + transport.getName();
// Show error
MessageDialog.showAlert(body, title, "Information", SparkRes.getImageIcon(SparkRes.INFORMATION_IMAGE));
}
}
}
}, orFilter);
ChatManager chatManager = SparkManager.getChatManager();
chatManager.addContactItemHandler(this);
// Iterate through Contacts and check for
final ContactList contactList = SparkManager.getWorkspace().getContactList();
for (ContactGroup contactGroup : contactList.getContactGroups()) {
for (ContactItem contactItem : contactGroup.getContactItems()) {
Presence presence = contactItem.getPresence();
if (presence.isAvailable()) {
String domain = XmppStringUtils.parseDomain(presence.getFrom());
Transport transport = TransportUtils.getTransport(domain);
if (transport != null) {
handlePresence(contactItem, presence);
contactGroup.fireContactGroupUpdated();
}
}
}
}
SparkManager.getSessionManager().addPresenceListener(presence -> {
for (Transport transport : TransportUtils.getTransports()) {
GatewayItem button = uiMap.get(transport);
if (button.isLoggedIn()) {
if (!presence.isAvailable()) {
return;
}
// Create new presence
Presence p = new Presence(presence.getType(), presence.getStatus(), presence.getPriority(), presence.getMode());
p.setTo(transport.getServiceName());
try {
SparkManager.getConnection().sendStanza(p);
} catch (SmackException.NotConnectedException e) {
Log.warning("Unable to forward presence change to transport.", e);
}
}
}
});
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class TicTacToePlugin method initialize.
@Override
public void initialize() {
ClassLoader cl = getClass().getClassLoader();
buttonimg = new ImageIcon(cl.getResource("ttt.button.png"));
_currentInvitations = new HashSet<String>();
ProviderManager.addIQProvider(GameOfferPacket.ELEMENT_NAME, GameOfferPacket.NAMESPACE, new GameOfferPacket.Provider());
ProviderManager.addExtensionProvider(MovePacket.ELEMENT_NAME, MovePacket.NAMESPACE, new MovePacket.Provider());
ProviderManager.addExtensionProvider(InvalidMove.ELEMENT_NAME, InvalidMove.NAMESPACE, new InvalidMove.Provider());
// Add IQ listener to listen for incoming game invitations.
_gameOfferListener = new StanzaListener() {
public void processPacket(Stanza stanza) {
GameOfferPacket invitation = (GameOfferPacket) stanza;
if (invitation.getType() == IQ.Type.get) {
showInvitationAlert(invitation);
}
}
};
SparkManager.getConnection().addAsyncStanzaListener(_gameOfferListener, new StanzaTypeFilter(GameOfferPacket.class));
addButtonToToolBar();
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class VCardManager method startQueueListener.
/**
* Listens for new VCards to lookup in a queue.
*/
private void startQueueListener() {
final Runnable queueListener = () -> {
while (true) {
try {
String jid = queue.take();
reloadVCard(jid);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
};
TaskEngine.getInstance().submit(queueListener);
StanzaFilter filter = new StanzaTypeFilter(VCard.class);
StanzaListener myListener = stanza -> {
if (stanza instanceof VCard) {
VCard VCardpacket = (VCard) stanza;
String jid = VCardpacket.getFrom();
if (VCardpacket.getType().equals(IQ.Type.result) && jid != null && delayedContacts.contains(jid)) {
delayedContacts.remove(jid);
addVCard(jid, VCardpacket);
persistVCard(jid, VCardpacket);
}
}
};
SparkManager.getConnection().addAsyncStanzaListener(myListener, filter);
}
Aggregations