feat(feed): feed widget support
This commit is contained in:
parent
77721293e4
commit
027be8c3f3
@ -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 {
|
||||
/>
|
||||
</div>
|
||||
<div className='column center w100p pad0-75'>
|
||||
<Feed />
|
||||
<RecentTorrents />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -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)
|
||||
});
|
||||
}
|
60
src/background/feed.js
Normal file
60
src/background/feed.js
Normal file
@ -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
|
||||
}
|
||||
}
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user