diff --git a/src/app/index-page.js b/src/app/index-page.js
index 79eecff..b529c29 100644
--- a/src/app/index-page.js
+++ b/src/app/index-page.js
@@ -6,6 +6,7 @@ import SearchResults from './search-results'
import Search from './search'
import SelectField from 'material-ui/SelectField';
import MenuItem from 'material-ui/MenuItem';
+import Feed from './feed';
export default class IndexPage extends Page {
constructor(props) {
@@ -88,6 +89,7 @@ export default class IndexPage extends Page {
/>
+
diff --git a/src/background/api.js b/src/background/api.js
index e510602..88e5bc0 100644
--- a/src/background/api.js
+++ b/src/background/api.js
@@ -3,8 +3,9 @@ const forBigTable = require('./forBigTable')
const compareVersions = require('compare-versions');
const getTorrent = require('./gettorrent')
const _ = require('lodash')
+const Feed = require('./feed')
-module.exports = ({
+module.exports = async ({
sphinx,
send,
recive,
@@ -735,4 +736,40 @@ module.exports = ({
callback(true)
});
+
+ const feed = new Feed({sphinx})
+ await feed.load()
+ feed.clear()
+ setInterval(() => feed.save(), 10000)
+
+ // store torrent to feed
+ p2pStore.on('store', async ({data: record, temp}) => {
+ if(!temp || !temp.torrent)
+ return
+
+ const { torrent } = temp
+
+ if(record.type !== 'vote')
+ return
+
+ if(record.vote !== 'good')
+ return
+
+ if(!torrent)
+ return
+
+ if(torrent.hash !== record.torrentHash)
+ return
+
+ feed.add(torrent)
+
+ send('feedUpdate', {
+ feed: feed.feed
+ });
+ })
+
+ recive('feed', (callback) =>
+ {
+ callback(feed.feed)
+ });
}
\ No newline at end of file
diff --git a/src/background/feed.js b/src/background/feed.js
new file mode 100644
index 0000000..f76ce54
--- /dev/null
+++ b/src/background/feed.js
@@ -0,0 +1,60 @@
+module.exports = class Feed {
+ constructor({sphinx})
+ {
+ this.feed = []
+ this.sphinx = sphinx
+ }
+
+ async save() {
+ console.log('saving feed')
+ await this.sphinx.query('delete from feed where id > 0')
+ let id = 0
+ return Promise.all(
+ this.feed.map(
+ async record => await this.sphinx.query('insert into feed(id, data) values(?, ?)', [++id, JSON.stringify(record)])
+ )
+ )
+ }
+
+ async load() {
+ this.feed = await this.sphinx.query('select * from feed limit 1000')
+ if(this.feed && this.feed.length > 0)
+ this.feed = this.feed.map(f => JSON.parse(f.data))
+ else
+ this.feed = []
+
+ this._order()
+ }
+
+ clear()
+ {
+ this.feed = []
+ }
+
+ add(data) {
+ if(typeof data == 'object')
+ {
+ data.feedDate = Math.floor(Date.now() / 1000)
+ }
+
+ this.feed.push(data)
+ this._order()
+ }
+
+ _order() {
+ this.feed.sort((a, b) => this._compare(b) - this._compare(a))
+ }
+
+ _compare(x)
+ {
+ const rating = 0
+ const comments = 0
+ const time = Math.floor(Date.now() / 1000) - x.feedDate
+
+ const maxTime = 600000
+ if(time > maxTime)
+ time = maxTime
+ const relativeTime = (maxTime - time) / maxTime
+ return relativeTime * relativeTime + rating * 1.5 * relativeTime + comments * 4 * relativeTime
+ }
+}
\ No newline at end of file
diff --git a/src/background/sphinx.js b/src/background/sphinx.js
index 82d07ee..12b4c04 100644
--- a/src/background/sphinx.js
+++ b/src/background/sphinx.js
@@ -66,6 +66,15 @@ const writeSphinxConfig = (path, dbPath) => {
rt_attr_string = peerId
}
+ index feed
+ {
+ type = rt
+ path = ${dbPath}/database/feed
+
+ rt_field = feedIndex
+ rt_attr_json = data
+ }
+
searchd
{
listen = 9312