4 years ago0.9.3 v0.9.3
Jack Miller [Fri, 17 Jul 2015 03:41:49 +0000 (22:41 -0500)]

4 years agosync-inoreader: fix leaving dead items
Jack Miller [Fri, 17 Jul 2015 03:34:16 +0000 (22:34 -0500)]
sync-inoreader: fix leaving dead items

This case happens when an Inoreader item has some tags_to_add, but a
copy is found in canto's data. So, in addition to adding to remove_ids,
we should strip any pending tags_to_add too.

4 years agosync-rsync: don't hold feed lock while waiting on new threads
Jack Miller [Fri, 17 Jul 2015 02:22:52 +0000 (21:22 -0500)]
sync-rsync: don't hold feed lock while waiting on new threads

4 years agoFix
Jack Miller [Fri, 17 Jul 2015 01:13:41 +0000 (20:13 -0500)]

Never got updated for the new database format.

4 years ago0.9.2
Jack Miller [Tue, 14 Jul 2015 19:45:20 +0000 (14:45 -0500)]

4 years agoPer-socket r/w locks
Jack Miller [Wed, 15 Jul 2015 07:16:00 +0000 (02:16 -0500)]
Per-socket r/w locks

4 years agoRemove work_done hook
Jack Miller [Wed, 15 Jul 2015 02:27:33 +0000 (21:27 -0500)]
Remove work_done hook

- Only used for do_tag_changes

- This is better done when we actually cause changes, instead of
  potentially in the thread reaping thread, or the connection thread.

4 years agoRework get_attributes to have fewer loops
Jack Miller [Wed, 15 Jul 2015 02:27:19 +0000 (21:27 -0500)]
Rework get_attributes to have fewer loops

4 years agoOnly send an AUTOATTR response if necessary
Jack Miller [Wed, 15 Jul 2015 02:26:43 +0000 (21:26 -0500)]
Only send an AUTOATTR response if necessary

4 years agoOnly take locks for socket transforms when necessary
Jack Miller [Wed, 15 Jul 2015 02:26:20 +0000 (21:26 -0500)]
Only take locks for socket transforms when necessary

4 years agoChange hook information storage
Jack Miller [Wed, 15 Jul 2015 02:19:39 +0000 (21:19 -0500)]
Change hook information storage

- Shouldn't have to iterate through 10k possible hooks to find the ones
  with a specific key.

- Clean up as we go, to avoid having to iterate over the entire
  structure on every removal.

4 years agoDo work_done hook before causing sync()
Jack Miller [Mon, 13 Jul 2015 21:18:35 +0000 (16:18 -0500)]
Do work_done hook before causing sync()

4 years agoRework feed.index for fewer loops
Jack Miller [Mon, 13 Jul 2015 21:18:15 +0000 (16:18 -0500)]
Rework feed.index for fewer loops

4 years agoDon't reparse the config on tag.collapsed change
Jack Miller [Sun, 12 Jul 2015 01:46:47 +0000 (20:46 -0500)]
Don't reparse the config on tag.collapsed change

4 years agoPrevent duplicate watch sockets
Jack Miller [Sun, 12 Jul 2015 00:15:51 +0000 (19:15 -0500)]
Prevent duplicate watch sockets

4 years agoDon't decode fragments, only whole messages
Jack Miller [Sat, 11 Jul 2015 22:35:56 +0000 (17:35 -0500)]
Don't decode fragments, only whole messages

So we don't try to decode an incomplete character.

4 years agoFix EINTR with new fragless code
Jack Miller [Sun, 5 Jul 2015 07:16:38 +0000 (02:16 -0500)]
Fix EINTR with new fragless code

Returning used to just postpone the current fragment, now that we know
the size and have no fragments, we can just properly retry.

4 years agosync-inoreader: requests should timeout
Jack Miller [Mon, 29 Jun 2015 21:04:35 +0000 (16:04 -0500)]
sync-inoreader: requests should timeout

