feat(feed): auto-loading feed list
This commit is contained in:
parent
7d429dbe81
commit
5ccdbc01fe
38
src/app/auto-scrollable.js
Normal file
38
src/app/auto-scrollable.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import React, { Component } from 'react';
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
|
||||||
|
export default class AutoScrollable extends Component {
|
||||||
|
componentDidMount() {
|
||||||
|
if(this.onBottomScroll)
|
||||||
|
{
|
||||||
|
let component = this;
|
||||||
|
let prevScrollValue = 0;
|
||||||
|
let outFireStart = 0;
|
||||||
|
this.onScroll = () => {
|
||||||
|
let scrollHeight = Math.max(
|
||||||
|
document.body.scrollHeight, document.documentElement.scrollHeight,
|
||||||
|
document.body.offsetHeight, document.documentElement.offsetHeight,
|
||||||
|
document.body.clientHeight, document.documentElement.clientHeight
|
||||||
|
);
|
||||||
|
|
||||||
|
if(prevScrollValue != scrollHeight)
|
||||||
|
{
|
||||||
|
prevScrollValue = scrollHeight;
|
||||||
|
outFireStart = scrollHeight / 6; // это значит что-то подгрузило на страницу и можно вполне увеличивать отступ скрола
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((window.innerHeight + document.documentElement.scrollTop) >= scrollHeight - outFireStart) {
|
||||||
|
outFireStart = -1;
|
||||||
|
component.onBottomScroll();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
window.addEventListener('scroll', this.onScroll);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
componentWillUnmount() {
|
||||||
|
if(this.onBottomScroll)
|
||||||
|
{
|
||||||
|
window.removeEventListener('scroll', this.onScroll);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,31 +1,40 @@
|
|||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
|
import AutoScrollable from './auto-scrollable'
|
||||||
import TorrentLine from './torrent'
|
import TorrentLine from './torrent'
|
||||||
import {List} from 'material-ui/List';
|
import {List} from 'material-ui/List';
|
||||||
import Divider from 'material-ui/Divider';
|
import Divider from 'material-ui/Divider';
|
||||||
import Subheader from 'material-ui/Subheader';
|
import Subheader from 'material-ui/Subheader';
|
||||||
|
|
||||||
export default class RecentTorrents extends Component {
|
export default class RecentTorrents extends AutoScrollable {
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super()
|
||||||
this.torrents = [];
|
this.torrents = [];
|
||||||
}
|
}
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
window.torrentSocket.emit('feed', window.customLoader((data) => {
|
super.componentDidMount();
|
||||||
if(data) {
|
this.loadMoreFeed();
|
||||||
this.torrents = data;
|
|
||||||
this.forceUpdate();
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
this.feedFunc = ({feed}) => {
|
this.feedFunc = ({feed}) => {
|
||||||
this.torrents = feed
|
this.torrents = feed.slice(0, this.torrents.length || 20)
|
||||||
this.forceUpdate()
|
this.forceUpdate()
|
||||||
};
|
};
|
||||||
window.torrentSocket.on('feedUpdate', this.feedFunc);
|
window.torrentSocket.on('feedUpdate', this.feedFunc);
|
||||||
}
|
}
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
|
super.componentWillUnmount();
|
||||||
if(this.feedFunc)
|
if(this.feedFunc)
|
||||||
window.torrentSocket.off('feedUpdate', this.feedFunc);
|
window.torrentSocket.off('feedUpdate', this.feedFunc);
|
||||||
}
|
}
|
||||||
|
onBottomScroll() {
|
||||||
|
this.loadMoreFeed();
|
||||||
|
}
|
||||||
|
loadMoreFeed() {
|
||||||
|
window.torrentSocket.emit('feed', this.torrents.length, window.customLoader((data) => {
|
||||||
|
if(data) {
|
||||||
|
this.torrents = this.torrents.concat(data);
|
||||||
|
this.forceUpdate();
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<List className='animated torrents-container'>
|
<List className='animated torrents-container'>
|
||||||
|
@ -1006,9 +1006,9 @@ module.exports = async ({
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
const feedCall = (callback) =>
|
const feedCall = (index, callback) =>
|
||||||
{
|
{
|
||||||
callback(feed.feed)
|
callback(feed.feed.slice(index || 0, (index || 0) + 20));
|
||||||
}
|
}
|
||||||
recive('feed', mergeTorrentsWithDownloadsFn(feedCall, true)); // don't overwrite feed value
|
recive('feed', mergeTorrentsWithDownloadsFn(feedCall, true)); // don't overwrite feed value
|
||||||
|
|
||||||
@ -1033,6 +1033,11 @@ module.exports = async ({
|
|||||||
if(Array.isArray(remoteFeed) || !remoteFeed.feed)
|
if(Array.isArray(remoteFeed) || !remoteFeed.feed)
|
||||||
return // old version call
|
return // old version call
|
||||||
|
|
||||||
|
if(remoteFeed.feed.length > feed.max) {
|
||||||
|
logT('feed', 'remote feed have more torrent that needed: ', remoteFeed.feed.length, ' > ', feed.max);
|
||||||
|
remoteFeed.feed = remoteFeed.feed.slice(0, feed.max);
|
||||||
|
}
|
||||||
|
|
||||||
if(remoteFeed.feed.length > feed.size() || (remoteFeed.feed.length == feed.size() && remoteFeed.feedDate > feed.feedDate))
|
if(remoteFeed.feed.length > feed.size() || (remoteFeed.feed.length == feed.size() && remoteFeed.feedDate > feed.feedDate))
|
||||||
{
|
{
|
||||||
logT('feed', 'replace our feed with remote feed')
|
logT('feed', 'replace our feed with remote feed')
|
||||||
|
Loading…
Reference in New Issue
Block a user