Author: jflesch
Date: 2007-08-02 00:41:02 +0000 (Thu, 02 Aug 2007)
New Revision: 14458
Modified:
trunk/apps/Thaw/src/thaw/gui/Table.java
trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties
trunk/apps/Thaw/src/thaw/i18n/thaw.properties
trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties
trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java
trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java
Log:
Allow to display a tree with all the messages
Modified: trunk/apps/Thaw/src/thaw/gui/Table.java
===================================================================
--- trunk/apps/Thaw/src/thaw/gui/Table.java 2007-08-01 21:20:07 UTC (rev
14457)
+++ trunk/apps/Thaw/src/thaw/gui/Table.java 2007-08-02 00:41:02 UTC (rev
14458)
@@ -39,6 +39,9 @@
*/
public class Table extends JTable implements TableColumnModelListener,
Runnable {
+ public final static Color COLOR_ONE = Color.WHITE;
+ public final static Color COLOR_TWO = new Color(240, 240, 240);
+
private Config config;
private String configPrefix;
@@ -159,14 +162,11 @@
private boolean statusInProgressBars = true;
private int columnWithKeys = -1;
- private Color softGray;
-
private JLabel labelRenderer;
private TransferProgressBar transferProgressBarRenderer;
private JTextArea textAreaRenderer;
public DefaultRenderer() {
- softGray = new Color(240,240,240);
labelRenderer = new JLabel();
transferProgressBarRenderer = new
TransferProgressBar(null, statusInProgressBars);
textAreaRenderer = new JTextArea();
@@ -184,6 +184,16 @@
columnWithKeys = c;
}
+
+ public void setBackground(Component c, int row, boolean
isSelected) {
+ if (!isSelected) {
+ if (row % 2 == 0)
+ c.setBackground(COLOR_ONE);
+ else
+ c.setBackground(COLOR_TWO);
+ }
+ }
+
public Component getTableCellRendererComponent(final JTable
table, Object value,
final boolean
isSelected, final boolean hasFocus,
final int row,
final int column) {
@@ -230,12 +240,7 @@
}
- if (!isSelected) {
- if (row % 2 == 0)
- cell.setBackground(Color.WHITE);
- else
- cell.setBackground(softGray);
- }
+ setBackground(cell, row, isSelected);
cell.setForeground(Color.BLACK);
Modified: trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties 2007-08-01
21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/i18n/source.thaw_fr.properties 2007-08-02
00:41:02 UTC (rev 14458)
@@ -599,3 +599,5 @@
thaw.plugin.miniFrost.invalidRegexp=Une de vos regexp est invalide : X
thaw.plugin.miniFrost.modifyRegexp=Modifier les r?gles de filtrage
+
+thaw.plugin.miniFrost.seeTree=Voir les messages sous forme d'arbre
Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2007-08-01 21:20:07 UTC
(rev 14457)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2007-08-02 00:41:02 UTC
(rev 14458)
@@ -618,3 +618,4 @@
thaw.plugin.miniFrost.invalidRegexp=One of your regexp is invalid : X
thaw.plugin.miniFrost.modifyRegexp=Modify the filtering rules
+thaw.plugin.miniFrost.seeTree=See message tree
Modified: trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties 2007-08-01 21:20:07 UTC
(rev 14457)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw_fr.properties 2007-08-02 00:41:02 UTC
(rev 14458)
@@ -593,9 +593,11 @@
thaw.plugin.miniFrost.encrypted=Crypt\u00e9
thaw.plugin.miniFrost.encryptedBody=Crypt\u00e9 pour 'X'
-thaw.plugin.miniFrost.regexpBlacklist=Archiver imm\u00e9diatement les messages
correspondant aux expressions suivantes (une par line):
+thaw.plugin.miniFrost.regexpBlacklistLongDesc=Archiver imm\u00e9diatement les
messages correspondant aux expressions suivantes (une par line):
thaw.plugin.miniFrost.seeSunManual=(Voir X)
thaw.plugin.miniFrost.regexpBlacklist=Filtrage
thaw.plugin.miniFrost.invalidRegexp=Une de vos regexp est invalide : X
thaw.plugin.miniFrost.modifyRegexp=Modifier les r\u00e8gles de filtrage
+
+thaw.plugin.miniFrost.seeTree=Voir les messages sous forme d'arbre
Modified: trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2007-08-01 21:20:07 UTC
(rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/TrayIcon.java 2007-08-02 00:41:02 UTC
(rev 14458)
@@ -236,6 +236,7 @@
p.add(l);
TransferProgressBar bar = new TransferProgressBar(q, true,
true);
+ bar.refresh();
progressBars.add(bar);
p.add(bar);
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/MessageTreeTable.java
2007-08-02 00:41:02 UTC (rev 14458)
@@ -18,10 +18,15 @@
import java.awt.Color;
import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableCellRenderer;
import javax.swing.DefaultCellEditor;
import javax.swing.event.TableModelEvent;
+
import java.util.Vector;
+import java.util.Iterator;
+import java.util.Enumeration;
+
import java.awt.Component;
import java.awt.event.ActionListener;
@@ -30,6 +35,7 @@
import javax.swing.table.TableCellEditor;
import javax.swing.event.CellEditorListener;
+
import javax.swing.JComboBox;
import javax.swing.JTextField;
@@ -44,8 +50,14 @@
import java.awt.Font;
import java.awt.event.KeyEvent;
+import javax.swing.JTree;
+import javax.swing.tree.TreeCellRenderer;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeNode;
+import java.util.HashMap;
+
import thaw.gui.Table;
import thaw.gui.IconBox;
import thaw.core.I18n;
@@ -113,10 +125,18 @@
private int orderBy;
private boolean desc;
+ private JCheckBox seeTree;
private JCheckBox seeUnsigned;
private JComboBox minTrustLevel;
private int minTrustLevelInt;
+
+
+ /** for the thread tree **/
+ private MessageNodeTree messageNodeTree;
+ private HashMap messageNodeHashMap;
+
+
public MessageTreeTable(MiniFrostPanel mainPanel) {
this.mainPanel = mainPanel;
@@ -182,9 +202,7 @@
table.addMouseListener(this);
setBoard(null);
- refresh();
-
panel.add(northPanel, BorderLayout.NORTH);
panel.add(new JScrollPane(table), BorderLayout.CENTER);
@@ -216,8 +234,15 @@
seeUnsigned = new
JCheckBox(I18n.getMessage("thaw.plugin.miniFrost.seeUnsigned"), true);
seeUnsigned.addActionListener(this);
+ seeTree = new
JCheckBox(I18n.getMessage("thaw.plugin.miniFrost.seeTree"));
+ seeTree.setSelected(true);
+ seeTree.addActionListener(this);
+ JPanel southWestPanel = new JPanel(new GridLayout(2, 1));
+ southWestPanel.add(new JLabel(""));
+ southWestPanel.add(seeTree);
+
JPanel southEastPanel = new JPanel(new GridLayout(2, 1));
JPanel southEastPanelTop = new JPanel(new GridLayout(1, 2, 10,
10));
@@ -229,12 +254,15 @@
JPanel southPanel = new JPanel(new BorderLayout(5, 5));
+ southPanel.add(southWestPanel, BorderLayout.WEST);
southPanel.add(new JLabel(""), BorderLayout.CENTER);
southPanel.add(southEastPanel, BorderLayout.EAST);
panel.add(southPanel, BorderLayout.SOUTH);
mainPanel.getBoardTree().addObserver(this);
+
+ refresh();
}
@@ -260,6 +288,196 @@
return panel;
}
+
+
+
+ protected class MessageNodeTree extends JTree {
+
+ public MessageNodeTree(TreeNode root) {
+ super(root);
+
+ DefaultTreeCellRenderer cellRenderer =
(DefaultTreeCellRenderer)getCellRenderer();
+
cellRenderer.setOpenIcon(cellRenderer.getDefaultLeafIcon());
+
cellRenderer.setClosedIcon(cellRenderer.getDefaultLeafIcon());
+ }
+
+ protected int visibleRow;
+ protected int rowHeight;
+
+ public void setBounds(int x, int y, int w, int h) {
+ super.setBounds(x, 0, w, table.getHeight());
+ }
+
+ public void paint(java.awt.Graphics g) {
+ g.translate(0, (-(visibleRow+1) * rowHeight));
+ super.paint(g);
+ }
+
+ public Component getTableCellRendererComponent(JTable table,
+ Object value,
+ boolean
isSelected,
+ boolean hasFocus,
+ int row, int
column) {
+ if (isSelected)
+ setSelectionRow(row+1); /* don't forget the
root :) */
+
+ setRowHeight(table.getRowHeight());
+ rowHeight = table.getRowHeight();
+
+ Message msg = ((MessageNode)value).getMessage();
+
+ int mod = Font.PLAIN;
+
+ if (msg != null) {
+
+ if (!msg.isRead()) {
+ mod = Font.BOLD;
+ }
+
+ if (msg.isArchived()) {
+ if (mod == Font.BOLD)
+ mod = Font.ITALIC | Font.BOLD;
+ else
+ mod = Font.ITALIC;
+ }
+
+ } else
+ mod = Font.ITALIC;
+
+ setFont(getFont().deriveFont(mod));
+
+ if (msg != null && msg.getSender().getIdentity() !=
null)
+
setForeground(msg.getSender().getIdentity().getTrustLevelColor());
+
+ visibleRow = row;
+ return this;
+ }
+ }
+
+
+ protected static class RootMessageNode implements TreeNode {
+ private Vector children;
+
+ public RootMessageNode(Vector nodes) {
+ this.children = nodes;
+ }
+
+ public Enumeration children() {
+ return children.elements();
+ }
+
+ public boolean getAllowsChildren() {
+ return true;
+ }
+
+ public TreeNode getChildAt(int childIndex) {
+ return (MessageNode)children.get(childIndex);
+ }
+
+ public int getChildCount() {
+ return children.size();
+ }
+
+ public int getIndex(TreeNode node) {
+ return children.indexOf(node);
+ }
+
+ public TreeNode getParent() {
+ return null;
+ }
+
+ public boolean isLeaf() {
+ return (children.size() == 0);
+ }
+ }
+
+
+ protected static class MessageNode implements TreeNode {
+ private Vector children;
+
+ private boolean hasParent;
+ private TreeNode parent;
+
+ private Message msg;
+
+ public MessageNode(Message msg) {
+ this.parent = null;
+ this.msg = msg;
+ children = new Vector(0);
+ }
+
+ public Message getMessage() {
+ return msg;
+ }
+
+ public void setParent(TreeNode node) {
+ parent = node;
+ }
+
+ /**
+ * will register
+ */
+ public void setParent(HashMap messageNodes) {
+ String inReplyTo;
+
+ if (msg != null && (inReplyTo = msg.getInReplyToId())
!= null) {
+ hasParent = true;
+
+ MessageNode node =
(MessageNode)messageNodes.get(inReplyTo);
+
+ if (node != null) {
+ setParent(node);
+ node.registerChild(this);
+ }
+ }
+ }
+
+ public boolean hasParent() {
+ return hasParent;
+ }
+
+ public void registerChild(MessageNode node) {
+ children.add(node);
+ }
+
+ public java.util.Enumeration children() {
+ return children.elements();
+ }
+
+ public boolean getAllowsChildren() {
+ return true;
+ }
+
+ public TreeNode getChildAt(int childIndex) {
+ return (MessageNode)children.get(childIndex);
+ }
+
+ public int getChildCount() {
+ return children.size();
+ }
+
+ public int getIndex(TreeNode node) {
+ return children.indexOf(node);
+ }
+
+ public TreeNode getParent() {
+ return parent;
+ }
+
+ public boolean isLeaf() {
+ return (children.size() == 0);
+ }
+
+ public String toString() {
+ if (msg != null)
+ return msg.getSubject();
+ else
+ return "(?)";
+ }
+ }
+
+
+
protected class MessageTableRenderer extends Table.DefaultRenderer {
private JCheckBox checkBoxRenderer;
@@ -273,27 +491,43 @@
final int row,
final int column) {
Component c;
- Author author = model.getMsg(row).getSender();
+ Message msg = model.getMsg(row);
+ Author author = (msg != null ? msg.getSender() : null);
if (value instanceof Boolean) {
-
checkBoxRenderer.setSelected(((Boolean)value).booleanValue());
+ checkBoxRenderer.setEnabled(msg != null);
+
+ if (msg != null)
+
checkBoxRenderer.setSelected(((Boolean)value).booleanValue());
+ else
+ checkBoxRenderer.setSelected(false);
+
return checkBoxRenderer;
}
+ if (value instanceof MessageNode) {
+ return
messageNodeTree.getTableCellRendererComponent(table,
+
value,
+
isSelected,
+
hasFocus,
+
row,
+
column);
+ }
+
Color color = Color.BLACK;
- if (column == 2)
- value = author.toString();
- else if (column == 3) {
- if (author.getIdentity() != null)
+ if (column == 2) {
+ value = ((author != null) ? author.toString() :
"(?)");
+ } else if (column == 3) {
+ if (author != null && author.getIdentity() !=
null)
value =
author.getIdentity().getTrustLevelStr();
else
value =
I18n.getMessage("thaw.plugin.signature.trustLevel.none");
}
- if (author.getIdentity() != null)
+ if (author != null && author.getIdentity() != null)
color =
author.getIdentity().getTrustLevelColor();
c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus,
@@ -301,20 +535,22 @@
c.setForeground(color);
- Message msg = model.getMsg(row);
-
int mod = Font.PLAIN;
- if (!msg.isRead()) {
- mod = Font.BOLD;
- }
+ if (msg != null) {
+ if (!msg.isRead()) {
+ mod = Font.BOLD;
+ }
- if (msg.isArchived()) {
- if (mod == Font.BOLD)
- mod = Font.ITALIC | Font.BOLD;
- else
- mod = Font.ITALIC;
+ if (msg.isArchived()) {
+ if (mod == Font.BOLD)
+ mod = Font.ITALIC | Font.BOLD;
+ else
+ mod = Font.ITALIC;
+ }
}
+ else
+ mod = Font.ITALIC;
c.setFont(c.getFont().deriveFont(mod));
@@ -349,7 +585,7 @@
}
public Message getMsg(int row) {
- return (Message)msgs.get(row);
+ return ((MessageNode)msgs.get(row)).getMessage();
}
public Object getValueAt(int row, int column) {
@@ -358,25 +594,28 @@
}
if (column == 1) {
- Message msg = (Message)msgs.get(row);
- return "("+Integer.toString(msg.getRev()) + ")
"+
- msg.getSubject();
+ return (MessageNode)msgs.get(row);
}
+ Message msg = ((MessageNode)msgs.get(row)).getMessage();
+
+ if (msg == null)
+ return "(?)";
+
if (column == 2) {
- return ((Message)msgs.get(row)).getSender();
+ return msg.getSender();
}
if (column == 3) {
- return ((Message)msgs.get(row)).getSender();
+ return msg.getSender();
}
if (column == 4) {
- return ((Message)msgs.get(row)).getDate();
+ return msg.getDate();
}
if (column == 5) {
- return ((Message)msgs.get(row));
+ return msg; //.getMessage();
}
return null;
@@ -395,8 +634,12 @@
public void setSelectedAll(boolean s) {
- for (int i = 0 ; i < selection.length ; i++)
- selection[i] = s;
+ for (int i = 0 ; i < selection.length ; i++) {
+ Message msg =
((MessageNode)msgs.get(i)).getMessage();
+
+ if (msg != null)
+ selection[i] = s;
+ }
}
@@ -406,7 +649,12 @@
public void switchSelection(int row) {
- selection[row] = !selection[row];
+ Message msg = ((MessageNode)msgs.get(row)).getMessage();
+
+ if (msg != null)
+ selection[row] = !selection[row];
+ else
+ selection[row] = false;
}
public Vector getMessages(Vector msgs) {
@@ -414,9 +662,14 @@
}
public void refresh(Message msg) {
- refresh(msgs.indexOf(msg));
+ /* quick and dirty */
+ refresh();
}
+ public void refresh(MessageNode msgNode) {
+ refresh(msgs.indexOf(msgNode));
+ }
+
public void refresh(int row) {
if (row == -1) {
Logger.error(this, "Message not found in the
list ?!");
@@ -447,14 +700,43 @@
refresh(keywords, orderBy, desc, everywhereBox.isSelected());
}
+
+ private boolean rebuildMsgList(Vector msgs, TreeNode node, int proof) {
+ if (node instanceof MessageNode)
+ msgs.add(node);
+
+ if (proof >= 20) {
+ Logger.notice(this, "Too proof, sorry");
+ return false;
+ }
+
+ for(Enumeration e = node.children();
+ e.hasMoreElements();) {
+ TreeNode sub = (TreeNode)e.nextElement();
+ if (!rebuildMsgList(msgs, sub, proof+1))
+ return false;
+ }
+
+ return true;
+ }
+
+
+
public void refresh(String[] keywords, int orderBy, boolean desc,
boolean allBoards) {
Vector msgs = null;
if ((!allBoards) && targetBoard != null) {
- msgs = targetBoard.getMessages(keywords, orderBy,
- desc,
seeArchived.isSelected(),
- seeUnsigned.isSelected(),
- minTrustLevelInt);
+ Vector rawMsgs = targetBoard.getMessages(keywords,
orderBy,
+ desc,
seeArchived.isSelected(),
+
seeUnsigned.isSelected(),
+
minTrustLevelInt);
+
+ msgs = new Vector(rawMsgs.size());
+
+ for(Iterator it = rawMsgs.iterator();
+ it.hasNext();) {
+ msgs.add(new MessageNode((Message)it.next()));
+ }
}
if (allBoards) {
@@ -467,13 +749,97 @@
seeArchived.isSelected(),
seeUnsigned.isSelected(),
minTrustLevelInt);
- msgs.addAll(boardMsgs);
+ for (Iterator it = boardMsgs.iterator();
+ it.hasNext();) {
+ msgs.add(new
MessageNode((Message)it.next()));
+ }
}
}
- if (msgs != null)
- model.setMessages(msgs);
+ if (msgs == null) {
+ msgs = new Vector();
+ }
+ Logger.info(this, "Nmb msgs in the tree :
"+Integer.toString(msgs.size()));
+
+ Vector rootNodes;
+
+ if (seeTree.isSelected()) {
+
+ /** Filling in messageNodeHashMap **/
+ messageNodeHashMap = new HashMap(msgs.size());
+
+ for (Iterator it = msgs.iterator();
+ it.hasNext();) {
+ MessageNode node = (MessageNode)it.next();
+
messageNodeHashMap.put(node.getMessage().getMsgId(), node);
+ }
+
+
+ /** Building the tree **/
+ for (Iterator it = msgs.iterator();
+ it.hasNext();) {
+
((MessageNode)it.next()).setParent(messageNodeHashMap);
+ }
+
+ /** we search the nodes who should have a parent but
haven't **/
+ /* we don't use an iterator to avoid the collisions */
+ for (int i = 0 ; i < msgs.size(); i++) {
+ MessageNode node = (MessageNode)msgs.get(i);
+
+ if (node.getParent() == null &&
node.hasParent()) {
+ MessageNode newEmptyNode = new
MessageNode(null);
+ node.setParent(newEmptyNode);
+ newEmptyNode.registerChild(node);
+
+ /* we replace */
+ msgs.set(i, newEmptyNode);
+ /* and readd the other node at the end
of the vector */
+ msgs.add(node);
+ }
+ }
+
+ rootNodes = new Vector();
+
+ /* Building the root tree */
+
+ for (Iterator it = msgs.iterator();
+ it.hasNext();) {
+ MessageNode node = (MessageNode)it.next();
+
+ if (node.getParent() == null)
+ rootNodes.add(node);
+ }
+ } else
+ rootNodes = msgs;
+
+
+ /* we add all the message without any parent to the root */
+ RootMessageNode rootNode = new RootMessageNode(rootNodes);
+
+ for (Iterator it = rootNodes.iterator();
+ it.hasNext();) {
+ ((MessageNode)it.next()).setParent(rootNode);
+ }
+
+
+ /** and to finish, the tree itself **/
+ messageNodeTree = new MessageNodeTree(rootNode);
+
+ for (int i = 0 ; i < messageNodeTree.getRowCount() ; i++) {
+ messageNodeTree.expandRow(i);
+ }
+
+ /** next we check we have the same order in the tree and in the
table **/
+
+ msgs = new Vector();
+
+ rebuildMsgList(msgs, rootNode, 0);
+
+ Logger.info(this, "Nmb msgs in the tree :
"+Integer.toString(msgs.size()));
+
+ model.setMessages(msgs);
+
model.refresh();
}
@@ -520,7 +886,8 @@
public void actionPerformed(ActionEvent e) {
if (e.getSource() == seeUnsigned
|| e.getSource() == minTrustLevel
- || e.getSource() == seeArchived) {
+ || e.getSource() == seeArchived
+ || e.getSource() == seeTree) {
minTrustLevelInt =
Identity.getTrustLevel((String)(minTrustLevel.getSelectedItem()));
refresh();
@@ -588,12 +955,17 @@
int row = table.rowAtPoint(e.getPoint());
int column = table.columnAtPoint(e.getPoint());
+ Logger.info(this, "Mouse clicked");
+
if (column == 0) {
model.switchSelection(row);
refresh(row);
} else {
-
mainPanel.getMessagePanel().setMessage(model.getMsg(row));
- mainPanel.displayMessage();
+ Message msg = model.getMsg(row);
+ if (msg != null) {
+ mainPanel.getMessagePanel().setMessage(msg);
+ mainPanel.displayMessage();
+ }
}
}
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKBoard.java
2007-08-02 00:41:02 UTC (rev 14458)
@@ -148,6 +148,8 @@
PreparedStatement st;
String query = "SELECT frostKSKMessages.id, "+
+ " frostKSKMessages.msgId, "+
+ " frostKSKMessages.inReplyToId, "+
" frostKSKMessages.subject, "+
" frostKSKMessages.nick, "+
" frostKSKMessages.sigId, "+
@@ -205,6 +207,8 @@
String nick = set.getString("nickname");
v.add(new KSKMessage(set.getInt("id"),
+
set.getString("msgId"),
+
set.getString("inReplyToId"),
set.getString("subject"),
set.getString("nick"),
sigId,
@@ -252,6 +256,8 @@
PreparedStatement st;
String query = "SELECT frostKSKMessages.id AS
id, "+
+ " frostKSKMessages.msgId AS
msgId, "+
+ " frostKSKMessages.inReplyToId AS
inReplyToId, "+
" frostKSKMessages.subject AS
subject, "+
" frostKSKMessages.nick AS nick,
"+
" frostKSKMessages.sigId AS
sigId, "+
@@ -286,6 +292,8 @@
int sigId = set.getInt("sigId");
return new KSKMessage(set.getInt("id"),
+
set.getString("msgId"),
+
set.getString("inReplyToId"),
set.getString("subject"),
set.getString("nick"),
sigId,
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/frostKSK/KSKMessage.java
2007-08-02 00:41:02 UTC (rev 14458)
@@ -38,6 +38,8 @@
/* content is not kept in memory (at least not here) */
private int id;
+ private String idStr;
+ private String inReplyToStr;
private String subject;
private KSKAuthor author;
private int sigId;
@@ -165,24 +167,36 @@
}
- public KSKMessage(int id,
+ public String getMsgId() {
+ return idStr;
+ }
+
+ public String getInReplyToId() {
+ return inReplyToStr;
+ }
+
+
+ public KSKMessage(int id, String idStr,
+ String inReplyToStr,
String subject, String nick,
int sigId, Identity identity,
java.util.Date date, int rev,
boolean read, boolean archived,
Identity encryptedFor,
KSKBoard board) {
- this.id = id;
- this.subject = subject;
+ this.id = id;
+ this.idStr = idStr;
+ this.inReplyToStr = inReplyToStr;
+ this.subject = subject;
- this.author = new KSKAuthor(nick, identity);
+ this.author = new KSKAuthor(nick, identity);
- this.sigId = sigId;
- this.date = date;
- this.rev = rev;
- this.read = read;
- this.archived = archived;
- this.board = board;
+ this.sigId = sigId;
+ this.date = date;
+ this.rev = rev;
+ this.read = read;
+ this.archived = archived;
+ this.board = board;
this.encryptedFor = encryptedFor;
}
@@ -335,34 +349,7 @@
}
- protected String getMsgId() {
- try {
- Hsqldb db = board.getFactory().getDb();
- synchronized(db.dbLock) {
-
- PreparedStatement st;
-
- st =
db.getConnection().prepareStatement("SELECT msgId "+
- "FROM
frostKSKMessages "+
- "WHERE
id = ? "+
- "LIMIT
1");
- st.setInt(1, id);
-
- ResultSet set = st.executeQuery();
-
- if (!set.next())
- return null;
-
- return set.getString("msgId");
- }
- } catch(SQLException e) {
- Logger.error(this, "Error while getting the messages :
"+e.toString());
- return null;
- }
- }
-
-
public String getRawMessage() {
try {
Hsqldb db = board.getFactory().getDb();
Modified: trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java
2007-08-01 21:20:07 UTC (rev 14457)
+++ trunk/apps/Thaw/src/thaw/plugins/miniFrost/interfaces/Message.java
2007-08-02 00:41:02 UTC (rev 14458)
@@ -8,6 +8,9 @@
public interface Message /* extends TreeNode */ {
+ public String getMsgId();
+ public String getInReplyToId();
+
//public int getParentId();
public String getSubject();