From 454d65d6235d12a86ba9f3fc1fddfe659f9e1931 Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Fri, 20 Jul 2018 12:03:40 +0300 Subject: [PATCH] fix(feed): exchage feeds with same size but more new --- src/background/api.js | 52 ++++++++++++++++++++++++---------------- src/background/config.js | 4 +++- src/background/feed.js | 6 +++++ 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/src/background/api.js b/src/background/api.js index 8c75652..3197c11 100644 --- a/src/background/api.js +++ b/src/background/api.js @@ -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) => { - if(!remoteFeed) - return - - if(remoteFeed.length <= feed.size()) - return - - console.log('replace our feed with remote feed') - feed.feed = remoteFeed - send('feedUpdate', { - feed: feed.feed + 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(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.feedDate = remoteFeed.feedDate || 0 + send('feedUpdate', { + feed: feed.feed + }); + } }); - }); - }, 1000) + } + } }) } \ No newline at end of file diff --git a/src/background/config.js b/src/background/config.js index 1cd0a49..947c2b4 100644 --- a/src/background/config.js +++ b/src/background/config.js @@ -64,7 +64,9 @@ let config = { client: { downloadPath: os.homedir() + '/Downloads' - } + }, + + feedDate: 0, } const fs = require('fs'); diff --git a/src/background/feed.js b/src/background/feed.js index 8e3baf4..fd69b34 100644 --- a/src/background/feed.js +++ b/src/background/feed.js @@ -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() {