package org.jivesoftware.sparkimpl.plugin.privacy.list; import java.util.Collection; import org.jivesoftware.resource.SparkRes; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.PrivacyItem; import org.jivesoftware.spark.SparkManager; import org.jivesoftware.spark.ui.ContactGroup; import org.jivesoftware.spark.ui.ContactItem; import org.jivesoftware.sparkimpl.plugin.privacy.PrivacyManager; /** * * @author Bergunde Holger */ public class PrivacyPresenceHandler implements SparkPrivacyItemListener { /** * Send Unavailable (offline status) to jid . * * @param jid * JID to send offline status */ public void sendUnavailableTo(String jid) { Presence pack = new Presence(Presence.Type.unavailable); pack.setTo(jid); SparkManager.getConnection().sendPacket(pack); } /** * Send my presence for user * * @param jid * JID to send presence */ public void sendRealPresenceTo(String jid) { Presence presence = SparkManager.getWorkspace().getStatusBar().getPresence(); Presence pack = new Presence(presence.getType(), presence.getStatus(), 1, presence.getMode()); pack.setTo(jid); SparkManager.getConnection().sendPacket(pack); } public void setIconsForList(SparkPrivacyList list) { for (PrivacyItem pItem : list.getPrivacyItems()) { if (pItem.getType().equals(PrivacyItem.Type.jid)) { setBlockedIconToContact(pItem.getValue()); if (pItem.isFilterPresence_out()) { sendUnavailableTo(pItem.getValue()); } } if (pItem.getType().equals(PrivacyItem.Type.group)) { ContactGroup group = SparkManager.getWorkspace().getContactList().getContactGroup(pItem.getValue()); for (ContactItem citem : group.getContactItems()) { setBlockedIconToContact(citem.getJID()); if (pItem.isFilterPresence_out()) { sendUnavailableTo(citem.getJID()); } } } } SparkManager.getContactList().updateUI(); } private void setBlockedIconToContact(String jid) { Collection<ContactItem> items = SparkManager.getWorkspace().getContactList().getContactItemsByJID(jid); for (ContactItem contactItem : items) { if (contactItem != null) { contactItem.setSpecialIcon(SparkRes.getImageIcon("PRIVACY_ICON_SMALL")); } } } public void removeIconsForList(SparkPrivacyList list) { for (PrivacyItem pItem : list.getPrivacyItems()) { if (pItem.getType().equals(PrivacyItem.Type.jid)) { removeBlockedIconFromContact(pItem.getValue()); if (pItem.isFilterPresence_out()) { sendRealPresenceTo(pItem.getValue()); } } if (pItem.getType().equals(PrivacyItem.Type.group)) { ContactGroup group = SparkManager.getWorkspace().getContactList().getContactGroup(pItem.getValue()); for (ContactItem citem : group.getContactItems()) { removeBlockedIconFromContact(citem.getJID()); if (pItem.isFilterPresence_out()) { sendRealPresenceTo(citem.getJID()); } } } } SparkManager.getContactList().updateUI(); } private void removeBlockedIconFromContact(String jid) { Collection<ContactItem> items = SparkManager.getWorkspace().getContactList().getContactItemsByJID(jid); for (ContactItem item : items) { if (item != null) { item.setSpecialIcon(null); } } } @Override public void itemAdded(PrivacyItem item, String listname) { PrivacyManager pmanager = PrivacyManager.getInstance(); if (pmanager.getPrivacyList(listname).isActive()) { if (item.getType().equals(PrivacyItem.Type.jid)) { setBlockedIconToContact(item.getValue()); if (item.isFilterPresence_out()) { sendUnavailableTo(item.getValue()); } } if (item.getType().equals(PrivacyItem.Type.group)) { ContactGroup group = SparkManager.getWorkspace().getContactList().getContactGroup(item.getValue()); for (ContactItem citem : group.getContactItems()) { setBlockedIconToContact(citem.getJID()); if (item.isFilterPresence_out()) { sendUnavailableTo(citem.getJID()); } } } SparkManager.getContactList().updateUI(); } } @Override public void itemRemoved(PrivacyItem item, String listname) { PrivacyManager pmanager = PrivacyManager.getInstance(); if (pmanager.getPrivacyList(listname).isActive()) { if (item.getType().equals(PrivacyItem.Type.jid)) { removeBlockedIconFromContact(item.getValue()); if (item.isFilterPresence_out()) { sendRealPresenceTo(item.getValue()); } } if (item.getType().equals(PrivacyItem.Type.group)) { ContactGroup group = SparkManager.getWorkspace().getContactList().getContactGroup(item.getValue()); for (ContactItem citem : group.getContactItems()) { removeBlockedIconFromContact(citem.getJID()); if (item.isFilterPresence_out()) { sendRealPresenceTo(citem.getJID()); } } } SparkManager.getContactList().updateUI(); } } }