Apparently the standard socket timeout is ignored? Regardless,
occasionally the request seems to hang for a long period (possibly
server trouble?) and it appears to deadlock the daemon because the
feed's internal lock is being held, which halts sync operations.

4 years agoBrush up manpages
Jack Miller [Wed, 24 Jun 2015 21:11:52 +0000 (16:11 -0500)]
Brush up manpages

- XDG paths
- removed -c option
- Add canto-remote status

4 years agoXDG Support
Jack Miller [Wed, 24 Jun 2015 21:04:31 +0000 (16:04 -0500)]
XDG Support

- If it exists, will still use ~/.canto-ng

- Respects $XDG_CONFIG_HOME, but will throw everything in there (won't
  use $XDG_DATA_HOME for feeds/logs)

- canto is the directory name, not canto-ng so ~/.config/canto is likely
  the new directory

4 years agoMake sure we are using the length of the encoded string in the protocol
Jack Miller [Tue, 23 Jun 2015 17:17:43 +0000 (12:17 -0500)]
Make sure we are using the length of the encoded string in the protocol

Length of the unicode string doesn't necessarily equal the length of the
encoded string of bytes. Since we're using the len of the bytes on
receive, make sure we're giving it the len of the bytes on write as

4 years agoDon't run deferred fetch threads for dead feeds
Jack Miller [Fri, 19 Jun 2015 16:51:21 +0000 (11:51 -0500)]
Don't run deferred fetch threads for dead feeds

4 years agoInoreader sync: fixes for dupe finding
Jack Miller [Fri, 19 Jun 2015 14:57:23 +0000 (09:57 -0500)]
Inoreader sync: fixes for dupe finding

4 years agoMake filter_read default
Jack Miller [Thu, 18 Jun 2015 20:13:09 +0000 (15:13 -0500)]
Make filter_read default

4 years agoInoreader sync: work harder to avoid dupes
Jack Miller [Thu, 18 Jun 2015 18:40:22 +0000 (13:40 -0500)]
Inoreader sync: work harder to avoid dupes

When Inoreader gets an item first, and we add it, it has an Inoreader
id. When canto receives the same item later, it has a real id (or one
canto assigned it), which is different and as such canto doesn't
recognize that these items are identical (nor should it - that's the
whole point of the id) and you end up with dupes (one from the feed, one
from inoreader).

To resolve this, when synchronizing with Inoreader, remove old items
only seen in Inoreader content and attempt to re-add them, which will
properly match the items if canto has found a real copy.

4 years agoAllow feed plugins to remove items
Jack Miller [Thu, 18 Jun 2015 18:39:11 +0000 (13:39 -0500)]
Allow feed plugins to remove items

4 years agoFix Inoreader sub sync with duplicate names
Jack Miller [Thu, 18 Jun 2015 15:09:27 +0000 (10:09 -0500)]
Fix Inoreader sub sync with duplicate names

4 years agoFix dead imports
Jack Miller [Thu, 18 Jun 2015 04:02:51 +0000 (23:02 -0500)]
Fix dead imports

4 years agoreddit: trim the json data
Jack Miller [Thu, 18 Jun 2015 02:13:33 +0000 (21:13 -0500)]
reddit: trim the json data

Save some memory by not storing any data we aren't currently using in
the edit function.

4 years agoThread limit fetching
Jack Miller [Tue, 16 Jun 2015 23:21:07 +0000 (18:21 -0500)]
Thread limit fetching

- Defaults to number of cpus (as reported by multiprocessing.cpu_count)

4 years agoGive feed objects better string representation
Jack Miller [Tue, 16 Jun 2015 23:19:27 +0000 (18:19 -0500)]
Give feed objects better string representation

4 years agoRemove unused constant
Jack Miller [Tue, 16 Jun 2015 21:39:08 +0000 (16:39 -0500)]
Remove unused constant

