/*
* Copyright 2006-2010 Daniel Henninger. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package net.sf.kraken.protocols.oscar;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import net.kano.joscar.ByteBlock;
import net.kano.joscar.flap.FlapPacketEvent;
import net.kano.joscar.flapcmd.SnacCommand;
import net.kano.joscar.net.ClientConnEvent;
import net.kano.joscar.net.ConnDescriptor;
import net.kano.joscar.snac.SnacPacketEvent;
import net.kano.joscar.snaccmd.conn.ClientVersionsCmd;
import net.kano.joscar.snaccmd.conn.ConnCommand;
import net.kano.joscar.snaccmd.conn.RateInfoRequest;
import net.kano.joscar.snaccmd.conn.ServerReadyCmd;
import net.kano.joscar.snaccmd.conn.SnacFamilyInfo;
import net.kano.joscar.snaccmd.mailcheck.ActivateMailCmd;
import net.kano.joscar.snaccmd.mailcheck.MailCheckCmd;
import net.kano.joscar.snaccmd.mailcheck.MailStatusRequest;
import net.kano.joscar.snaccmd.mailcheck.MailUpdate;
import org.apache.log4j.Logger;
import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.util.LocaleUtils;
import org.xmpp.packet.Message;
/**
* @author Daniel Henninger
*/
public class EmailConnection extends ServiceConnection {
static Logger Log = Logger.getLogger(EmailConnection.class);
private Integer lastMailCount = 0;
public EmailConnection(ConnDescriptor cd, OSCARSession mainSession, ByteBlock cookie, int serviceFamily) {
super(cd, mainSession, cookie, serviceFamily);
this.serviceFamily = serviceFamily;
}
@Override
protected void handleStateChange(ClientConnEvent e) {
Log.debug("OSCAR email service state change from "+e.getOldState()+" to "+e.getNewState());
}
@Override
protected void handleFlapPacket(FlapPacketEvent e) {
// Log.debug("OSCAR email flap packet received: "+e);
super.handleFlapPacket(e);
}
@Override
protected void clientReady() {
super.clientReady();
request(new MailStatusRequest());
request(new ActivateMailCmd());
startKeepAlive();
}
@Override
protected void handleSnacPacket(SnacPacketEvent e) {
// Log.debug("OSCAR email snac packet received: "+e);
SnacCommand cmd = e.getSnacCommand();
if (cmd instanceof ServerReadyCmd) {
ServerReadyCmd src = (ServerReadyCmd) cmd;
setSnacFamilies(src.getSnacFamilies());
Collection<SnacFamilyInfo> familyInfos = new ArrayList<SnacFamilyInfo>();
familyInfos.add(ConnCommand.FAMILY_INFO);
familyInfos.add(MailCheckCmd.FAMILY_INFO);
setSnacFamilyInfos(familyInfos);
getMainSession().registerSnacFamilies(this);
request(new ClientVersionsCmd(familyInfos));
request(new RateInfoRequest());
}
else if (cmd instanceof MailUpdate) {
MailUpdate mu = (MailUpdate)cmd;
if (JiveGlobals.getBooleanProperty("plugin.gateway."+getMainSession().getTransport().getType()+".mailnotifications", true) && lastMailCount < mu.getUnreadCount()) {
Integer diff = mu.getUnreadCount() - lastMailCount;
if (diff > 0) {
getMainSession().getTransport().sendMessage(
getMainSession().getJID(),
getMainSession().getTransport().getJID(),
LocaleUtils.getLocalizedString("gateway.oscar.mail", "kraken", Arrays.asList(Integer.toString(diff), mu.getDomain(), mu.getUrl())),
Message.Type.headline
);
}
}
lastMailCount = mu.getUnreadCount();
}
else {
super.handleSnacPacket(e);
}
}
}