Sage 1.5.2 beta has been released to the Dev Channel.
Update (7/29): beta 4 released
- Fixed some issues that would cause the ‘Check Feeds’ action to fail
- Resolved a problem with feeds using certain character encodings
- Sage feed root management more robust
- Better handling of feed items that don’t have a link
You can install this beta release here.
Issue 104 is fixed as it renders the feed now but there is issue 67 on that feed as well. Feed items are checked as read in the sidebar (if you click “mark all read”) but not in the rendered view and the state isn’t remembered for those items (possible solution can be found in my comment on release version 1.5.1 – http://sagerss.com/blog/2013/06/sage-1-5-1-released/comment-page-1/#comment-64204 )
Great. True, we need to come up with a solution for the no feed item links scenario and, as with your proposal, may involve rethinking how Sage keeps track of read feed items. You might add your thoughts to the issue itself for easier tracking:
https://github.com/petea/sage/issues/67
I tried messing with the mozilla addon sdk (jetpack) a bit and wrote my own xml parser and read/unread check. Using hashes works pretty well and collisions shouldn’t be a problem (chance for that should be way less than 1% with a normal feed length (10-1000 items) and a good hashing algorithm) but there a few ways to minimize them further:
1. Each feed should have it’s own hash list. Shortend Javascript:
require(“xhr”);
var ss = require(“sdk/simple-storage”).storage;
var xmlhttp = new XMLHttpRequest();
// Using synchronous transfer should be enough for an example
xmlhttp.open(“GET”,url,flase);
xmlhttp.send();
var xmlDoc = xmlhttp.responseXML;
// Parse that Document in a JS Collection (there could be better Objects than Collections…)
var parsedDoc = parseFeed(xmlDoc);
// local storage for addons!
if (!ss.list) {
ss.list = {};
}
// we need a new list because we want to throw away the old one after comparing the items (unused items should be thrown out)
var urlhash = hash(url), list = {}, itemhash;
for (i = 0;i 32/64/128 bit – 32 should be enough -, url -> easy >30 byte (>240 bit)). A good hashing method under MIT-License is MurmurHash3 (there is a javascript implementation (by someone named Gary Court) available and I published that one on https://builder.addons.mozilla.org/ as a library).
2. It could be enough to hash-check only linkless items.
Both methods have problems:
History:
+ Logs links clicked on other tabs than Sage tabs too.
- Does only remember read links. If the entry changes (date/title/anything except link) it doesn’t revert back to “unread”/”new”.
- Does not work on linkless items.
Hash:
+ Works on any item.
+ If date/title(/description) is included in the hash it does log changes in the item.
* Could log links clicked on other tabs but only if the pro argument above is neglecteted: Check history while parsing xml and set read state.
- Possibility of collisions.
P.S. like I said I don’t have a github account.
I think the feed item hash approach could potentially replace the current browser history based implementation. Maybe it’s time for you to get a GitHub account?
Oh…I just saw my code got cut in the loop:
for (i = 0;i < parsedDoc['size']; i++) {
// create hash using data available…using short version here but could consist of title + link (if it exists) + date (+ description but makes hashing slower because some descriptions are pretty long)
itemhash = hash(parsedDoc['item']);
// check for already visited items
if (ss.list[urlhash][itemhash] == 'read') {
list[itemhash] = 'read';
}
}
// discard old list and replace with new one
ss.list[urlhash] = list;
renderFeed(parsedDoc,ss.list[urlhash]);
This could also make it easier to combine feeds as they are parsed/statechecked before rendering.
About github: I could create an account…but I don't have the time to do much at the moment so if I would create one I would not be available until late August or something.
I used the Addon Builder for testing so there could be a few problems integrating something like that in an addon not using jetpack…
Migrating sage to the SDK isn’t an option yet right? (No sidebar in the SDK…)
That’s right, the sidebar is one of several things we wouldn’t have access to under the SDK unfortunately.
sage was a great extension, but firefox and it only gets worse.
of that annoying
1) so that if the feed is gone, the sage did not miss it and does not check the other feeds, and always makes checking
2) very uncomfortable double click on the folders for
3) mark all read was the mark (shade) news, the old sage logical flagged with only a list of news
‘Check Feeds’ action still fails a lot for me.
Can you tell me how it’s failing and if you’re seeing any errors in Tools > Web Developer > Error Console?
1.5.2 beta fixed “Check feeds” for me (which broke on 1.5.1). I am on Iceweasel 22.
Oops, I spoke too soon. Check feeds worked once after restart and then stopped again.
Any relevant errors in Tools > Web Developer > Error Console?
I found the problem. It was getting hung up on a couple bad feeds and never timing out. By restarting firefox and checking feeds I eventually figured out which ones were bad, but it was sort of annoying. A bad feed shouldn’t be able to break Sage.
The feeds were
http://www.endgame.org.uk/?feed=rss2 (squatted since I subscribed)
http://deconsumption.typepad.com/deconsumption/atom.xml (missing)
Thanks,
Matt
Thanks, Matt. Very helpful. Should be addressed in the next beta release.
While waiting for Sage to become useable again, I tried http://www.inoreader.com/ – works great. I might just switch.