Eric Wong [Sat, 26 Dec 2015 01:14:27 +0000 (01:14 +0000)]
searchview: fix unclosed tags in threaded search results
Oops, we've had this forever and we also lacked a space
between the this was noticed while adding an extra
line between the "Search results ordered by" header
and actual messages.
Eric Wong [Sat, 26 Dec 2015 01:11:15 +0000 (01:11 +0000)]
view: reduce main landing page weight
Hopefully, "mbox.gz" is sufficiently understandabe that
we can get rid of the "title" attribute in <a> tags
(we already omitted the title in other pages).
Additionally, drop the '@' in front of the date.
The date should be obvious and is not necessary for
headers without author attribution.
Eric Wong [Fri, 25 Dec 2015 11:48:27 +0000 (11:48 +0000)]
view: favor whitespace wrap in <head>
If we bite the bullet and rely on inline CSS, we might as well
only specify it once per page instead of inline in every <pre>
tag which may handle UGC. So this actually saves us a small
amount of bandwith on most pages which have multiple <pre>
start tags.
Eric Wong [Fri, 25 Dec 2015 09:35:38 +0000 (09:35 +0000)]
view: move thread info near top of single view
Most framed mail viewing software has message ancestry
information near the top instead of bottom (mutt, gmane,
sylpheed, thunderbird) as it can help improve context.
Traditional netiquette also favors writing replies below
quoted (older) text for this reason; so move the thread
summary to the top of the message for context.
Since threads may be long, add a "skip" anchor link to jump to
the message body quickly, and align the date to the left column
so it's easier to tell the relative age of messages.
While we're at it, remove quotes from "id" attributes to
improve ease-of-grep-ability.
Eric Wong [Thu, 17 Dec 2015 05:37:31 +0000 (05:37 +0000)]
git: cat-file wrapper enhancements
The "cat_file" sub now allows a block to be passed for partial
processing. Additionally, a new "check" method is added to
retrieve only object metadata: (SHA-1 identifier, type, size)
Eric Wong [Sun, 6 Dec 2015 03:14:03 +0000 (03:14 +0000)]
view: fix message truncation logic
Avoid truncating messages if we requested the root anchor.
This regression appeared in
commit 62ee3cb36dd08f17e444e96dc80108464ee10cba
("view: do not shorten top-level messages in thread view")
Also, make the "More..." link more prominent, as readers
should be made aware they're not reading the full message.
Eric Wong [Sat, 5 Dec 2015 02:08:01 +0000 (02:08 +0000)]
*view: avoid leading zero in time display of the hour
Avoid the visual noise entirely by using a space instead.
I sometimes have difficulty distinguishing '0' from '8' while
other users may mistake it for an 'O' character. Most digital
clocks I've seen will omit displaying a leading zero for the
hour, too.
This may also save transfer time by allowing better compression
(since there is a space between the date and time anyways) and
perhaps reduce client rendering time on some displays.
We'll leave the leading zero for minutes since that seems pretty
standard for digital clocks.
Eric Wong [Wed, 18 Nov 2015 19:40:22 +0000 (19:40 +0000)]
view: further reduce size of attribution/timestamp
The "by" on the message page and "-" in the index are
unnecessary and readers should have no trouble figuring out
what the attribution/timestamp line means.
Eric Wong [Thu, 8 Oct 2015 00:49:04 +0000 (00:49 +0000)]
view: remove attribution for topics in top-level view
It clutters up the page unnecessarily, as identity of the topic
starter/updater probably doesn't matter if there's no exact
message to attribute the message to.
Eric Wong [Mon, 5 Oct 2015 04:44:28 +0000 (04:44 +0000)]
README: add OpenSSL exception
Network connections may use OpenSSL for TLS (as other libraries,
such as GNUTLS do not appear well-supported under Perl). So
give this exception in case somebody needs TLS support for NNTP.
Eric Wong [Sat, 3 Oct 2015 10:18:07 +0000 (10:18 +0000)]
mda: support a 'filter=scrub' option for external lists
For list where we are not the primary archival entry point,
defaulting to filter=scrub makes sense since their list
conventions may be more tolerant of HTML and other crap
than we are.
Eric Wong [Sat, 3 Oct 2015 10:02:33 +0000 (10:02 +0000)]
drop Message-IDs longer than 244 bytes
Xapian has this limit for terms, and there are likely no
legitimate Message-IDs (or single header lines) this long; so
there's no need to workaround this limit.
Eric Wong [Fri, 2 Oct 2015 18:35:12 +0000 (18:35 +0000)]
Msgmap: pass ReadOnly DBI flag for non-writable opens
This doesn't seem to do anything on my older system, but maybe it
will in newer or future versions of DBD::SQLite. Anyways it can
be helpful for documentation purposes, too.
Eric Wong [Thu, 1 Oct 2015 20:44:27 +0000 (20:44 +0000)]
filter: more consistent labeling of rejections
While we're at it, reject non-plain-text top-level messages,
too. They probably do not exist in practice, but we cannot
afford to scrub given policies implemented by overzealous
mail providers.
While we're at it, update the comment for strip_multipart.
Eric Wong [Thu, 1 Oct 2015 05:57:19 +0000 (05:57 +0000)]
view: correctly pick latest in index anchor links
The last message in a thread _display_ is not necessarily the
latest message in the thread. We must go by the Date: header
on the messages themselves as a best-guess. Of course Date:
headers may lie, but most mail clients trust them by default,
so we will, too.
Eric Wong [Wed, 30 Sep 2015 21:00:25 +0000 (21:00 +0000)]
nntp: implement OVER/XOVER summary in search document
The document data of a search message already contains a good chunk
of the information needed to respond to OVER/XOVER commands quickly.
Expand on that and use the document data to implement OVER/XOVER
quickly.
This adds a dependency on Xapian being available for nntpd usage,
but is probably alright since nntpd is esoteric enough that anybody
willing to run nntpd will also want search functionality offered
by Xapian.
This also speeds up XHDR/HDR with the To: and Cc: headers and
:bytes/:lines article metadata used by some clients for header
displays and marking messages as read/unread.
Eric Wong [Wed, 30 Sep 2015 21:00:20 +0000 (21:00 +0000)]
daemon: always autoflush stdout/stderr
Users may log output to a pipe, so ensure these outputs are
unbuffered in userspace and go to the operating system ASAP
for other processes to pick up.
Eric Wong [Wed, 30 Sep 2015 21:00:19 +0000 (21:00 +0000)]
remove unnecessary fields usage
It doesn't actually give performance improvements unless we
use types with "my", but we don't do that. We'll only continue
using fields with Danga::Socket-derived classes where they're
required.
Eric Wong [Fri, 25 Sep 2015 08:21:43 +0000 (08:21 +0000)]
daemon: fix various permissions + daemon issues
When using user-switching in a single process, we must be
careful to not inadvertantly create new Msgmap sqlite3 files.
We must also ensure we set proper permissions on any files
we create.
Additionally, our refactoring was broken as we failed to
actually daemonize or preserve the parent FD in a worker
process.
Finally, default to one worker process since our code may
be fatally broken and it's nice to be able to scale to multiple
cores via SIGTTIN if needed.
Eric Wong [Fri, 25 Sep 2015 02:27:57 +0000 (02:27 +0000)]
nntp: avoid signals for long responses
Using a signal-based timer can hurt throughput on a machine that's
overloaded. Ensure there's always forward progress and reduce the
number of syscalls we make, too.
Eric Wong [Thu, 24 Sep 2015 21:28:51 +0000 (21:28 +0000)]
nntpd: hoist out daemon management code
We'll probably be supporting read-only IMAP, or maybe
we'll just implement a custom HTTP server so users can
manage/upgrade the same way as the nntpd while being
immune to slow clients.
Eric Wong [Mon, 21 Sep 2015 11:11:11 +0000 (11:11 +0000)]
remove bytes:: for length checks
Apparently, my mental model of Perl internals is still incorrect
after all these years. I am but a simple *nix programmer:
everything is a bag of bytes to me.
This fixes a problem with UTF-8 headers from Xapian (via
"XHDR Subject [range]") triggering partial writes and writing an
extra newline to the outputs.
Eric Wong [Sun, 20 Sep 2015 09:34:52 +0000 (09:34 +0000)]
nntp: add "newsgroup" parameter and sort grouplist
Using non-hierarchical mailing list names for newsgroups
might confuse traditional newsreader software and perhaps
some humans. Allow administrators to configure newsgroups
names and hierarchies to their liking.
Sorting the grouplist alphabetically should probably be
done anyways to improve usability for some clients which
won't sort themselves.
Eric Wong [Sun, 20 Sep 2015 03:36:11 +0000 (03:36 +0000)]
nntp: fix handling of trickled responses
We cannot use the push_back_read functionality of Danga::Socket
since it will trigger event_read on buffered data. This would
allow a malicious (or badly implemented) client to burn CPU
without actually sending us anything.
So we still do buffering ourselves and play some tricks with
timers re-enable readability.