about summary refs log tree commit homepage
path: root/lib/PublicInbox/Feed.pm
DateCommit message (Collapse)
2016-03-05feed: remove unnecessary encoding lookup
We handle encoding-related things elsewhere.
2016-03-03use raw header for Message-ID
Message-IDs should not be MIME encoded, but in case they are, use the raw form for compatibility with ssoma and possibly other tools. This prevents a potential problem where a malicious client could confuse our storage layer into indexing incorrect contents.
2016-02-28reduce calls to close unless error checks are needed
We can rely on timely auto-destruction based on reference counting; reducing the chance of redundant close(2) calls which may hit the wront FD. We do care about certain close calls (e.g. writing to a buffered IO handle) if we require error-checking for write-integrity. In other cases, let things go out-of-scope so it can be freed automatically after use.
2016-02-25remove direct CGI.pm support
Relying on Plack::Handler::CGI is much easier for long-term maintenance and development. Nowadays, we even include our own httpd implementation to facilitate easier deployment with PSGI/Plack.
2016-02-13feed: favor relative URL to Atom feed in HTML
Normal browsers should understand relative path names. Atom feeds may be hosted externally and seems to need full URLs.
2016-02-08feed: declare alternate link to HTML interface
It seems we need to declare "alternate" and "text/html" at least for feed readers.
2016-01-03www: comments for denoting Plack::Request vs CGI
We'll probably want to continue supporting CGI for mod_perl compatibility.
2015-12-26use "Atom feed" consistently in headers/footers
While having the extra " feed" is noisy in the main topic landing page, it is useful in headers/footers which have plenty of space to be more descriptive.
2015-12-25view: 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.
2015-12-22rename 'GitCatFile' package to 'Git'
We'll be using it for more than just cat-file. Adding a `popen' API for internal use allows us to save a bunch of code in other places.
2015-12-22hval: move PRE constant for wrapping UGC here
User-generated content (UGC) may have excessively long lines which screw up rendering. This is the only bit of CSS we use.
2015-11-20various internal documentation updates
Hopefully this gives new hackers a better overview of how the components relate to each other.
2015-11-18feed: capitalize "Atom" consistently
This is the official name of the spec, so refer to it as such despite the file extension being lower-cased
2015-09-13searchview: implement Atom feed for search results
This can be helpful for folks who want to subscribe to a particular topic or keyword.
2015-09-13feed: consolidate updated tag generation
We'll be reusing this code further in the next commit.
2015-09-06update copyright headers and email addresses
In the future, it should be possible to use this: git ls-files | UPDATE_COPYRIGHT_HOLDER='all contributors' \ UPDATE_COPYRIGHT_USE_INTERVALS=2 \ xargs /path/to/gnulib/build-aux/update-copyright
2015-09-05view: preliminary HTML search interface
This hopefully makes it easier to find things without resorting to proprietary external services.
2015-09-04index: use message threading if search is available
This lets us merge topics with different subjects with a common parent (common in "[PATCH 0/X]" threads). This also lets us avoid forking for the HTML index page, too.
2015-09-03feed: use application/atom+xml for Content-Type
This is the correct Content-Type for Atom feeds, especially since we updated to use ".atom" as the suffix.
2015-09-03get rid of Message-ID compression entirely
Provide a fallback for legacy SHA-1 messages, but do not advertise shorter URLs anymore for data portability concerns. This fixes a regression introduced in commit 81a9c1b476987d845b340ab9013d26cf4487cb9a ("search: disable Message-ID compression in Xapian") which ended up breaking thread-related endpoints for large Message-IDs, as lookups on the SHA-1 message no longer worked.
2015-09-01feed: extra newline after nav footer if list footer exists
It makes sense to distinguish the two a little.
2015-09-01feed: fix <updated> tag in Atom feed
Fixes commit d44ed46ee92c78aaaed64975c4d6846613963be4 ("implement per-thread Atom feeds")
2015-09-01completely revamp URL structure to shorten permalinks
This allows common /m/ links to be used without a prefix, saving 2 precious bytes for permalinks and raw messages. Old URLs continue to redirect.
2015-09-01www: root atom feed is "new.atom" and not "atom.xml"
The MIME type entry for Atom feed relies on "atom", so allow properly-configured static file servers to serve it with the correct Content-Type header.
2015-09-01implement per-thread Atom feeds
This allows users to subscribe to only a single thread with their feed reader without subscribing to the rest of the thread. Update our endpoint notes while we're at it.
2015-09-01feed: extract atom header generation
We'll be using it for per-thread subscriptions
2015-09-01feed: use updated date based on git commit date
This will hopefully make life easier for feed readers.
2015-08-29avoid length in boolean context
Perl does not currently optimize for this. ref (from p5p): http://mid.gmane.org/D5C27970-9176-4C7A-8B99-7D78360E67A2@pobox.com
2015-08-27wire up to display non-suffixed Message-ID links
These URLs are preferable in case somebody decides to get cute and use a suffix we would've used to prevent others from linking to their message. The common /m/$MESSAGE_ID/ URLs are now 4 characters shorter so may fit better on terminals.
2015-08-25feed: fix "created" vs "updated" diff in topics
This fixes a regression introduced in commit 72c0f7c71ff28de9755dc4aee8b6ce6f0e4f2ed7 (feed: merge subjects regardless of "[PATCH vN]")
2015-08-25feed: merge subjects regardless of "[PATCH vN]"
This normalizes rerolled patches with identical topics, but does not normalize different patches even if they are in the same thread (for now).
2015-08-25mid: mid_compressed => mid_compress
Consistently name mid_* functions as verbs.
2015-08-24view: refactor $state as a hash
Using hash means we no longer have to document and remember what every field does. The original array form was insane premature optimization and crazy. Who wrote that? Oh wait, I was on drugs :<
2015-08-23cleanup Email::Address usage
Email::Address::name never fails assuming it was able to parse anything.
2015-08-23feed: r= parameter supports "HEAD" as a revision
public-inbox git repositories require a "HEAD" ref to function correctly anyways.
2015-08-22remove XML::Atom::SimpleFeed dependency
We will attempt to generate Atom feeds "by hand" as the XML::Atom::SimpleFeed API does not support streaming output. Since email is large and servers are small, this should prevent wasting memory when we generate larger feeds. Of course, we hope clients use SAX parsers capable of handling large streams without slurping.
2015-08-22stream HTML views as much as possible
This should allow progressive rendering on the client and reduce memory usage on the server. Unfortunately XML::Atom::SimpleFeed does not yet support streaming, so we may not use it in the future.
2015-08-20feed: fix extra, unnecessary quote
Oops!
2015-08-20avoid using header_raw for Message-ID retrieval
This is for consistency with ssoma. I doubt it makes a difference in practice, but in case somebody decides any of the Message-ID-containing headers should have strange characters, we'll decode and attempt to thread them. This isn't an attack vector, just a way to make messages thread improperly which is pointless...
2015-08-20index: layout fix + title and Atom feed links at top
Add some spacing between topics to improve readability when scanning or in case a subject gets too long. The title and Atom feed may not be highly-visible otherwise. While we're at it, use the proper "Atom feed" terminology since some folks may not understand just what "atom" means.
2015-08-20index: simplify main landing page if search-enabled
We can display /t/$MESSAGE_ID.html easily with a Xapian search index, so rely on it instead of trying to display messages inline.
2015-08-20use tables for rendering comment nesting
This is more space efficient since we don't need to place padding bytes in front of every line. While this unfortunately does not render well on lynx; w3m, links, elinks can all render tables sanely. Tables are also superior for long lines which require wrapping inside <pre> containers.
2015-08-20feed: move timestamp parsing to view
We don't need share duplicate logic across both files.
2015-08-20feed: remove threading from index
We'll be making the index smarter for people with search support enabled. Otherwise, it'll be chronological and a bit dumb. At least it'll use less memory.
2015-08-17drop bodies and messages ASAP after processing
We can rely on reference counting to lower memory usage for big messages.
2015-08-17feed: disable the generator statement
No need to waste bandwidth, here
2015-08-17www: simplify parameter passing to feed
No need to create a new hash when we can reuse the existing one more.
2015-08-17favor /t/ to /s/, since subjects may change mid-thread
/t/ always falls back to subject path searching anyways, so there's little lost besides perhaps more readable URLs. Unfortunately people still use non-compliant mail clients which fail to set In-Reply-To or References headers :<
2015-08-17feed: remove unnecesary time paramenter in index state
We no longer do "smart" time displays as of commit ea0e8649f90d1fd0850a41c0ca16642faadf4f14 ("view: simplify timestamp generation"). In retrospect, that commit also made us more cache-friendly, too.
2015-08-15thread: common sorting code
We'll be sharing the same threading, so it makes sense to sort replies using the same code and message headers without repeating ourselves. This also standardizes on sorting on X-PI-TS (Unix epoch in seconds) instead over using X-PI-Date differently in two different places