package jimmui.model.chat;
import jimm.Jimm;
import jimmui.view.chat.Chat;
import jimm.chat.message.Message;
import jimm.comm.Util;
import jimmui.view.icons.Icon;
import protocol.Contact;
import protocol.Protocol;
import protocol.xmpp.Xmpp;
import protocol.xmpp.XmppContact;
import protocol.xmpp.XmppServiceContact;
import protocol.xmpp.Jid;
import protocol.ui.InfoFactory;
import javax.microedition.lcdui.Font;
import java.util.Vector;
/**
* Created with IntelliJ IDEA.
* <p/>
* Date: 30.06.13 17:17
*
* @author vladimir
*/
public class ChatModel {
public static final int MAX_HIST_LAST_MESS = 5;
public boolean writable = true;
public Protocol protocol;
public Contact contact;
private Vector<MessData> messData = new Vector<MessData>();
public short messageCounter = 0;
public short otherMessageCounter = 0;
public byte sysNoticeCounter = 0;
public byte authRequestCounter = 0;
public int bottomOffset = -1;
public int current;
public Font[] fontSet;
public int size() {
return messData.size();
}
public MessData getMessage(int index) {
return (MessData) messData.elementAt(index);
}
public void add(MessData mData) {
messData.addElement(mData);
}
public int getIndex(MessData mData) {
return Util.getIndex(messData, mData);
}
public void clear() {
messData.removeAllElements();
}
public long getLastMessageTime() {
if (0 == messData.size()) {
return 0;
}
MessData md = (MessData) messData.lastElement();
return md.getTime();
}
public void removeTopMessage() {
messData.removeElementAt(0);
}
public final void setWritable(boolean wr) {
writable = wr;
}
public void resetAuthRequests() {
boolean notEmpty = (0 < authRequestCounter);
authRequestCounter = 0;
if (notEmpty) {
contact.updateChatState(this);
Jimm.getJimm().getCL().markMessages(protocol, contact);
}
}
public void resetUnreadMessages() {
boolean notEmpty = (0 < messageCounter)
|| (0 < otherMessageCounter)
|| (0 < sysNoticeCounter);
messageCounter = 0;
otherMessageCounter = 0;
sysNoticeCounter = 0;
if (notEmpty) {
contact.updateChatState(this);
Jimm.getJimm().getCL().markMessages(protocol, contact);
}
}
public int getUnreadMessageCount() {
return messageCounter + sysNoticeCounter + authRequestCounter
+ otherMessageCounter;
}
public int getPersonalUnreadMessageCount() {
return messageCounter + sysNoticeCounter + authRequestCounter;
}
public Contact getContact() {
return contact;
}
public boolean isHuman() {
boolean service = isBlogBot() || protocol.isBot(getContact());
// #sijapp cond.if protocols_JABBER is "true" #
if (getContact() instanceof XmppContact) {
service |= Jid.isGate(getContact().getUserId());
}
// #sijapp cond.end #
return !service && getContact().isSingleUserContact();
}
public boolean isBlogBot() {
// #sijapp cond.if protocols_JABBER is "true" #
if (getContact() instanceof XmppContact) {
return ((Xmpp) protocol).isBlogBot(getContact().getUserId());
}
// #sijapp cond.end #
return false;
}
public Protocol getProtocol() {
return protocol;
}
public MessData getUnreadMessage(int num) {
return getMessage(size() - getUnreadMessageCount() + num);
}
public final int getNewMessageIcon() {
if (0 < messageCounter) {
return Message.ICON_IN_MSG_HI;
} else if (0 < authRequestCounter) {
return Message.ICON_SYSREQ;
} else if (0 < otherMessageCounter) {
return Message.ICON_IN_MSG;
} else if (0 < sysNoticeCounter) {
return Message.ICON_SYS_OK;
}
return -1;
}
public final String getMyName() {
// #sijapp cond.if protocols_JABBER is "true" #
if (getContact() instanceof XmppServiceContact) {
String nick = ((XmppServiceContact)getContact()).getMyName();
if (null != nick) return nick;
}
// #sijapp cond.end#
return getProtocol().getNick();
}
public int getMessageHeaderHeight(MessData mData) {
if ((null == mData) || mData.isMe()) return 0;
int height = fontSet[Chat.FONT_STYLE_BOLD].getHeight();
Icon icon = InfoFactory.msgIcons.iconAt(mData.iconIndex);
if (null != icon) {
height = Math.max(height, icon.getHeight());
}
return height;
}
public int getItemHeight(MessData mData) {
return mData.par.getHeight() + getMessageHeaderHeight(mData);
}
public boolean hasAuthRequests() {
return 0 < authRequestCounter;
}
}