fix(feed): exchage feeds with same size but more new

This commit is contained in:
Alexey Kasyanchuk 2018-07-20 12:03:40 +03:00
parent 10dd942df0
commit 454d65d623
3 changed files with 41 additions and 21 deletions

View File

@ -895,6 +895,10 @@ module.exports = async ({
enumerable: true, enumerable: true,
get: () => feed.size() get: () => feed.size()
}); });
Object.defineProperty(p2p.info, 'feedDate', {
enumerable: true,
get: () => feed.feedDate
});
p2pStore.on('store', async ({data: record, temp, myself}) => { p2pStore.on('store', async ({data: record, temp, myself}) => {
if(record.type !== 'vote') if(record.type !== 'vote')
return return
@ -936,30 +940,38 @@ module.exports = async ({
recive('feed', mergeTorrentsWithDownloadsFn(feedCall, true)); // don't overwrite feed value recive('feed', mergeTorrentsWithDownloadsFn(feedCall, true)); // don't overwrite feed value
p2p.on('feed', (nil, callback) => { p2p.on('feed', (nil, callback) => {
feedCall((data) => callback(data)) callback({
feed: feed.feed,
feedDate: feed.feedDate
})
}) })
// call once to get bigest feed // call once to get bigest feed
let feedLock = false p2p.events.on('peer', (peer) => {
p2p.events.on('peer', () => { if(peer.info && peer.info.feed)
if(feedLock) {
return if(peer.info.feed > feed.size() // list bigger than our
feedLock = true || (peer.info.feed == feed.size() && peer.info.feedDate > feed.feedDate)) // or same but more new
setTimeout(() => { {
p2p.emit('feed', null, (remoteFeed) => { peer.emit('feed', null, (remoteFeed) => {
if(!remoteFeed) if(!remoteFeed)
return return
if(remoteFeed.length <= feed.size()) if(Array.isArray(remoteFeed) || !remoteFeed.feed)
return return // old version call
console.log('replace our feed with remote feed') if(remoteFeed.feed.length > feed.size() || (remoteFeed.feed.length == feed.size() && remoteFeed.feedDate > feed.feedDate))
feed.feed = remoteFeed {
send('feedUpdate', { console.log('replace our feed with remote feed')
feed: feed.feed feed.feed = remoteFeed.feed
feed.feedDate = remoteFeed.feedDate || 0
send('feedUpdate', {
feed: feed.feed
});
}
}); });
}); }
}, 1000) }
}) })
} }

View File

@ -64,7 +64,9 @@ let config = {
client: { client: {
downloadPath: os.homedir() + '/Downloads' downloadPath: os.homedir() + '/Downloads'
} },
feedDate: 0,
} }
const fs = require('fs'); const fs = require('fs');

View File

@ -1,3 +1,5 @@
const config = require('./config');
module.exports = class Feed { module.exports = class Feed {
constructor({sphinx}) constructor({sphinx})
{ {
@ -5,6 +7,7 @@ module.exports = class Feed {
this.sphinx = sphinx this.sphinx = sphinx
this.loaded = false this.loaded = false
this.max = 1000 this.max = 1000
this.feedDate = 0
} }
size() size()
@ -17,6 +20,7 @@ module.exports = class Feed {
return // feed not loaded on begining, ignore saving return // feed not loaded on begining, ignore saving
console.log('saving feed') console.log('saving feed')
config.feedDate = this.feedDate
await this.sphinx.query('delete from feed where id > 0') await this.sphinx.query('delete from feed where id > 0')
let id = 0 let id = 0
return Promise.all( return Promise.all(
@ -34,6 +38,7 @@ module.exports = class Feed {
this.feed = [] this.feed = []
this._order() this._order()
this.feedDate = config.feedDate
this.loaded = true this.loaded = true
console.log('lodead feed') console.log('lodead feed')
} }
@ -79,6 +84,7 @@ module.exports = class Feed {
} }
this._order() this._order()
this.feedDate = Math.floor(Date.now() / 1000)
} }
_order() { _order() {