4 years agoStop using shelve
Jack Miller [Tue, 16 Jun 2015 20:53:25 +0000 (15:53 -0500)]
Stop using shelve

NOTE: This will automatically migrate old shelves.

- Copying shelve dbs is a fucking pain and has caused breakage when
  moving from one distro / OS to another when the available lightweight
DBs change.

- We use basically no database features, except the "cache" which is
  really just the DB holding the entire database in memory which we can
also do with greater control (there has been 0 change in memory usage
with this patch).

- We have to workaround the database constantly expanding in size with
  some databases (GDBM requires reorganize())

- Shelves don't (as far as I can see) play well with transparent
  compression and it doesn't look like it does any compression itself,
so by just gzipping raw JSON, we can shrink the feeds file by 80%.

- Internally, shelves use pickle, which is a Python only serialization.
  This isn't important at the moment, but gzipped JSON is platform

- Replace my feed dump script with zcat =P.

4 years agoRemove extraneous debug
Jack Miller [Tue, 16 Jun 2015 07:25:51 +0000 (02:25 -0500)]
Remove extraneous debug

4 years agoRefactor tag handling on feed index and setattributes
Jack Miller [Tue, 16 Jun 2015 07:21:11 +0000 (02:21 -0500)]
Refactor tag handling on feed index and setattributes

- Simplified set_attribute tag logic, and should re-apply filters on
  changing attributes.

4 years agoStop paginating items
Jack Miller [Mon, 15 Jun 2015 22:14:35 +0000 (17:14 -0500)]
Stop paginating items

ITEMSDONE is still present, but obsolete.

4 years agoChange how protocol messages are sent.
Jack Miller [Mon, 15 Jun 2015 22:12:47 +0000 (17:12 -0500)]
Change how protocol messages are sent.

It's better to just know the size right off the bat than do this
fragment management and add the possibility of a small message getting
held up in a buffer waiting for it to fill.

4 years agoDo transforms on tag changes instead of on ITEMS
Jack Miller [Mon, 15 Jun 2015 21:08:10 +0000 (16:08 -0500)]
Do transforms on tag changes instead of on ITEMS

4 years agoFeed index: convert items to IDs later
Jack Miller [Mon, 15 Jun 2015 15:59:48 +0000 (10:59 -0500)]
Feed index: convert items to IDs later

- Less confusing for sync plugins
- Easier to work with for the next stuff

4 years agoUpdate manpage plugins sections
Jack Miller [Sat, 13 Jun 2015 00:09:48 +0000 (19:09 -0500)]
Update manpage plugins sections

- Remove sync/sync-rsync differentiation
- Add sync-inoreader

4 years agoInoreader sync: better auth/error handling
Jack Miller [Thu, 11 Jun 2015 20:45:58 +0000 (15:45 -0500)]
Inoreader sync: better auth/error handling

