use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class SparkTransferManager method sendFile.
/**
* Send a file to a user.
*
* @param file the file to send.
* @param jid the jid of the user to send the file to.
* @return the ChatRoom of the user.
*/
public ChatRoom sendFile(File file, String jid) {
long maxsize = Long.parseLong(Default.getString(Default.FILE_TRANSFER_MAXIMUM_SIZE));
long warningsize = Long.parseLong(Default.getString(Default.FILE_TRANSFER_WARNING_SIZE));
if (file.length() >= maxsize && maxsize != -1) {
String maxsizeString = TransferUtils.getAppropriateByteWithSuffix(maxsize);
String yoursizeString = TransferUtils.getAppropriateByteWithSuffix(file.length());
String output = Res.getString("message.file.transfer.file.too.big.error", maxsizeString, yoursizeString);
UIManager.put("OptionPane.okButtonText", Res.getString("ok"));
JOptionPane.showMessageDialog(null, output, Res.getString("title.error"), JOptionPane.ERROR_MESSAGE);
return null;
}
if (file.length() >= warningsize && warningsize != -1) {
int result = JOptionPane.showConfirmDialog(null, Res.getString("message.file.transfer.file.too.big.warning"), Res.getString("title.error"), JOptionPane.YES_NO_OPTION);
if (result != 0) {
return null;
}
}
final ContactList contactList = SparkManager.getWorkspace().getContactList();
String bareJID = XmppStringUtils.parseBareJid(jid);
String fullJID = PresenceManager.getFullyQualifiedJID(jid);
if (!PresenceManager.isOnline(jid)) {
ArrayList<File> list = waitMap.get(jid);
if (list == null) {
list = new ArrayList<>();
}
list.add(file);
waitMap.put(jid, list);
ChatRoom chatRoom;
ContactItem contactItem = contactList.getContactItemByJID(jid);
if (contactItem != null) {
chatRoom = SparkManager.getChatManager().createChatRoom(jid, contactItem.getDisplayName(), contactItem.getDisplayName());
} else {
chatRoom = SparkManager.getChatManager().createChatRoom(jid, jid, jid);
}
chatRoom.getTranscriptWindow().insertNotificationMessage("The user is offline. Will auto-send \"" + file.getName() + "\" when user comes back online.", ChatManager.ERROR_COLOR);
return null;
}
// Create the outgoing file transfer
final OutgoingFileTransfer transfer = transferManager.createOutgoingFileTransfer(fullJID);
ContactItem contactItem = contactList.getContactItemByJID(bareJID);
ChatRoom chatRoom;
if (contactItem != null) {
chatRoom = SparkManager.getChatManager().createChatRoom(bareJID, contactItem.getDisplayName(), contactItem.getDisplayName());
} else {
chatRoom = SparkManager.getChatManager().createChatRoom(bareJID, bareJID, bareJID);
}
TranscriptWindow transcriptWindow = chatRoom.getTranscriptWindow();
SendFileTransfer sendingUI = new SendFileTransfer();
try {
transfer.sendFile(file, "Sending file");
} catch (SmackException e) {
Log.error(e);
}
// Add listener to cancel transfer is sending file to user who just went offline.
AndFilter presenceFilter = new AndFilter(new StanzaTypeFilter(Presence.class), FromMatchesFilter.createBare(bareJID));
final StanzaListener packetListener = stanza -> {
Presence presence = (Presence) stanza;
if (!presence.isAvailable()) {
if (transfer != null) {
transfer.cancel();
}
}
};
// Add presence listener to check if user is offline and cancel sending.
SparkManager.getConnection().addAsyncStanzaListener(packetListener, presenceFilter);
chatRoom.addClosingListener(() -> {
SparkManager.getConnection().removeAsyncStanzaListener(packetListener);
if (!transfer.isDone()) {
transfer.cancel();
}
});
try {
sendingUI.sendFile(transfer, transferManager, fullJID, contactItem.getDisplayName());
} catch (NullPointerException e) {
Log.error(e);
}
transcriptWindow.addComponent(sendingUI);
chatRoom.scrollToBottom();
return chatRoom;
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class BroadcastPlugin method initialize.
@Override
public void initialize() {
// See if we should disable all "Broadcast" menu items
if (Default.getBoolean(Default.DISABLE_BROADCAST_MENU_ITEM) || !Enterprise.containsFeature(Enterprise.BROADCAST_FEATURE)) {
return;
}
// Add as ContainerDecoratr
SparkManager.getChatManager().addSparkTabHandler(this);
StanzaFilter serverFilter = new StanzaTypeFilter(Message.class);
SparkManager.getConnection().addAsyncStanzaListener(this, serverFilter);
// Register with action menu
final JMenu actionsMenu = SparkManager.getMainWindow().getMenuByName(Res.getString("menuitem.actions"));
JMenuItem broadcastHistoryMenu = new JMenuItem(Res.getString("title.broadcast.history"), SparkRes.getImageIcon(SparkRes.HISTORY_16x16));
JMenuItem broadcastMenu = new JMenuItem(Res.getString("title.broadcast.message"), SparkRes.getImageIcon(SparkRes.MEGAPHONE_16x16));
ResourceUtils.resButton(broadcastMenu, Res.getString("title.broadcast.message"));
actionsMenu.add(broadcastHistoryMenu);
actionsMenu.add(broadcastMenu);
broadcastMenu.addActionListener(e -> broadcastToRoster());
broadcastHistoryMenu.addActionListener(e -> new BroadcastHistoryFrame().run());
// Register with action menu
JMenuItem startConversationtMenu = new JMenuItem("", SparkRes.getImageIcon(SparkRes.SMALL_MESSAGE_IMAGE));
ResourceUtils.resButton(startConversationtMenu, Res.getString("menuitem.start.a.chat"));
if (!Default.getBoolean(Default.HIDE_START_A_CHAT) && Enterprise.containsFeature(Enterprise.START_A_CHAT_FEATURE)) {
actionsMenu.add(startConversationtMenu, 0);
}
startConversationtMenu.addActionListener(e -> {
ContactList contactList = SparkManager.getWorkspace().getContactList();
Collection<ContactItem> selectedUsers = contactList.getSelectedUsers();
String selectedUser = "";
Iterator<ContactItem> selectedUsersIterator = selectedUsers.iterator();
if (selectedUsersIterator.hasNext()) {
ContactItem contactItem = selectedUsersIterator.next();
selectedUser = contactItem.getJid().toString();
}
UIManager.put("OptionPane.okButtonText", Res.getString("ok"));
UIManager.put("OptionPane.cancelButtonText", Res.getString("cancel"));
String jid = (String) JOptionPane.showInputDialog(SparkManager.getMainWindow(), Res.getString("label.enter.address"), Res.getString("title.start.chat"), JOptionPane.QUESTION_MESSAGE, null, null, selectedUser);
if (ModelUtil.hasLength(jid) && ModelUtil.hasLength(XmppStringUtils.parseDomain(jid))) {
if (ModelUtil.hasLength(jid) && jid.indexOf('@') == -1) {
// Append server address
jid = jid + "@" + SparkManager.getConnection().getXMPPServiceDomain();
}
EntityBareJid entityBareJid = JidCreate.entityBareFromUnescapedOrThrowUnchecked(jid);
String nickname = SparkManager.getUserManager().getUserNicknameFromJID(entityBareJid);
ChatRoom chatRoom = SparkManager.getChatManager().createChatRoom(entityBareJid, nickname, nickname);
SparkManager.getChatManager().getChatContainer().activateChatRoom(chatRoom);
}
});
// Add send to selected users.
final ContactList contactList = SparkManager.getWorkspace().getContactList();
contactList.addContextMenuListener(new ContextMenuListener() {
@Override
public void poppingUp(Object component, JPopupMenu popup) {
if (component instanceof ContactGroup) {
final ContactGroup group = (ContactGroup) component;
Action broadcastMessageAction = new AbstractAction() {
private static final long serialVersionUID = -6411248110270296726L;
@Override
public void actionPerformed(ActionEvent e) {
broadcastToGroup(group);
}
};
broadcastMessageAction.putValue(Action.NAME, Res.getString("menuitem.broadcast.to.group"));
broadcastMessageAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.MEGAPHONE_16x16));
popup.add(broadcastMessageAction);
}
}
@Override
public void poppingDown(JPopupMenu popup) {
}
@Override
public boolean handleDefaultAction(MouseEvent e) {
return false;
}
});
// Add Broadcast to roster
StatusBar statusBar = SparkManager.getWorkspace().getStatusBar();
RolloverButton broadcastToRosterButton = new RolloverButton(SparkRes.getImageIcon(SparkRes.MEGAPHONE_16x16));
broadcastToRosterButton.setToolTipText(Res.getString("message.send.a.broadcast"));
statusBar.invalidate();
statusBar.validate();
statusBar.repaint();
broadcastToRosterButton.addActionListener(e -> broadcastToRoster());
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class PresenceChangePlugin method initialize.
@Override
public void initialize() {
// Listen for right-clicks on ContactItem
final ContactList contactList = SparkManager.getWorkspace().getContactList();
final Action listenAction = new AbstractAction() {
private static final long serialVersionUID = 7705539667621148816L;
@Override
public void actionPerformed(ActionEvent e) {
for (ContactItem item : contactList.getSelectedUsers()) {
BareJid bareAddress = item.getJid().asBareJid();
sparkContacts.add(bareAddress);
}
}
};
listenAction.putValue(Action.NAME, Res.getString("menuitem.alert.when.online"));
listenAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.SMALL_ALARM_CLOCK));
final Action removeAction = new AbstractAction() {
private static final long serialVersionUID = -8726129089417116105L;
@Override
public void actionPerformed(ActionEvent e) {
for (ContactItem item : contactList.getSelectedUsers()) {
BareJid bareAddress = item.getJid().asBareJid();
sparkContacts.remove(bareAddress);
}
}
};
removeAction.putValue(Action.NAME, Res.getString("menuitem.remove.alert.when.online"));
removeAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.SMALL_DELETE));
contactList.addContextMenuListener(new ContextMenuListener() {
@Override
public void poppingUp(Object object, JPopupMenu popup) {
if (object instanceof ContactItem) {
ContactItem item = (ContactItem) object;
BareJid bareAddress = item.getJid();
if (!item.getPresence().isAvailable() || item.getPresence().isAway()) {
if (sparkContacts.contains(bareAddress)) {
popup.add(removeAction);
} else {
popup.add(listenAction);
}
}
}
}
@Override
public void poppingDown(JPopupMenu popup) {
}
@Override
public boolean handleDefaultAction(MouseEvent e) {
return false;
}
});
// Check presence changes
SparkManager.getConnection().addAsyncStanzaListener(stanza -> {
try {
Presence presence = (Presence) stanza;
if (!presence.isAvailable() || presence.isAway()) {
return;
}
Jid from = presence.getFrom();
ArrayList<BareJid> removelater = new ArrayList<>();
for (final BareJid jid : sparkContacts) {
if (jid.equals(from.asBareJid())) {
removelater.add(jid);
// sparkContacts.remove(jid);
String nickname = SparkManager.getUserManager().getUserNicknameFromJID(jid);
String time = SparkManager.DATE_SECOND_FORMATTER.format(new Date());
String infoText = Res.getString("message.user.now.available.to.chat", nickname, time);
if (localPref.getShowToasterPopup()) {
EventQueue.invokeLater(() -> {
SparkToaster toaster = new SparkToaster();
toaster.setDisplayTime(5000);
toaster.setBorder(BorderFactory.createLineBorder(Color.lightGray, 1, true));
toaster.setToasterHeight(150);
toaster.setToasterWidth(200);
toaster.setTitle(nickname);
toaster.showToaster(null, infoText);
toaster.setCustomAction(new AbstractAction() {
private static final long serialVersionUID = 4827542713848133369L;
@Override
public void actionPerformed(ActionEvent e) {
SparkManager.getChatManager().getChatRoom(jid.asEntityBareJidOrThrow());
}
});
});
}
ChatRoom room = SparkManager.getChatManager().getChatRoom(jid.asEntityBareJidOrThrow());
if (localPref.getWindowTakesFocus()) {
EventQueue.invokeLater(() -> SparkManager.getChatManager().activateChat(jid, nickname));
}
EventQueue.invokeLater(() -> room.getTranscriptWindow().insertNotificationMessage(infoText, ChatManager.NOTIFICATION_COLOR));
}
}
for (BareJid s : removelater) {
sparkContacts.remove(s);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}, new StanzaTypeFilter(Presence.class));
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class JabberVersion method initialize.
@Override
public void initialize() {
// Populate Smack's Version Manager with Sparks version information.
VersionManager.getInstanceFor(SparkManager.getConnection()).setVersion(JiveInfo.getName(), JiveInfo.getVersion(), JiveInfo.getOS());
// Create IQ Filter
StanzaFilter packetFilter = new StanzaTypeFilter(IQ.class);
SparkManager.getConnection().addAsyncStanzaListener(stanza -> {
IQ iq = (IQ) stanza;
try {
if (iq instanceof Time && iq.getType() == IQ.Type.get) {
Time time = new Time();
time.setStanzaId(iq.getStanzaId());
time.setFrom(iq.getTo());
time.setTo(iq.getFrom());
time.setTime(new Date());
time.setType(IQ.Type.result);
// Send Time
SparkManager.getConnection().sendStanza(time);
}
} catch (SmackException.NotConnectedException e) {
Log.warning("Unable to answer request: " + stanza, e);
}
}, packetFilter);
final ContactList contactList = SparkManager.getWorkspace().getContactList();
contactList.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("control F11"), "viewClient");
contactList.addContextMenuListener(new ContextMenuListener() {
@Override
public void poppingUp(final Object component, JPopupMenu popup) {
if (!(component instanceof ContactItem)) {
return;
}
ContactItem contactItem = (ContactItem) component;
if (contactItem.getPresence() == null) {
return;
}
Action versionRequest = new AbstractAction() {
private static final long serialVersionUID = -5619737417315441711L;
@Override
public void actionPerformed(ActionEvent e) {
viewClient();
}
};
versionRequest.putValue(Action.NAME, Res.getString("menuitem.view.client.version"));
popup.add(versionRequest);
}
@Override
public void poppingDown(JPopupMenu popup) {
}
@Override
public boolean handleDefaultAction(MouseEvent e) {
return false;
}
});
contactList.getActionMap().put("viewClient", new AbstractAction("viewClient") {
private static final long serialVersionUID = 8282301357403753561L;
@Override
public void actionPerformed(ActionEvent evt) {
viewClient();
}
});
}
use of org.jivesoftware.smack.filter.StanzaTypeFilter in project Spark by igniterealtime.
the class NotificationPlugin method registerListener.
private void registerListener() {
preferences = SettingsManager.getLocalPreferences();
// Iterate through all online users and add them to the list.
ContactList contactList = SparkManager.getWorkspace().getContactList();
for (ContactGroup contactGroup : contactList.getContactGroups()) {
for (ContactItem item : contactGroup.getContactItems()) {
if (item != null && item.getJid() != null && item.getPresence().isAvailable()) {
BareJid bareJID = item.getJid().asBareJid();
onlineUsers.add(bareJID);
}
}
}
// Add Presence Listener
SparkManager.getConnection().addAsyncStanzaListener(this, new StanzaTypeFilter(Presence.class));
}
Aggregations