account based feeds
[rss-reader.git] / src / ingester.ts
1 import { query } from './lib/db';
2 import { v4 as uuidv4 } from 'uuid';
3 import { RSSParser } from './parsers/rss';
4
5 const rss = new RSSParser();
6
7 export async function ingestSingle(feed_id: string) {
8   const feed = query.getFeedInfo.get(feed_id);
9   console.log(`Ingesting ${feed.title} @ ${feed.link}`);
10
11   const data = await rss.parse(feed.link);
12
13   const insertedData = data.items.map(item => {
14     const id = uuidv4();
15     query.addFeedItem.run(id, feed.id, item.guid, item.title, item.link, item.pubDate, item.content);
16     return id;
17   });
18
19   return data;
20 }
21
22 export async function ingest() {
23   // get a list of feeds!
24   const feeds = query._.ingest_getFeedList.all();
25
26   feeds.forEach(async feed => {
27     console.log(`Ingesting ${feed.title} @ ${feed.link}`);
28     try {
29       const data = await rss.parse(feed.link);
30
31       const insertedData = data.items.map(item => {
32         const id = uuidv4();
33         try {
34           query.addFeedItem.run(id, feed.id, item.guid, item.title, item.link, item.pubDate, item.content);
35         }
36         catch(e) {
37           if((e as any).code !== 'SQLITE_CONSTRAINT_UNIQUE') {
38             throw e;
39           }
40         }
41         return id;
42       });
43     }
44     catch(e) {
45       console.log(e);
46     }
47   });
48 }