- Should be able to reauthorize on 401
- Deals with being disconnected from the internet better (will keep
  trying, but also won't spam log with exceptions)
- Should be able to stop itself when the API rate limit has kicked in

Still need a better way to get these errors into the client.

4 years agoAdd canto-remote status command to print item counts
Jack Miller [Mon, 8 Jun 2015 18:05:54 +0000 (13:05 -0500)]
Add canto-remote status command to print item counts

4 years agoUpdate remote user agent
Jack Miller [Mon, 8 Jun 2015 17:08:42 +0000 (12:08 -0500)]
Update remote user agent

4 years agoMinor help text fix in remote
Jack Miller [Mon, 8 Jun 2015 16:57:11 +0000 (11:57 -0500)]
Minor help text fix in remote

4 years agoFix breaking URL limit in Inoreader sync
Jack Miller [Mon, 8 Jun 2015 07:06:20 +0000 (02:06 -0500)]
Fix breaking URL limit in Inoreader sync

Grouping tag add / remove calls is good, but when you start pushing the
URL size too high, then the Inoreader server doesn't like it.

NOTE: I couldn't find actual documentation on Inoreader's server/API
limit, so I took a guess at 2048 bytes as a reasonable limit. Further
tweaking may be required.

4 years agoInoreader sync v0.3
Jack Miller [Sun, 7 Jun 2015 02:08:36 +0000 (21:08 -0500)]
Inoreader sync v0.3

- Put all the code into an API class. Once I'm done with this plugin,
  parts of it will probably be abstracted out into a generic API class
that this will inherit from, but one thing at a time.

- As discussed in the blog, merge Inoreader data into our data, so that
  we get all items across sources.

- Group large tag changes together to go easier on the API call count,
  and avoid some trouble when, for example, trying to mark 200 items
read at a time.

4 years agoUse new additems plugin hook for Inoreader
Jack Miller [Sat, 6 Jun 2015 23:28:35 +0000 (18:28 -0500)]
Use new additems plugin hook for Inoreader

This should integrate Inoreader data into Canto when Canto hasn't found
the item.

4 years agoAdd an additems plugin hook in feeds
Jack Miller [Sat, 6 Jun 2015 23:15:09 +0000 (18:15 -0500)]
Add an additems plugin hook in feeds

Allow plugins to add items before they're potentially edited.

4 years agoFix sync-rsync with global config
Jack Miller [Sat, 6 Jun 2015 00:13:53 +0000 (19:13 -0500)]
Fix sync-rsync with global config

4 years agoAdd program checks to sync-inoreader and reddit plugins
Jack Miller [Fri, 5 Jun 2015 23:53:26 +0000 (18:53 -0500)]
Add program checks to sync-inoreader and reddit plugins

4 years agoMerge and
Jack Miller [Fri, 5 Jun 2015 23:52:53 +0000 (18:52 -0500)]
Merge and

To avoid confusion, since inoreader doesn't require

4 years agoAdd check_program for plugins
Jack Miller [Fri, 5 Jun 2015 23:51:24 +0000 (18:51 -0500)]
Add check_program for plugins

Stop execution with a silent exception if this plugin will have no
effect on the currently running program.

4 years agoPrefix Inoreader attributes with canto-
Jack Miller [Fri, 5 Jun 2015 03:25:00 +0000 (22:25 -0500)]
Prefix Inoreader attributes with canto-

This causes the feed logic to automatically keep them, so older items
don't lose their ids because they're no longer in the Inoreader data.

4 years agoFix some log.debug breakage
Jack Miller [Fri, 5 Jun 2015 03:22:24 +0000 (22:22 -0500)]
Fix some log.debug breakage

4 years agoMass conversion to better log.debug use
Jack Miller [Fri, 5 Jun 2015 00:50:35 +0000 (19:50 -0500)]
Mass conversion to better log.debug use

Pass the format arguments to log.debug so we avoid the CPU hit
formatting strings we won't use.

4 years agoInoreader sync better item matching
Jack Miller [Wed, 3 Jun 2015 17:31:53 +0000 (12:31 -0500)]
Inoreader sync better item matching

- Cover the case where canto fetches an item first, it leaves the source
  feed (expires, whatever), and then later we get Inoreader data on it.
Canto should now properly synchronize all items it has, instead of just
the items that are present in the feed and Inoreader at the same time.

4 years agoFix some stuck Inoreader synchronized items
Jack Miller [Wed, 3 Jun 2015 00:43:47 +0000 (19:43 -0500)]
Fix some stuck Inoreader synchronized items

It appears that sometimes, an item will be given a ""
tag, and it will resist being set as "read" on Inoreader's side, so
don't let fresh items override our local "read" state. If you mark it in
canto, it should stay read in canto.

4 years agoInoreader sync fixes
Jack Miller [Tue, 2 Jun 2015 22:15:39 +0000 (17:15 -0500)]
Inoreader sync fixes

- Introduce canto-inoreader-sync in the feed data
- Fix initial sync to Inoreader happening too often
- Get proper ids to tags_to_add/remove

4 years agoInoreader sync v0.2
Jack Miller [Tue, 2 Jun 2015 18:17:32 +0000 (13:17 -0500)]
Inoreader sync v0.2

- Stop using Inoreader as the source for feed data. Instead, use the
  standard canto-daemon fetch, and integrate Inoreader information into
  it. I made this decision for these reasons:

    - Fuck Inoreader ads coming through Canto
    - Inoreader seems to have trouble keeping up with quick feeds, not
      to mention the daemon concept of "rate" conflicts with InoReader
    - Inoreader content is sterile, so you don't have access to any
      interesting feed content, which breaks some reader extras.
    - Can use standard canto item IDs, so no dupes when you first turn
      on the plugin.

- Better initial merging, when we first see an item in Inoreader, if the
  canto item has important state, it's sent. This means that we don't
need to have Inoreader information to do the right thing when it does
show up (i.e. items won't be set as unread when they show up in
Inoreader, but have already been touched in canto)

- Fix removing tags via Inoreader not showing up in canto

4 years agoAllow feed edit_* plugins to declare add / remove tags
Jack Miller [Tue, 2 Jun 2015 18:16:51 +0000 (13:16 -0500)]
Allow feed edit_* plugins to declare add / remove tags

4 years agoRevert "Give canto-* attributes priority if it came from fetch thread"
Jack Miller [Tue, 2 Jun 2015 17:43:56 +0000 (12:43 -0500)]
Revert "Give canto-* attributes priority if it came from fetch thread"

This is better integrated later.

This reverts commit 3de10432bd86efd844724f303541705ef957ed0c.

4 years agoTrim Inoreader sync to 200 items
Jack Miller [Mon, 1 Jun 2015 06:28:56 +0000 (01:28 -0500)]
Trim Inoreader sync to 200 items

Yeah... probably don't need to be grabbing Inoreader's entire backlog
for the feeds. This might be sufficient, but it might be better to use
some of the time based API options, this is just a quickfix.

4 years agoRemove experimental TT-RSS server
Jack Miller [Mon, 1 Jun 2015 04:12:21 +0000 (23:12 -0500)]
Remove experimental TT-RSS server

Not interested in messing with this anymore.

4 years agoInoreader synchronization plugin v0.1
Jack Miller [Mon, 1 Jun 2015 04:06:56 +0000 (23:06 -0500)]
Inoreader synchronization plugin v0.1

Read the file for some caveats, but it seems to work pretty well.

4 years agoFix internal delconfig
Jack Miller [Mon, 1 Jun 2015 03:56:06 +0000 (22:56 -0500)]
Fix internal delconfig

4 years agoMake config globally available
Jack Miller [Mon, 1 Jun 2015 03:11:00 +0000 (22:11 -0500)]
Make config globally available

Similar to allfeeds and alltags, this is something that should be easy
to get to from anywhere.

4 years agoTypo fix populating tags from old items
Jack Miller [Mon, 1 Jun 2015 01:12:38 +0000 (20:12 -0500)]
Typo fix populating tags from old items

4 years agoGive canto-* attributes priority if it came from fetch thread
Jack Miller [Mon, 1 Jun 2015 01:12:02 +0000 (20:12 -0500)]
Give canto-* attributes priority if it came from fetch thread

Lets plugins sub in internal content on fetch.

4 years ago0.9.1 v0.9.1
Jack Miller [Fri, 9 Jan 2015 21:08:41 +0000 (15:08 -0600)]

4 years agoAdd hook test
Jack Miller [Fri, 9 Jan 2015 02:51:49 +0000 (20:51 -0600)]
Add hook test

4 years agoTrim empty hooks on removals
Jack Miller [Fri, 9 Jan 2015 02:50:13 +0000 (20:50 -0600)]
Trim empty hooks on removals

Don't think this has caused any memory trouble yet (since our usecase is
a handful of long lived hooks), but these should be disposed of.

