Changeset 1095

Show
Ignore:
Timestamp:
28/10/08 22:16:13 (2 months ago)
Author:
silver
Message:

Fix bug with decoding Atom dates.
Improve Feed Store debug logging to include dates.
Explicitly throw away feed items that have the same unique key as earlier items in the feed (so duplicates in the feed are ignored completely).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/contrib/Feeds.js

    r938 r1095  
    975975         
    976976        var newItems = new Array(); 
     977        var newUniques = new Object(); 
    977978         
    978979        // Only keep new or updated items in the list. 
     
    983984                var unique = (item.guid ? item.guid : (item.link ? item.link : (item.date != "?" ? item.date : item.title))); 
    984985                var date = unique + ":" + item.date; 
     986                 
     987                if (unique in newUniques) { 
     988                        // Skip repeated unique items. Broken feed! 
     989                        continue; 
     990                } 
     991                newUniques[unique] = true; 
     992                 
    985993                if (unique in this._lastSeen) { 
    986994                        // Seen this item before. Has it changed? 
     
    9941002                        item.updated = true; 
    9951003                } 
     1004                 
    9961005                // New item. 
    9971006                item.uniqueKey = unique; 
     
    10051014                                if (this._items[i].uniqueKey == item.uniqueKey) { 
    10061015                                        if (this._parent._debug_store) { 
    1007                                                 log("Feed Store: " + this.name + ": DEL " + item.uniqueKey); 
     1016                                                log("Feed Store: " + this.name + ": DEL <" + this._items[i].uniqueKey + "><" + this._items[i].date + ">"); 
    10081017                                        } 
    10091018                                        this._items.splice(i, 1); 
     
    10131022                } 
    10141023                if (this._parent._debug_store) { 
    1015                         log("Feed Store: " + this.name + ": ADD " + item.uniqueKey); 
     1024                        log("Feed Store: " + this.name + ": ADD <" + item.uniqueKey + "><" + item.date + ">"); 
    10161025                } 
    10171026                this._items.push(item); 
    1018                 //log("New item : [" + date + "]:" + (item.updated ? "updated" : "new")); 
    10191027        } 
    10201028         
     
    10251033                                if (this._items[i].uniqueKey == d) { 
    10261034                                        if (this._parent._debug_store) { 
    1027                                                 log("Feed Store: " + this.name + ": DEL " + d); 
     1035                                                log("Feed Store: " + this.name + ": DEL <" + this._items[i].uniqueKey + "><" + this._items[i].date + ">"); 
    10281036                                        } 
    10291037                                        this._items.splice(i, 1); 
     
    10311039                                } 
    10321040                        } 
    1033                         //log("Lost item: [" + d + "]:_lastSeen"); 
    10341041                } 
    10351042        } 
     
    10371044                if (!this._lastSeenPub[d]) { 
    10381045                        delete this._lastSeenPub[d]; 
    1039                         //log("Lost item: [" + d + "]:_lastSeenPub"); 
    10401046                } 
    10411047        } 
     
    11561162        var ary = element.contents().match(/^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)(?:.(\d+))?(Z|([+-])(\d+):(\d+))$/); 
    11571163        if (ary) { 
    1158                 var d = new Date(ary[1], ary[2], ary[3], ary[4], ary[5], ary[6]); 
     1164                var d = new Date(ary[1], ary[2] - 1, ary[3], ary[4], ary[5], ary[6]); 
    11591165                // 8 = Z/zone 
    11601166                // 9 = +/-