- package up a syndie-${syndie.version}.bin.jar-only.zip for upgrading syndie.jar only
- let the user decide whether they want to browse messages by "creation" date or by local import date, and show the corresponding date in the tree (good call Complication)
This commit is contained in:
@ -1,139 +1,142 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>Syndie - download</title>
|
||||
<link rel="stylesheet" href="style.css" type="text/css" title="normal" media="screen" />
|
||||
</head>
|
||||
<body>
|
||||
<div style="display: none"><a href="#Content" title="Skip navigation" accesskey="2">Skip navigation</a></div>
|
||||
<div id="Header">
|
||||
<a href="index.html" title="Syndie">Syndie</a><i> - distributed forums</i>
|
||||
</div>
|
||||
<div id="Menu">
|
||||
<a href="index.html" title="Home">Home</a><br />
|
||||
<a href="download.html" title="Download Syndie">Download</a><br />
|
||||
<a href="features.html" title="Syndie Features">Features</a><br />
|
||||
<a href="usecases.html" title="Use cases">Use cases</a><br />
|
||||
<a href="faq.html" title="Frequently Asked Questions">Faq</a><br />
|
||||
<a href="roadmap.html" title="Roadmap">Roadmap</a><br />
|
||||
<a href="dev.html" title="Developers">Developers</a><br />
|
||||
<a href="manual.html" title="">Manual</a><br />
|
||||
<a href="donate.html" title="Help Syndie">Donate</a><br />
|
||||
<a href="related.html" title="Related projects">Related projects</a><br />
|
||||
<a href="about.html" title="About Syndie">About</a><br />
|
||||
<hr />
|
||||
<a href="http://forum.i2p.net/viewforum.php?f=29">Forum</a>
|
||||
</div>
|
||||
<div id="Content">
|
||||
<h1>Download</h1>
|
||||
<!--
|
||||
Windows binaries:<ul>
|
||||
<li><a href="http://syndie.i2p.net/dist/syndie-0.917b.win.exe">syndie-0.917b.win.exe</a>
|
||||
(<a href="http://syndie.i2p.net/dist/syndie-0.917b.win.exe.sig">GPG signature</a>) <b>[note: does not yet exist]</b></li>
|
||||
<li>Download and run the executable installer.</li>
|
||||
<li>Prerequisites: None</li>
|
||||
</ul>
|
||||
-->
|
||||
|
||||
<h4>Standalone installers: <font size="-3">grab <i>one</i></font></h3>
|
||||
<ul>
|
||||
<li><b><a href="dist/syndie-0.920a.bin.win32.exe">Windows - syndie-0.920a.bin.win32.exe</a></b>
|
||||
(<a href="dist/syndie-0.920a.bin.win32.exe.sig">GPG signature</a>) - 4.4MB<br />
|
||||
Download and run the installer. Launch Syndie with the desktop or start
|
||||
menu icons, or with <code>syndie.exe</code></li>
|
||||
<li><b><a href="dist/syndie-0.920a.bin.linux32.exe">Linux - syndie-0.920a.bin.linux32.exe</a></b>
|
||||
(<a href="dist/syndie-0.920a.bin.linux32.exe.sig">GPG signature</a>) - 4.3MB<br />
|
||||
Download and run the installer via
|
||||
"<code>java -jar syndie-0.920a.bin.linux32.exe</code>" (<i>yes, really</i>).
|
||||
Launch Syndie with the desktop or KDE menu icons, or with
|
||||
"<code>java -jar bin/syndie.exe</code>".</li>
|
||||
<li><b><a href="dist/syndie-0.920a.bin.osx.exe">OSX - syndie-0.920a.bin.osx.exe</a></b>
|
||||
(<a href="dist/syndie-0.920a.bin.osx.exe.sig">GPG signature</a>) - 4.4MB<br />
|
||||
Download and run the installer via
|
||||
"<code>java -jar syndie-0.920a.bin.osx.exe</code>" (<i>yes, really</i>).
|
||||
Launch Syndie with the icon, or with
|
||||
"<code>java -jar bin/syndie.exe</code>".</li>
|
||||
<li><a href="dist/syndie-0.920a.bin.nodeps.exe">Any platform - syndie-0.920a.bin.nodeps.exe</a>
|
||||
(<a href="dist/syndie-0.920a.bin.nodeps.exe.sig">GPG signature</a>) - 2.1MB<br />
|
||||
does not include <a href="http://eclipse.org/swt/">SWT</a> or
|
||||
<a href="http://www.hsqldb.org/">HSQLDB</a>, so <b>only use this if
|
||||
upgrading</b> or can otherwise arrange to have <code>swt.jar</code> and
|
||||
<code>hsqldb.jar</code> in your Syndie <code>lib/</code> directory.</li>
|
||||
<li><a href="dist/syndie-0.920a.bin.zip">Headless - syndie-0.920a.bin.zip</a>
|
||||
(<a href="dist/syndie-0.920a.bin.zip.sig">GPG signature</a>) - 2.2MB<br />
|
||||
This unzips into <code>./syndie-0.920a</code> and does not create any
|
||||
desktop or start menu shortcuts, but can be used on computers without a
|
||||
graphical interface.<br />
|
||||
To run Syndie without a GUI, launch it as above, but with the parameter
|
||||
<code>--cli</code>.</li>
|
||||
<li>Prerequisites:
|
||||
<a href="http://java.sun.com/javase/downloads/index.jsp">jre1.4+</a>,
|
||||
<a href="http://gcc.gnu.org/java/">GCJ/GIJ 4.0+</a>, or
|
||||
<a href="http://www.kaffe.org/">Kaffe 1.1.7+</a>
|
||||
(other JVMs may suffice)</li>
|
||||
</ul>
|
||||
|
||||
<h4>Source:</h4>
|
||||
<ul>
|
||||
<li><a href="dist/syndie-0.920a.src.tar.bz2">syndie-0.920a.src.tar.bz2</a>
|
||||
(<a href="dist/syndie-0.920a.src.tar.bz2.sig">GPG signature</a>) - 1.2MB</li>
|
||||
<li><a href="dist/syndie-0.920a.src.nodeps.tar.bz2">syndie-0.920a.src.nodeps.tar.bz2</a>
|
||||
(<a href="dist/syndie-0.920a.src.nodeps.tar.bz2.sig">GPG signature</a>) - 0.5MB</li>
|
||||
<li>Download and extract the archive, then read the INSTALL file</li>
|
||||
<li>Prerequisites:
|
||||
<a href="http://ant.apache.org/">ant 1.6.5</a>,
|
||||
<a href="http://java.sun.com/javase/downloads/index.jsp">jdk1.4+</a>/
|
||||
<a href="http://gcc.gnu.org/java/">GCJ/GIJ 4.0+</a>/ or
|
||||
<a href="http://www.kaffe.org/">Kaffe 1.1.7+</a>
|
||||
(other JDKs may suffice),
|
||||
<a href="http://www.eclipse.org/swt/">SWT 3.2+</a> (3.3M4 or newer includes
|
||||
useful features),
|
||||
<a href="http://www.hsqldb.org/">HSQLDB 1.8.0.7+</a> (older releases may
|
||||
work)</li>
|
||||
</ul>
|
||||
|
||||
<p>Older releases are <a href="dist/">archived</a></p>
|
||||
|
||||
<!--
|
||||
Gentoo:<ul>
|
||||
<li><code>emerge syndie</code></li>
|
||||
|
||||
Debian:<ul>
|
||||
<li><code>apt-get syndie</code></li>
|
||||
-->
|
||||
|
||||
<p>The GPG public key used to sign the distributed files is <code>393F2DF9</code> (fingerprint <code>AE89 D080 0E85 72F0 B777 B2ED C2FA 68C0 393F 2DF9</code>)</p>
|
||||
|
||||
<h4>Unreleased development source:</h4>
|
||||
<ul>
|
||||
<li>A public <a href="http://venge.net/monotone/">monotone</a> repository of the
|
||||
syndie code is available on the netsync server <code>mtn.i2p.net</code>
|
||||
in the <code>syndie</code> branch.<br />
|
||||
<i>Not familiar with monotone? See this <a href="monotone_howto.html">howto</a></i></li>
|
||||
<li>Developers are granted write permission to that repository, and everyone
|
||||
is granted read permission.</li>
|
||||
<li>The list of authorized committers can be found in the mtn-committers
|
||||
file, which includes their monotone public keys, ready to be imported
|
||||
with <code>cat mtn-committers | monotone read</code>. That file can be
|
||||
verified against the above GPG public key with
|
||||
<code>gpg --verify mtn-committers.sig</code>.</li>
|
||||
</ul>
|
||||
|
||||
<p><b>To upgrade or reinstall</b>, simply install Syndie again on top of itself.
|
||||
Upgrading or reinstalling does not affect your content or keys, just the
|
||||
software. To completely wipe any old data, identities, or keys, delete the
|
||||
<code>$HOME/.syndie</code> directory.</p>
|
||||
|
||||
<p><b>To uninstall</b>, if you used the installer and created desktop icons or
|
||||
start menu shortcuts, simply launch the included uninstaller. Otherwise, just
|
||||
remove the directory you installed Syndie into (e.g. <code>$HOME/syndie</code> or
|
||||
<code>C:\Documents and Settings\User\syndie</code>).</p>
|
||||
|
||||
<p>The Syndie content is stored in <code>$HOME/.syndie</code> or
|
||||
<code>%HOME%\.syndie</code> by default, so you should delete that directory as
|
||||
well if you want to remove the content (and private keys!). To use another
|
||||
location (or to run multiple instances at once), simply pass another root
|
||||
directory on the command line (e.g. <code>syndie.exe C:\nym1</code>)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
||||
<title>Syndie - download</title>
|
||||
<link rel="stylesheet" href="style.css" type="text/css" title="normal" media="screen" />
|
||||
</head>
|
||||
<body>
|
||||
<div style="display: none"><a href="#Content" title="Skip navigation" accesskey="2">Skip navigation</a></div>
|
||||
<div id="Header">
|
||||
<a href="index.html" title="Syndie">Syndie</a><i> - distributed forums</i>
|
||||
</div>
|
||||
<div id="Menu">
|
||||
<a href="index.html" title="Home">Home</a><br />
|
||||
<a href="download.html" title="Download Syndie">Download</a><br />
|
||||
<a href="features.html" title="Syndie Features">Features</a><br />
|
||||
<a href="usecases.html" title="Use cases">Use cases</a><br />
|
||||
<a href="faq.html" title="Frequently Asked Questions">Faq</a><br />
|
||||
<a href="roadmap.html" title="Roadmap">Roadmap</a><br />
|
||||
<a href="dev.html" title="Developers">Developers</a><br />
|
||||
<a href="manual.html" title="">Manual</a><br />
|
||||
<a href="donate.html" title="Help Syndie">Donate</a><br />
|
||||
<a href="related.html" title="Related projects">Related projects</a><br />
|
||||
<a href="about.html" title="About Syndie">About</a><br />
|
||||
<hr />
|
||||
<a href="http://forum.i2p.net/viewforum.php?f=29">Forum</a>
|
||||
</div>
|
||||
<div id="Content">
|
||||
<h1>Download</h1>
|
||||
<!--
|
||||
Windows binaries:<ul>
|
||||
<li><a href="http://syndie.i2p.net/dist/syndie-0.917b.win.exe">syndie-0.917b.win.exe</a>
|
||||
(<a href="http://syndie.i2p.net/dist/syndie-0.917b.win.exe.sig">GPG signature</a>) <b>[note: does not yet exist]</b></li>
|
||||
<li>Download and run the executable installer.</li>
|
||||
<li>Prerequisites: None</li>
|
||||
</ul>
|
||||
-->
|
||||
|
||||
<h4>Standalone installers: <font size="-3">grab <i>one</i></font></h3>
|
||||
<ul>
|
||||
<li><b><a href="dist/syndie-0.920a.bin.win32.exe">Windows - syndie-0.920a.bin.win32.exe</a></b>
|
||||
(<a href="dist/syndie-0.920a.bin.win32.exe.sig">GPG signature</a>) - 4.4MB<br />
|
||||
Download and run the installer. Launch Syndie with the desktop or start
|
||||
menu icons, or with <code>syndie.exe</code></li>
|
||||
<li><b><a href="dist/syndie-0.920a.bin.linux32.exe">Linux - syndie-0.920a.bin.linux32.exe</a></b>
|
||||
(<a href="dist/syndie-0.920a.bin.linux32.exe.sig">GPG signature</a>) - 4.3MB<br />
|
||||
Download and run the installer via
|
||||
"<code>java -jar syndie-0.920a.bin.linux32.exe</code>" (<i>yes, really</i>).
|
||||
Launch Syndie with the desktop or KDE menu icons, or with
|
||||
"<code>java -jar bin/syndie.exe</code>".</li>
|
||||
<li><b><a href="dist/syndie-0.920a.bin.osx.exe">OSX - syndie-0.920a.bin.osx.exe</a></b>
|
||||
(<a href="dist/syndie-0.920a.bin.osx.exe.sig">GPG signature</a>) - 4.4MB<br />
|
||||
Download and run the installer via
|
||||
"<code>java -jar syndie-0.920a.bin.osx.exe</code>" (<i>yes, really</i>).
|
||||
Launch Syndie with the icon, or with
|
||||
"<code>java -jar bin/syndie.exe</code>".</li>
|
||||
<li><a href="dist/syndie-0.920a.bin.nodeps.exe">Any platform (new install) - syndie-0.920a.bin.nodeps.exe</a>
|
||||
(<a href="dist/syndie-0.920a.bin.nodeps.exe.sig">GPG signature</a>) - 2.1MB<br />
|
||||
does not include <a href="http://eclipse.org/swt/">SWT</a> or
|
||||
<a href="http://www.hsqldb.org/">HSQLDB</a>, so only use this if
|
||||
you can arrange to have <code>swt.jar</code> and
|
||||
<code>hsqldb.jar</code> in your Syndie <code>lib/</code> directory.</li>
|
||||
<li><a href="dist/syndie-0.920a.bin.jar-only.zip">Any platform (upgrade) - syndie-0.920a.bin.jar-only.zip</a>
|
||||
(<a href="dist/syndie-0.920a.bin.jar-only.zip.sig">GPG signature</a>) - 1.5MB<br />
|
||||
Extracts ./lib/syndie.jar to replace an earlier syndie.jar. This should be <b>used for upgrades</b>.</li>
|
||||
<li><a href="dist/syndie-0.920a.bin.zip">Text only - syndie-0.920a.bin.zip</a>
|
||||
(<a href="dist/syndie-0.920a.bin.zip.sig">GPG signature</a>) - 2.2MB<br />
|
||||
This unzips into <code>./syndie-0.920a</code> and does not create any
|
||||
desktop or start menu shortcuts, but can be used on computers without a
|
||||
graphical interface.<br />
|
||||
To run Syndie without a GUI, launch it as above, but with the parameter
|
||||
<code>--cli</code>.</li>
|
||||
<li>Prerequisites:
|
||||
<a href="http://java.sun.com/javase/downloads/index.jsp">jre1.4+</a>,
|
||||
<a href="http://gcc.gnu.org/java/">GCJ/GIJ 4.0+</a>, or
|
||||
<a href="http://www.kaffe.org/">Kaffe 1.1.7+</a>
|
||||
(other JVMs may suffice)</li>
|
||||
</ul>
|
||||
|
||||
<h4>Source:</h4>
|
||||
<ul>
|
||||
<li><a href="dist/syndie-0.920a.src.tar.bz2">syndie-0.920a.src.tar.bz2</a>
|
||||
(<a href="dist/syndie-0.920a.src.tar.bz2.sig">GPG signature</a>) - 1.2MB</li>
|
||||
<li><a href="dist/syndie-0.920a.src.nodeps.tar.bz2">syndie-0.920a.src.nodeps.tar.bz2</a>
|
||||
(<a href="dist/syndie-0.920a.src.nodeps.tar.bz2.sig">GPG signature</a>) - 0.5MB</li>
|
||||
<li>Download and extract the archive, then read the INSTALL file</li>
|
||||
<li>Prerequisites:
|
||||
<a href="http://ant.apache.org/">ant 1.6.5</a>,
|
||||
<a href="http://java.sun.com/javase/downloads/index.jsp">jdk1.4+</a>/
|
||||
<a href="http://gcc.gnu.org/java/">GCJ/GIJ 4.0+</a>/ or
|
||||
<a href="http://www.kaffe.org/">Kaffe 1.1.7+</a>
|
||||
(other JDKs may suffice),
|
||||
<a href="http://www.eclipse.org/swt/">SWT 3.2+</a> (3.3M4 or newer includes
|
||||
useful features),
|
||||
<a href="http://www.hsqldb.org/">HSQLDB 1.8.0.7+</a> (older releases may
|
||||
work)</li>
|
||||
</ul>
|
||||
|
||||
<p>Older releases are <a href="dist/">archived</a></p>
|
||||
|
||||
<!--
|
||||
Gentoo:<ul>
|
||||
<li><code>emerge syndie</code></li>
|
||||
|
||||
Debian:<ul>
|
||||
<li><code>apt-get syndie</code></li>
|
||||
-->
|
||||
|
||||
<p>The GPG public key used to sign the distributed files is <code>393F2DF9</code> (fingerprint <code>AE89 D080 0E85 72F0 B777 B2ED C2FA 68C0 393F 2DF9</code>)</p>
|
||||
|
||||
<h4>Unreleased development source:</h4>
|
||||
<ul>
|
||||
<li>A public <a href="http://venge.net/monotone/">monotone</a> repository of the
|
||||
syndie code is available on the netsync server <code>mtn.i2p.net</code>
|
||||
in the <code>syndie</code> branch.<br />
|
||||
<i>Not familiar with monotone? See this <a href="monotone_howto.html">howto</a></i></li>
|
||||
<li>Developers are granted write permission to that repository, and everyone
|
||||
is granted read permission.</li>
|
||||
<li>The list of authorized committers can be found in the mtn-committers
|
||||
file, which includes their monotone public keys, ready to be imported
|
||||
with <code>cat mtn-committers | monotone read</code>. That file can be
|
||||
verified against the above GPG public key with
|
||||
<code>gpg --verify mtn-committers.sig</code>.</li>
|
||||
</ul>
|
||||
|
||||
<p><b>To upgrade or reinstall</b>, simply install Syndie again on top of itself.
|
||||
Upgrading or reinstalling does not affect your content or keys, just the
|
||||
software. To completely wipe any old data, identities, or keys, delete the
|
||||
<code>$HOME/.syndie</code> directory.</p>
|
||||
|
||||
<p><b>To uninstall</b>, if you used the installer and created desktop icons or
|
||||
start menu shortcuts, simply launch the included uninstaller. Otherwise, just
|
||||
remove the directory you installed Syndie into (e.g. <code>$HOME/syndie</code> or
|
||||
<code>C:\Documents and Settings\User\syndie</code>).</p>
|
||||
|
||||
<p>The Syndie content is stored in <code>$HOME/.syndie</code> or
|
||||
<code>%HOME%\.syndie</code> by default, so you should delete that directory as
|
||||
well if you want to remove the content (and private keys!). To use another
|
||||
location (or to run multiple instances at once), simply pass another root
|
||||
directory on the command line (e.g. <code>syndie.exe C:\nym1</code>)</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -323,7 +323,13 @@ public class SyndieURI {
|
||||
public String getType() { return _type; }
|
||||
public Map getAttributes() { return _attributes; }
|
||||
|
||||
public String getString(String key) { return (String)_attributes.get(key); }
|
||||
public String getString(String key) {
|
||||
Object o = _attributes.get(key);
|
||||
if (o == null)
|
||||
return null;
|
||||
else
|
||||
return o.toString();
|
||||
}
|
||||
public Long getLong(String key) { return (Long)_attributes.get(key); }
|
||||
public String[] getStringArray(String key) { return (String[])_attributes.get(key); }
|
||||
public boolean getBoolean(String key, boolean defaultVal) {
|
||||
|
@ -92,8 +92,6 @@ class SyndicateMenu implements TextEngine.Menu {
|
||||
processListBan(client, ui, opts);
|
||||
} else if ("unban".equalsIgnoreCase(cmd)) {
|
||||
processUnban(client, ui, opts);
|
||||
} else if ("buildsharedindex".equalsIgnoreCase(cmd)) {
|
||||
processBuildSharedIndex(client, ui, opts);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@ -628,29 +626,4 @@ class SyndicateMenu implements TextEngine.Menu {
|
||||
SyndicationManager.buildIndex(client, ui); //, maxSize);
|
||||
ui.commandComplete(0, null);
|
||||
}
|
||||
private void processBuildSharedIndex(DBClient client, UI ui, Opts opts) {
|
||||
SharedArchiveBuilder builder = new SharedArchiveBuilder(client, ui);
|
||||
SharedArchive archive = builder.buildSharedArchive();
|
||||
String orig = archive.toString();
|
||||
ui.statusMessage("shared archive built: \n" + orig);
|
||||
/*
|
||||
try {
|
||||
File tmp = File.createTempFile("shared", "dat", client.getTempDir());
|
||||
FileOutputStream fos = new FileOutputStream(tmp);
|
||||
archive.write(fos);
|
||||
fos.close();
|
||||
FileInputStream fis = new FileInputStream(tmp);
|
||||
SharedArchive loaded = new SharedArchive();
|
||||
loaded.read(fis);
|
||||
String reload = loaded.toString();
|
||||
if (reload.equals(orig))
|
||||
ui.statusMessage("Persistance is roundtrip");
|
||||
else
|
||||
ui.errorMessage("Persistance fails. reloaded:\n" + reload);
|
||||
} catch (Exception e) {
|
||||
ui.errorMessage("error persisting", e);
|
||||
}
|
||||
*/
|
||||
ui.commandComplete(0, null);
|
||||
}
|
||||
}
|
||||
|
@ -1088,7 +1088,14 @@ public class ThreadAccumulatorJWZ extends ThreadAccumulator {
|
||||
TreeSet sorted = new TreeSet(_sortOrderAscending ? ASCENDING_COMPARATOR : DESCENDING_COMPARATOR);
|
||||
HashMap keyToNode = new HashMap();
|
||||
for (int i = 0; i < peers.length; i++) {
|
||||
long when = peers[i].getLatestMessageId();
|
||||
long when = -1;
|
||||
if (_earliestReceiveDate > 0) {
|
||||
// we are filtering by import date, not post date
|
||||
when = peers[i].getLatestImportDate();
|
||||
} else {
|
||||
// filtering by post date, not import date
|
||||
when = peers[i].getLatestMessageId();
|
||||
}
|
||||
while (keyToNode.containsKey(new Long(when)))
|
||||
when++;
|
||||
keyToNode.put(new Long(when), peers[i]);
|
||||
@ -1390,6 +1397,7 @@ public class ThreadAccumulatorJWZ extends ThreadAccumulator {
|
||||
private long _targetChannelId;
|
||||
private boolean _dummy;
|
||||
private ThreadMsgId _msg;
|
||||
private long _importDate;
|
||||
public ThreadReferenceNode(ThreadMsgId id) {
|
||||
super(null, null, null, null);
|
||||
_msg = id;
|
||||
@ -1397,6 +1405,7 @@ public class ThreadAccumulatorJWZ extends ThreadAccumulator {
|
||||
_subject = null;
|
||||
_targetChannelId = -1;
|
||||
_dummy = false;
|
||||
_importDate = -1;
|
||||
}
|
||||
public ThreadMsgId getMsgId() { return _msg; }
|
||||
public void setAuthorId(long authorId) { _authorId = authorId; }
|
||||
@ -1434,6 +1443,14 @@ public class ThreadAccumulatorJWZ extends ThreadAccumulator {
|
||||
latestMessageId = Math.max(latestMessageId, ((ThreadReferenceNode)getChild(i)).getLatestMessageId());
|
||||
return latestMessageId;
|
||||
}
|
||||
public long getLatestImportDate() {
|
||||
long latest = _importDate;
|
||||
if (!isDummy() && (_msg != null) && (_msg.msgId >= 0) && (latest < 0))
|
||||
latest = _importDate = _client.getMessageImportDate(_msg.msgId);
|
||||
for (int i = 0; i < getChildCount(); i++)
|
||||
latest = Math.max(latest, ((ThreadReferenceNode)getChild(i)).getLatestImportDate());
|
||||
return latest;
|
||||
}
|
||||
public long getLatestAuthorId() { return getLatestAuthorId(getLatestMessageId()); }
|
||||
private long getLatestAuthorId(long latestMessageId) {
|
||||
SyndieURI uri = getURI();
|
||||
|
@ -264,6 +264,7 @@ public class HighlightView implements Themeable, Translatable, SyndicationManage
|
||||
if (items != null) for (int i = 0; i < items.length; i++) items[i].dispose();
|
||||
|
||||
SyndicationManager mgr = _browser.getSyndicationManager();
|
||||
mgr.loadArchives();
|
||||
int archives = mgr.getArchiveCount();
|
||||
_browser.getUI().debugMessage("known archives: " + archives);
|
||||
int scheduled = 0;
|
||||
|
@ -215,6 +215,7 @@ public class MessageTree implements Translatable, Themeable {
|
||||
private MenuItem _advancedPrivacyAuthorized;
|
||||
private MenuItem _advancedPrivacyPBE;
|
||||
private MenuItem _advancedPrivacyPrivate;
|
||||
private MenuItem _advancedDateImport;
|
||||
private MenuItem _advancedThreadResults;
|
||||
private MenuItem _advancedPassphraseRequired;
|
||||
private ReferenceChooserPopup _forumChooser;
|
||||
@ -308,6 +309,8 @@ public class MessageTree implements Translatable, Themeable {
|
||||
new MenuItem(_advancedMenu, SWT.SEPARATOR);
|
||||
_advancedThreadResults = new MenuItem(_advancedMenu, SWT.CHECK);
|
||||
new MenuItem(_advancedMenu, SWT.SEPARATOR);
|
||||
_advancedDateImport = new MenuItem(_advancedMenu, SWT.CHECK);
|
||||
new MenuItem(_advancedMenu, SWT.SEPARATOR);
|
||||
_advancedPassphraseRequired = new MenuItem(_advancedMenu, SWT.CHECK);
|
||||
|
||||
_advancedScopeAll.setSelection(true);
|
||||
@ -316,6 +319,7 @@ public class MessageTree implements Translatable, Themeable {
|
||||
_advancedPrivacyPBE.setSelection(true);
|
||||
_advancedPrivacyPrivate.setSelection(true);
|
||||
_advancedThreadResults.setSelection(true);
|
||||
_advancedDateImport.setSelection(true);
|
||||
|
||||
SelectionListener lsnr = new SelectionListener() {
|
||||
public void widgetDefaultSelected(SelectionEvent selectionEvent) { _msgTree.applyFilter(); }
|
||||
@ -329,6 +333,7 @@ public class MessageTree implements Translatable, Themeable {
|
||||
_advancedPrivacyPBE.addSelectionListener(lsnr);
|
||||
_advancedPrivacyPrivate.addSelectionListener(lsnr);
|
||||
_advancedThreadResults.addSelectionListener(lsnr);
|
||||
_advancedDateImport.addSelectionListener(lsnr);
|
||||
|
||||
_advancedPassphraseRequired.addSelectionListener(new SelectionListener() {
|
||||
public void widgetDefaultSelected(SelectionEvent evt) {
|
||||
@ -532,8 +537,13 @@ public class MessageTree implements Translatable, Themeable {
|
||||
days = 1;
|
||||
break;
|
||||
}
|
||||
attributes.put("age", new Integer(days));
|
||||
attributes.put("agelocal", new Integer(days));
|
||||
if (_advancedDateImport.getSelection()) {
|
||||
attributes.put("agelocal", new Integer(days));
|
||||
attributes.remove("age");
|
||||
} else {
|
||||
attributes.put("age", new Integer(days));
|
||||
attributes.remove("agelocal");
|
||||
}
|
||||
|
||||
String tag = _filterTag.getText().trim();
|
||||
if ( (_filterTag.getSelectionIndex() == 0) ||
|
||||
@ -677,6 +687,7 @@ public class MessageTree implements Translatable, Themeable {
|
||||
_advancedPrivacyAuthorized.setText(registry.getText(T_ADVANCED_PRIVACY_AUTHORIZED, "Readable by: authorized readers"));
|
||||
_advancedPrivacyPBE.setText(registry.getText(T_ADVANCED_PRIVACY_PBE, "Readable by: those with a passphrase"));
|
||||
_advancedPrivacyPrivate.setText(registry.getText(T_ADVANCED_PRIVACY_PRIVATE, "Readable by: forum administrators"));
|
||||
_advancedDateImport.setText(registry.getText(T_ADVANCED_DATEIMPORT, "Use local import date instead of (unreliable) message creation date"));
|
||||
_advancedThreadResults.setText(registry.getText(T_ADVANCED_THREAD, "Organize results in threads"));
|
||||
_advancedPassphraseRequired.setText(registry.getText(T_ADVANCED_PASSPHRASE_REQUIRED, "Messages requiring a new passphrase"));
|
||||
|
||||
@ -986,15 +997,9 @@ public class MessageTree implements Translatable, Themeable {
|
||||
acc.setSort(sort, _currentSortDirection == SWT.UP);
|
||||
_browser.getUI().debugMessage("gathering the threads");
|
||||
acc.gatherThreads();
|
||||
// now sort it...
|
||||
_browser.getUI().debugMessage("sorting the threads");
|
||||
List threads = new ArrayList();
|
||||
for (int i = 0; i < acc.getThreadCount(); i++)
|
||||
threads.add(acc.getRootThread(i));
|
||||
|
||||
// now sort...
|
||||
// (or not...)
|
||||
|
||||
return threads;
|
||||
}
|
||||
|
||||
@ -1155,9 +1160,16 @@ public class MessageTree implements Translatable, Themeable {
|
||||
//_tags.add(tag);
|
||||
}
|
||||
tags = buf.toString().trim();
|
||||
date = Constants.getDate(uri.getMessageId().longValue());
|
||||
item.setGrayed(false);
|
||||
|
||||
long importDate = _client.getMessageImportDate(msgId);
|
||||
long postDate = uri.getMessageId().longValue();
|
||||
if ( (_appliedFilter == null) || (_appliedFilter.getString("agelocal") != null) ) {
|
||||
date = Constants.getDate(importDate);
|
||||
_browser.getUI().debugMessage("using local import date for " + msgId + ": " + date + " (instead of " + Constants.getDate(postDate) + ")");
|
||||
} else {
|
||||
date = Constants.getDate(postDate);
|
||||
_browser.getUI().debugMessage("using post date for " + msgId + ": " + date + " (instead of " + Constants.getDate(importDate) + ")");
|
||||
}
|
||||
status = _client.getMessageStatus(_client.getLoggedInNymId(), msgId, targetChanId);
|
||||
} else {
|
||||
// message is not locally known
|
||||
@ -1210,8 +1222,8 @@ public class MessageTree implements Translatable, Themeable {
|
||||
}
|
||||
|
||||
private void resizeCols() {
|
||||
int total = _tree.getClientArea().width - _colType.getWidth();
|
||||
int dateWidth = ImageUtil.getWidth("0000/00/00 ", _tree) + _tree.getGridLineWidth()*2;
|
||||
int dateWidth = ImageUtil.getWidth("0000/00/00XXXXXXXX", _tree) + _tree.getGridLineWidth()*2;
|
||||
int total = _tree.getClientArea().width - _colType.getWidth() - dateWidth;
|
||||
int subjWidth = total / 3;
|
||||
|
||||
int chanWidth = total / 5;
|
||||
@ -1376,6 +1388,7 @@ public class MessageTree implements Translatable, Themeable {
|
||||
private static final String T_ADVANCED_PRIVACY_AUTHORIZED = "syndie.gui.messagetree.filteradvanced.priv.auth";
|
||||
private static final String T_ADVANCED_PRIVACY_PBE = "syndie.gui.messagetree.filteradvanced.priv.pbe";
|
||||
private static final String T_ADVANCED_PRIVACY_PRIVATE = "syndie.gui.messagetree.filteradvanced.priv.private";
|
||||
private static final String T_ADVANCED_DATEIMPORT = "syndie.gui.messagetree.filteradvanced.dateimport";
|
||||
private static final String T_ADVANCED_THREAD = "syndie.gui.messagetree.filteradvanced.thread";
|
||||
private static final String T_ADVANCED_PASSPHRASE_REQUIRED = "syndie.gui.messagetree.filteradvanced.passrequired";
|
||||
|
||||
|
@ -236,7 +236,8 @@ public class MessageView implements Translatable, Themeable {
|
||||
_headerAuthorAction.setVisible(showAuthor);
|
||||
|
||||
String date = Constants.getDate(msg.getMessageId());
|
||||
_headerDate.setText(date);
|
||||
String impDate = Constants.getDate(_client.getMessageImportDate(msg.getInternalId()));
|
||||
_headerDate.setText(date + " [" + impDate + "]");
|
||||
|
||||
Set tags = new TreeSet(msg.getPublicTags());
|
||||
tags.addAll(msg.getPrivateTags());
|
||||
|
Reference in New Issue
Block a user