4 years agoWorkaround feedparser issue 283 (fix basic auth feeds)
Jack Miller [Thu, 8 Jan 2015 22:37:10 +0000 (16:37 -0600)]
Workaround feedparser issue 283 (fix basic auth feeds)

Apparently auth handlers are processed too late, so they need to get
bumped up to work.

With test =)

5 years agoKeep all items on empty new content
Jack Miller [Wed, 3 Dec 2014 18:19:29 +0000 (12:19 -0600)]
Keep all items on empty new content

Fixes daemon running with items over keep_time that will later appear
in the non-empty feed when we get it.

5 years agoAdd experimental TT-RSS server compatibility plugin
Jack Miller [Thu, 27 Nov 2014 06:03:53 +0000 (00:03 -0600)]
Add experimental TT-RSS server compatibility plugin

- Read-only in this version, but WIP
- Auth is non-functional

5 years agoAdd feed.index test
Jack Miller [Mon, 24 Nov 2014 23:45:16 +0000 (17:45 -0600)]
Add feed.index test

5 years agoJust remove all items and re-add them on index
Jack Miller [Mon, 24 Nov 2014 21:46:23 +0000 (15:46 -0600)]
Just remove all items and re-add them on index

- Less code, and keeps items on life support (i.e. not in the feed but
  kept around via keep_time or keep_unread ) toward the end instead of
