fix(feed): exchage feeds with same size but more new
This commit is contained in:
parent
10dd942df0
commit
454d65d623
@ -895,6 +895,10 @@ module.exports = async ({
|
||||
enumerable: true,
|
||||
get: () => feed.size()
|
||||
});
|
||||
Object.defineProperty(p2p.info, 'feedDate', {
|
||||
enumerable: true,
|
||||
get: () => feed.feedDate
|
||||
});
|
||||
p2pStore.on('store', async ({data: record, temp, myself}) => {
|
||||
if(record.type !== 'vote')
|
||||
return
|
||||
@ -936,30 +940,38 @@ module.exports = async ({
|
||||
recive('feed', mergeTorrentsWithDownloadsFn(feedCall, true)); // don't overwrite feed value
|
||||
|
||||
p2p.on('feed', (nil, callback) => {
|
||||
feedCall((data) => callback(data))
|
||||
callback({
|
||||
feed: feed.feed,
|
||||
feedDate: feed.feedDate
|
||||
})
|
||||
})
|
||||
|
||||
// call once to get bigest feed
|
||||
let feedLock = false
|
||||
p2p.events.on('peer', () => {
|
||||
if(feedLock)
|
||||
return
|
||||
feedLock = true
|
||||
setTimeout(() => {
|
||||
p2p.emit('feed', null, (remoteFeed) => {
|
||||
p2p.events.on('peer', (peer) => {
|
||||
if(peer.info && peer.info.feed)
|
||||
{
|
||||
if(peer.info.feed > feed.size() // list bigger than our
|
||||
|| (peer.info.feed == feed.size() && peer.info.feedDate > feed.feedDate)) // or same but more new
|
||||
{
|
||||
peer.emit('feed', null, (remoteFeed) => {
|
||||
if(!remoteFeed)
|
||||
return
|
||||
|
||||
if(remoteFeed.length <= feed.size())
|
||||
return
|
||||
if(Array.isArray(remoteFeed) || !remoteFeed.feed)
|
||||
return // old version call
|
||||
|
||||
if(remoteFeed.feed.length > feed.size() || (remoteFeed.feed.length == feed.size() && remoteFeed.feedDate > feed.feedDate))
|
||||
{
|
||||
console.log('replace our feed with remote feed')
|
||||
feed.feed = remoteFeed
|
||||
feed.feed = remoteFeed.feed
|
||||
feed.feedDate = remoteFeed.feedDate || 0
|
||||
send('feedUpdate', {
|
||||
feed: feed.feed
|
||||
});
|
||||
}
|
||||
});
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
@ -64,7 +64,9 @@ let config = {
|
||||
|
||||
client: {
|
||||
downloadPath: os.homedir() + '/Downloads'
|
||||
}
|
||||
},
|
||||
|
||||
feedDate: 0,
|
||||
}
|
||||
|
||||
const fs = require('fs');
|
||||
|
@ -1,3 +1,5 @@
|
||||
const config = require('./config');
|
||||
|
||||
module.exports = class Feed {
|
||||
constructor({sphinx})
|
||||
{
|
||||
@ -5,6 +7,7 @@ module.exports = class Feed {
|
||||
this.sphinx = sphinx
|
||||
this.loaded = false
|
||||
this.max = 1000
|
||||
this.feedDate = 0
|
||||
}
|
||||
|
||||
size()
|
||||
@ -17,6 +20,7 @@ module.exports = class Feed {
|
||||
return // feed not loaded on begining, ignore saving
|
||||
|
||||
console.log('saving feed')
|
||||
config.feedDate = this.feedDate
|
||||
await this.sphinx.query('delete from feed where id > 0')
|
||||
let id = 0
|
||||
return Promise.all(
|
||||
@ -34,6 +38,7 @@ module.exports = class Feed {
|
||||
this.feed = []
|
||||
|
||||
this._order()
|
||||
this.feedDate = config.feedDate
|
||||
this.loaded = true
|
||||
console.log('lodead feed')
|
||||
}
|
||||
@ -79,6 +84,7 @@ module.exports = class Feed {
|
||||
}
|
||||
|
||||
this._order()
|
||||
this.feedDate = Math.floor(Date.now() / 1000)
|
||||
}
|
||||
|
||||
_order() {
|
||||
|
Loading…
Reference in New Issue
Block a user