diff --git a/apps/syndie/java/src/net/i2p/syndie/ThreadNodeImpl.java b/apps/syndie/java/src/net/i2p/syndie/ThreadNodeImpl.java
index e9ef4ca50..891d1f5b6 100644
--- a/apps/syndie/java/src/net/i2p/syndie/ThreadNodeImpl.java
+++ b/apps/syndie/java/src/net/i2p/syndie/ThreadNodeImpl.java
@@ -53,8 +53,10 @@ class ThreadNodeImpl implements ThreadNode {
void summarizeThread() {
_recursiveAuthors.add(_entry.getKeyHash());
_recursiveEntries.add(_entry);
- _mostRecentPostDate = _entry.getEntryId();
- _mostRecentPostAuthor = _entry.getKeyHash();
+ // children are always 'newer' than parents, even if their dates are older
+ // (e.g. post #1 for a child on tuesday is 'newer' than post #5 for the parent on tuesday)
+ _mostRecentPostDate = -1;
+ _mostRecentPostAuthor = null;
// we need to go through all children (recursively), in case the
// tree is out of order (which it shouldn't be, if its built carefully...)
@@ -71,6 +73,22 @@ class ThreadNodeImpl implements ThreadNode {
_recursiveAuthors.addAll(node.getRecursiveAuthors());
_recursiveEntries.addAll(node.getRecursiveEntries());
}
+
+ if (_mostRecentPostDate < 0) {
+ _mostRecentPostDate = _entry.getEntryId();
+ _mostRecentPostAuthor = _entry.getKeyHash();
+ }
+
+ // now reorder the children
+ TreeSet ordered = new TreeSet(new WritableThreadIndex.NewestNodeFirstComparator());
+ for (int i = 0; i < _children.size(); i++) {
+ ThreadNodeImpl kid = (ThreadNodeImpl)_children.get(i);
+ ordered.add(kid);
+ }
+ List kids = new ArrayList(ordered.size());
+ for (Iterator iter = ordered.iterator(); iter.hasNext(); )
+ kids.add(iter.next());
+ _children = kids;
}
public String toString() {
diff --git a/apps/syndie/java/src/net/i2p/syndie/WritableThreadIndex.java b/apps/syndie/java/src/net/i2p/syndie/WritableThreadIndex.java
index 7ec72023f..224e03710 100644
--- a/apps/syndie/java/src/net/i2p/syndie/WritableThreadIndex.java
+++ b/apps/syndie/java/src/net/i2p/syndie/WritableThreadIndex.java
@@ -152,7 +152,7 @@ class WritableThreadIndex extends ThreadIndex {
}
}
/** sort ThreadNodeImpl instances with the highest entryId first */
- private class NewestNodeFirstComparator implements Comparator {
+ public static class NewestNodeFirstComparator implements Comparator {
public int compare(Object lhs, Object rhs) {
ThreadNodeImpl left = (ThreadNodeImpl)lhs;
ThreadNodeImpl right = (ThreadNodeImpl)rhs;
diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java b/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java
index 55a012ed8..12fe3c9d3 100644
--- a/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java
+++ b/apps/syndie/java/src/net/i2p/syndie/sml/HTMLRenderer.java
@@ -650,7 +650,7 @@ public class HTMLRenderer extends EventReceiverImpl {
_postBodyBuffer.append("schema=").append(sanitizeURL(l.schema)).append('&');
if (l.location != null)
_postBodyBuffer.append("location=").append(sanitizeURL(l.location)).append('&');
- _postBodyBuffer.append("\">").append(sanitizeString(l.location));
+ _postBodyBuffer.append("\">").append(sanitizeString(l.location, 30));
_postBodyBuffer.append(getSpan("summDetailExternalNet")).append(" (").append(sanitizeString(l.schema)).append(") ");
}
_postBodyBuffer.append("
\n");
diff --git a/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java b/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java
index 94a158547..ad21c196b 100644
--- a/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java
+++ b/apps/syndie/java/src/net/i2p/syndie/sml/ThreadedHTMLRenderer.java
@@ -376,10 +376,10 @@ public class ThreadedHTMLRenderer extends HTMLRenderer {
for (int i = 0; i < _entry.getAttachments().length; i++) {
_postBodyBuffer.append("\n");
@@ -396,7 +396,7 @@ public class ThreadedHTMLRenderer extends HTMLRenderer {
boolean expanded = (_user != null ? _user.getShowExpanded() : false);
boolean images = (_user != null ? _user.getShowImages() : false);
_postBodyBuffer.append(getPageURL(new Hash(Base64.decode(b.hash)), b.tag, b.entryId, -1, -1, expanded, images));
- _postBodyBuffer.append("\">").append(sanitizeString(b.name)).append(" ");
+ _postBodyBuffer.append("\">").append(sanitizeString(b.name, 30)).append(" ");
}
_postBodyBuffer.append("
\n");
}
@@ -412,7 +412,7 @@ public class ThreadedHTMLRenderer extends HTMLRenderer {
_postBodyBuffer.append("schema=").append(sanitizeURL(l.schema)).append('&');
if (l.location != null)
_postBodyBuffer.append("location=").append(sanitizeURL(l.location)).append('&');
- _postBodyBuffer.append("\">").append(sanitizeString(l.location));
+ _postBodyBuffer.append("\">").append(sanitizeString(l.location, 30));
_postBodyBuffer.append(getSpan("summDetailExternalNet")).append(" (").append(sanitizeString(l.schema)).append(") ");
}
_postBodyBuffer.append("
\n");
@@ -439,7 +439,7 @@ public class ThreadedHTMLRenderer extends HTMLRenderer {
_postBodyBuffer.append(AddressesServlet.PARAM_NAME).append("=").append(sanitizeTagParam(a.name)).append('&');
if (a.protocol != null)
_postBodyBuffer.append(AddressesServlet.PARAM_PROTO).append("=").append(sanitizeTagParam(a.protocol)).append('&');
- _postBodyBuffer.append("\">").append(sanitizeString(a.name)).append("");
+ _postBodyBuffer.append("\">").append(sanitizeString(a.name, 30)).append("");
}
}
_postBodyBuffer.append("
\n");
diff --git a/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java b/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java
index c432d08f6..8c5c80991 100644
--- a/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java
+++ b/apps/syndie/java/src/net/i2p/syndie/web/BaseServlet.java
@@ -951,16 +951,20 @@ public abstract class BaseServlet extends HttpServlet {
String tags, String author) {
StringBuffer buf = new StringBuffer(64);
buf.append(uri);
+ BlogURI expandTo = node.getEntry();
if (node.getChildCount() > 0) {
- buf.append('?').append(ThreadedHTMLRenderer.PARAM_VISIBLE).append('=');
- ThreadNode child = node.getChild(0);
- buf.append(child.getEntry().getKeyHash().toBase64()).append('/');
- buf.append(child.getEntry().getEntryId()).append('&');
- } else {
- buf.append('?').append(ThreadedHTMLRenderer.PARAM_VISIBLE).append('=');
- buf.append(node.getEntry().getKeyHash().toBase64()).append('/');
- buf.append(node.getEntry().getEntryId()).append('&');
- }
+ if (true) {
+ // lets expand to the leaf
+ expandTo = new BlogURI(node.getMostRecentPostAuthor(), node.getMostRecentPostDate());
+ } else {
+ // only expand one level
+ expandTo = node.getChild(0).getEntry();
+ }
+ }
+ buf.append('?').append(ThreadedHTMLRenderer.PARAM_VISIBLE).append('=');
+ buf.append(expandTo.getKeyHash().toBase64()).append('/');
+ buf.append(expandTo.getEntryId()).append('&');
+
buf.append(ThreadedHTMLRenderer.PARAM_VIEW_THREAD).append('=');
buf.append(node.getEntry().getKeyHash().toBase64()).append('/');
buf.append(node.getEntry().getEntryId()).append('&');
diff --git a/history.txt b/history.txt
index ea6f31ffe..4225774f7 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,8 @@
-$Id: history.txt,v 1.347 2005/12/04 15:12:19 jrandom Exp $
+$Id: history.txt,v 1.348 2005/12/05 01:14:16 jrandom Exp $
+
+2005-12-07 jrandom
+ * Expand the thread we're viewing to its leaf
+ * Bugfix on intraday ordering (children are always newer than parents)
2005-12-05 jrandom
* Added an RDF and XML thread export to Syndie, reachable at