the beginning so tag[0] is always the most recent top item.

5 years agoProperly queue up tags for old items
Jack Miller [Mon, 24 Nov 2014 16:43:41 +0000 (10:43 -0600)]
Properly queue up tags for old items

5 years agoKey hooks for mass removal
Jack Miller [Sun, 23 Nov 2014 04:55:52 +0000 (22:55 -0600)]
Key hooks for mass removal

5 years ago0.9.0 v0.9.0
Jack Miller [Wed, 19 Nov 2014 17:53:58 +0000 (11:53 -0600)]

5 years agoFix populating user tags on index()
Jack Miller [Mon, 17 Nov 2014 22:02:22 +0000 (16:02 -0600)]
Fix populating user tags on index()

5 years agoKeep needs_update() from hitting the shelf
Jack Miller [Mon, 17 Nov 2014 07:47:36 +0000 (01:47 -0600)]
Keep needs_update() from hitting the shelf

Keep a timestamp in memory instead of just in the shelf itself.

Also fixes the high CPU usage introduced in the previous commit.

5 years agoRemove pointless fetch timer
Jack Miller [Sat, 15 Nov 2014 23:16:43 +0000 (17:16 -0600)]
Remove pointless fetch timer

We already have a good mechanism in place for fetch thread timing, the
second layer of timing was just a way to waste time. At the cost of
taking feed_lock (a low contention lock) briefly once a second (instead
of once a minute) fetch work is done faster.

This is especially important on a fresh startup where there is no disk
presence already.

In addition, scale back some logging that is made annoying by the
increased frequency of some fetch calls.

5 years agoPass client verbosity onto daemon if forked
Jack Miller [Sat, 15 Nov 2014 21:10:58 +0000 (15:10 -0600)]
Pass client verbosity onto daemon if forked

(i.e. starting canto-curses -v will start canto-daemon -v if there isn't
already a daemon running)

5 years agoUpdate copyright date
Jack Miller [Fri, 7 Nov 2014 16:23:49 +0000 (10:23 -0600)]
Update copyright date

5 years agoAdd non-blocking support to RWLock
Jack Miller [Wed, 29 Oct 2014 19:43:40 +0000 (14:43 -0500)]
Add non-blocking support to RWLock

5 years agotry_plugins may now return error string
Jack Miller [Wed, 29 Oct 2014 19:15:13 +0000 (14:15 -0500)]
try_plugins may now return error string

