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,
|
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)
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
@ -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');
|
||||||
|
@ -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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user