📄 updatecontactlistaction.java.svn-base
字号:
this.state = STATE_ADD_GROUP2; break; case STATE_ADD_GROUP2: ContactList.addGroup(this.gItem); Icq.sendCLI_ADDEND(); this.state = STATE_COMPLETED; break; /* STATE_ADD */ case STATE_REQ_AUTH1: sendGroup(gItem); Icq.sendCLI_ADDEND(); this.state = STATE_COMPLETED; break; case STATE_ADD_CONTACT1: sendGroup(gItem); cItem.setBooleanValue(ContactItem.CONTACTITEM_IS_TEMP, false); if (cItem.getBooleanValue(ContactItem.CONTACTITEM_NO_AUTH) == false) { this.state = STATE_COMPLETED; Icq.sendCLI_ADDEND(); } else { this.state = STATE_ADD_CONTACT2; } break; case STATE_ADD_CONTACT2: Icq.sendCLI_ADDEND(); this.state = STATE_COMPLETED; break; /* STATE_CLI_ROSTERMODIFY_SENT */ case STATE_CLI_ROSTERMODIFY_SENT: if (this.action != ACTION_RENAME) Icq.sendCLI_ADDEND(); this.state = STATE_COMPLETED; break; /* STATE_MOVE */ case STATE_MOVE1: sendGroup(newGItem); state = STATE_MOVE2; break; case STATE_MOVE2: Icq.sendCLI_ADDEND(); state = STATE_COMPLETED; break; /* STATE_DELETE_CONTACT */ case STATE_DELETE_CONTACT1: ContactListGroupItem group = ContactList .getGroupById(cItem .getIntValue(ContactItem.CONTACTITEM_GROUP)); ContactList.removeContactItem(this.cItem); if (group != null) { sendGroup(group); state = STATE_DELETE_CONTACT2; } else { Icq.sendCLI_ADDEND(); this.state = STATE_COMPLETED; } break; case STATE_DELETE_CONTACT2: Icq.sendCLI_ADDEND(); this.state = STATE_COMPLETED; break; } /* Packet has been consumed */ consumed = true; /* Update activity timestamp */ lastActivity = System.currentTimeMillis(); } } /* end 'if (packet instanceof SnacPacket)' */ /* Return consumption flag */ return (consumed); } private void sendGroupsList() throws JimmException { Icq.sendPacket(new SnacPacket(SnacPacket.CLI_ROSTERUPDATE_FAMILY, SnacPacket.CLI_ROSTERUPDATE_COMMAND, Util.getCounter(), new byte[0], packGroups())); } static private void sendGroup(ContactListGroupItem group) throws JimmException { Icq.sendPacket(new SnacPacket(SnacPacket.CLI_ROSTERUPDATE_FAMILY, SnacPacket.CLI_ROSTERUPDATE_COMMAND, Util.getCounter(), new byte[0], packRosterItem(group))); } /* Forwards received packet, returns true if packet was consumed */ protected synchronized boolean forward(Packet packet) throws JimmException { boolean result = processPaket(packet); if (result && (errorCode != 0)) { /* Send a CLI_ADDEND packet */ if (/*(action != ACTION_MOVE) && */(action != ACTION_RENAME)) Icq.sendCLI_ADDEND(); /* Update activity timestamp */ lastActivity = System.currentTimeMillis(); } return result; } /* Returns true if the action is completed */ public boolean isCompleted() { return (this.state == UpdateContactListAction.STATE_COMPLETED); } public void onEvent(int eventType) { switch (eventType) { case ON_COMPLETE: switch (action) { case ACTION_ADD: case ACTION_DEL: case ACTION_MOVE: ContactList.optionsChanged(true, true); break; } MainThread.activateContactListMT(null); if ((action != ACTION_DEL) && (cItem != null)) ContactList.contactChanged(cItem, true, false); break; case ON_ERROR: if (errorCode != 0) JimmException.handleException(new JimmException(errorCode, 0, true)); else JimmException.handleException(new JimmException(154, 3, true)); break; } } /* Returns true if an error has occured */ public boolean isError() { if (this.state == ConnectAction.STATE_ERROR) return true; if ((lastActivity + UpdateContactListAction.TIMEOUT < System .currentTimeMillis()) || (errorCode != 0)) { this.state = ConnectAction.STATE_ERROR; } return (this.state == ConnectAction.STATE_ERROR); } private byte[] packRosterItem(ContactItem cItem, int groupID) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); if (groupID == 0) groupID = cItem.getIntValue(ContactItem.CONTACTITEM_GROUP); /* Name */ Util.writeLenAndString(stream, cItem .getStringValue(ContactItem.CONTACTITEM_UIN), true); /* Group ID */ Util.writeWord(stream, groupID, true); /* ID */ Util.writeWord(stream, cItem .getIntValue(ContactItem.CONTACTITEM_ID), true); /* Type (Buddy record ) */ Util.writeWord(stream, 0, true); /* Additional data */ ByteArrayOutputStream addData = new ByteArrayOutputStream(); /* TLV(0x0066) - you are awaiting authorization for this buddy */ if (cItem.getBooleanValue(ContactItem.CONTACTITEM_NO_AUTH)) { Util.writeWord(addData, 0x0066, true); Util.writeWord(addData, 0x0000, true); } if (groupID != 0x0000) { /* TLV(0x0131) - name */ if (action != ACTION_DEL) { Util.writeWord(addData, 0x0131, true); Util.writeLenAndString(addData, cItem.getStringValue(ContactItem.CONTACTITEM_NAME), true); } /* Server-side additional data */ byte[] ssData = cItem.getBytesArray(ContactItem.CONTACTITEM_SS_DATA); if (ssData != null) Util.writeByteArray(addData, ssData); } /* Append additional data to stream */ Util.writeWord(stream, addData.size(), true); stream.write(addData.toByteArray(), 0, addData.size()); return stream.toByteArray(); } static private byte[] packRosterItem(ContactListGroupItem gItem) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); /* Name */ Util.writeLenAndString(stream, gItem.getName(), true); /* Group ID */ Util.writeWord(stream, gItem.getId(), true); /* id */ Util.writeWord(stream, 0, true); /* Type (Group) */ Util.writeWord(stream, 1, true); /* Contact items */ ContactItem[] items = ContactList.getItems(gItem); if (items.length != 0) { /* Length of the additional data */ Util.writeWord(stream, items.length * 2 + 4, true); /* TLV(0x00C8) */ Util.writeWord(stream, 0xc8, true); Util.writeWord(stream, items.length * 2, true); for (int i = 0; i < items.length; i++) Util.writeWord(stream, items[i] .getIntValue(ContactItem.CONTACTITEM_ID), true); } else Util.writeWord(stream, 0, true); return stream.toByteArray(); } private byte[] packGroups() { ByteArrayOutputStream stream = new ByteArrayOutputStream(); ContactListGroupItem[] gItems = ContactList.getGroupItems(); /* Name */ Util.writeLenAndString(stream, "", true); /* Group ID */ Util.writeWord(stream, 0, true); Util.writeWord(stream, 0, true); Util.writeWord(stream, 1, true); Util.writeWord(stream, gItems.length * 2 + 4, true); Util.writeWord(stream, 0xc8, true); Util.writeWord(stream, gItems.length * 2, true); for (int i = 0; i < gItems.length; i++) Util.writeWord(stream, gItems[i].getId(), true); return stream.toByteArray(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -