Initial commit. Works, more or less.
Add really minimal README and LICENSE.
Move search parsing to separate function.
Support for excluded tags ("-tag") and adding to searches using subdirs.
Make cache evict searches after 30 seconds.
Use sets instead of arrays to build searches.

This way, duplicate tags and tag order don't influence the resulting
search, making the cache more efficient.
Expose freedesktop-style thumbnails in .thumblocal.
[LICENSE] Update for new year.
Track dbclient change to search_post.
Allow sorted searches, handle all the magic to make .thumblocal work.
Export settings in .wellpapprc in FS.
Export tags in (geeqie specific) .metadata/IMAGE.gq.xmp file.

This is viewable in the keywords section of geeqie, which is convenient.
Also export rotation in geeqie metadata file.
Add support for R:from:to for ranges of results.
Seems some versions of py-fuse want keep_cache and direct_io attrs on FHs.
Fix (remove) threading.

I've been running it with -s, which works fine, but without it you can get
both a broken cache object (seems to happen in practice) and problems with
one thread reading a dbclient response meant for another (doesn't seem to
happen in practice).

If someone actually cares about threads they have to wrap the cache in a
lock (trivial), and either wrap dbclient in a lock (and lose pretty much
all the benefit of threads I think) or give each thread its own dbclient.
Since we don't want to make too many, that would actually mean keeping a
pool of dbclients (maybe 3) that threads can check out for use when they
need one. I can't imagine it's worth the effort.
Track dbclient change of search_post.
Don't try (and fail) to include default values in the generated cfg.
Make generated cfg without treating cfg as something other than dict.

This broke when I changed DotDict, and there's no reason to be stupid anyway.
Also, sorting the lines makes the generated file much less ugly to look at.
When I'm poking around anyway, change cache ttl handling.

Cleanup only runs if ttl seconds have passed since last time. Checking if
things are older than now - ttl makes whatever caused the cleanup to run
last time to most likely stick around. Seems better to be a little more
aggressive.