If there were plugin-fatal errors on import, that information is
probably interesting.

5 years agoMinor logging / buffer sizing tweak
Jack Miller [Wed, 29 Oct 2014 05:08:44 +0000 (00:08 -0500)]
Minor logging / buffer sizing tweak

Drastically improves the readability of logs

5 years agoUse timestamps instead of ticking for sync
Jack Miller [Sat, 27 Sep 2014 23:58:20 +0000 (18:58 -0500)]
Use timestamps instead of ticking for sync

This should make sync work a little bit better when dealing with
suspending machines or any other reason ticks might spread out.

5 years agoDatabase mod times should be UTC
Jack Miller [Sat, 27 Sep 2014 23:44:12 +0000 (18:44 -0500)]
Database mod times should be UTC

If they're going to be used for comparison (like sync), it should be
consistent regardless of timezone.

5 years agov0.9.0-alpha5 v0.9.0-alpha5
Jack Miller [Fri, 26 Sep 2014 16:22:05 +0000 (11:22 -0500)]

5 years agoBrush up manpages
Jack Miller [Thu, 25 Sep 2014 21:33:32 +0000 (16:33 -0500)]
Brush up manpages

- Update daemon/remote command line usage
- Add plugin information to daemon manpage
- Remove .canto-ng/conf from "FILES" in an attempt to discourage hand use,
  although it's still just sitting where you'd expect =P
- Add remote command details

5 years agoFailure to parse global_transform is now fatal
Jack Miller [Thu, 25 Sep 2014 02:13:06 +0000 (21:13 -0500)]
Failure to parse global_transform is now fatal

5 years agoDon't propagate config changes that errored
Jack Miller [Thu, 25 Sep 2014 02:12:36 +0000 (21:12 -0500)]
Don't propagate config changes that errored

5 years agoAdd config notification to sync plugin
Jack Miller [Wed, 17 Sep 2014 20:42:19 +0000 (15:42 -0500)]
Add config notification to sync plugin

I'm pretty sure this is working okay (I can see the changes propagate)
but there are some changes that need to be made to c-c to automatically
refresh on some of the changes (i.e. global_transform).

5 years agoFix canto-remote export
Jack Miller [Mon, 15 Sep 2014 23:03:02 +0000 (18:03 -0500)]
Fix canto-remote export

Don't care about type detection.

5 years agov0.9.0-alpha4 v0.9.0-alpha4
Jack Miller [Mon, 15 Sep 2014 17:24:21 +0000 (12:24 -0500)]

5 years agoFix config timestamp
Jack Miller [Mon, 15 Sep 2014 06:39:04 +0000 (01:39 -0500)]
Fix config timestamp

5 years agoFix confused sync
Jack Miller [Mon, 15 Sep 2014 06:28:48 +0000 (01:28 -0500)]
Fix confused sync

syncto in loop should've been eliminated when syncfrom became sync.

5 years agoFix shelf timestamping
Jack Miller [Mon, 15 Sep 2014 06:02:33 +0000 (01:02 -0500)]
Fix shelf timestamping

- Cache is only one key deep, so we have to read-modify-write just to
  change a single key in 'control'

5 years agoMore lock tweaks
Jack Miller [Sun, 14 Sep 2014 22:49:16 +0000 (17:49 -0500)]
More lock tweaks

- Now that feed.locks are no longer serial, we can afford to properly
  lock then on apply_transforms, using a new function to take selective
feed.locks in the same order as the allfeed variants.

- Only hold most cmd_items lock during apply_transforms

- cmd_listtags holds tag_lock which is now held independently from
  feed.lock, so we don't need to get feed.locks anymore, just feed_lock
since we're using get_feeds()

- cmd_attributes holds feed_lock for the same reason, but can still
  throw exception since attributes can be requested for items that don't
match up to real feeds.

- feed_lock is no longer taken first, but in the same alphabetical order
  we use conventionally.