diff --git a/components/rss/rss.js b/components/rss/rss.js index f9c5e605af96f..75e2b5ea4c933 100644 --- a/components/rss/rss.js +++ b/components/rss/rss.js @@ -11,7 +11,11 @@ module.exports = { intervalSeconds: 60, }, db: "$.service.db", - url:"string", + url:{ + type: "string", + label: 'Feed URL', + description: "Enter the URL for any public RSS feed.", + }, }, methods: { // in theory if alternate setting title and description or aren't unique this won't work @@ -19,29 +23,31 @@ module.exports = { return item.guid || item.id || item.title || item.description }, }, - events: { - async default() { - const seenKeys = this.db.get("seenKeys") || [] - const seenKeysMap = seenKeys.reduce((acc, v) => { - acc[v] = true - return acc - }, {}) - // All elements of an item are optional, however at least one of title or description must be present. - // should be listed from most recent to least recent - const feed = await parser.parseURL(this.url) - for (let idx = feed.items.length - 1; idx >= 0; idx--) { - const item = feed.items[idx] - const key = this.itemKey(item) - // XXX throw if !key? - if (seenKeysMap[key]) continue - seenKeys.unshift(key) - seenKeysMap[key] = true // just in case of dupes - this.$emit(item) - } - if (seenKeys.length) { - // XXX restrict by byte size instead of el size - this.db.set("seenKeys", seenKeys.slice(0, 1000)) - } - }, + async run() { + const seenKeys = this.db.get("seenKeys") || [] + const seenKeysMap = seenKeys.reduce((acc, v) => { + acc[v] = true + return acc + }, {}) + // All elements of an item are optional, however at least one of title or description must be present. + // should be listed from most recent to least recent + const feed = await parser.parseURL(this.url) + for (let idx = feed.items.length - 1; idx >= 0; idx--) { + const item = feed.items[idx] + const key = this.itemKey(item) + // XXX throw if !key? + if (seenKeysMap[key]) continue + seenKeys.unshift(key) + seenKeysMap[key] = true // just in case of dupes + this.$emit(item, { + summary: item.title, + ts: item.pubDate && +new Date(item.pubDate), + id: key, + }) + } + if (seenKeys.length) { + // XXX restrict by byte size instead of el size + this.db.set("seenKeys", seenKeys.slice(0, 1000)) + } }, -} +} \ No newline at end of file