поиск среди остаточных результатов, отображения списка файлов
This commit is contained in:
7
index.js
7
index.js
@ -247,6 +247,7 @@ io.on('connection', function(socket)
|
|||||||
const index = navigation.index || 0;
|
const index = navigation.index || 0;
|
||||||
const limit = navigation.limit || 10;
|
const limit = navigation.limit || 10;
|
||||||
let search = {};
|
let search = {};
|
||||||
|
//socketMysql.query('SELECT * FROM `torrents` WHERE `name` like \'%' + text + '%\' LIMIT ?,?', [index, limit], function (error, rows, fields) {
|
||||||
sphinx.query('SELECT * FROM `torrents_index`,`torrents_index_delta` WHERE MATCH(?) ' + (safeSearch ? "and contentcategory != 'xxx'" : '') + ' LIMIT ?,?', [text, index, limit], function (error, rows, fields) {
|
sphinx.query('SELECT * FROM `torrents_index`,`torrents_index_delta` WHERE MATCH(?) ' + (safeSearch ? "and contentcategory != 'xxx'" : '') + ' LIMIT ?,?', [text, index, limit], function (error, rows, fields) {
|
||||||
if(!rows) {
|
if(!rows) {
|
||||||
callback(undefined)
|
callback(undefined)
|
||||||
@ -276,14 +277,18 @@ io.on('connection', function(socket)
|
|||||||
const index = navigation.index || 0;
|
const index = navigation.index || 0;
|
||||||
const limit = navigation.limit || 10;
|
const limit = navigation.limit || 10;
|
||||||
let search = {};
|
let search = {};
|
||||||
|
//socketMysql.query('SELECT * FROM `files` inner join torrents on(torrents.hash = files.hash) WHERE files.path like \'%' + text + '%\' LIMIT ?,?', [index, limit], function (error, rows, fields) {
|
||||||
sphinx.query('SELECT * FROM `files_index`,`files_index_delta` WHERE MATCH(?) ' + (safeSearch ? "and contentcategory != 'xxx'" : '') + ' LIMIT ?,?', [text, index, limit], function (error, rows, fields) {
|
sphinx.query('SELECT * FROM `files_index`,`files_index_delta` WHERE MATCH(?) ' + (safeSearch ? "and contentcategory != 'xxx'" : '') + ' LIMIT ?,?', [text, index, limit], function (error, rows, fields) {
|
||||||
if(!rows) {
|
if(!rows) {
|
||||||
callback(undefined)
|
callback(undefined)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rows.forEach((row) => {
|
rows.forEach((row) => {
|
||||||
|
if(!(row.hash in search))
|
||||||
search[row.hash] = baseRowData(row);
|
search[row.hash] = baseRowData(row);
|
||||||
search[row.hash].path = row.path;
|
if(!search[row.hash].path)
|
||||||
|
search[row.hash].path = []
|
||||||
|
search[row.hash].path.push(row.path);
|
||||||
});
|
});
|
||||||
callback(Object.keys(search).map(function(key) {
|
callback(Object.keys(search).map(function(key) {
|
||||||
return search[key];
|
return search[key];
|
||||||
|
@ -3,22 +3,24 @@ import React, { Component } from 'react';
|
|||||||
import TorrentLine from './torrent'
|
import TorrentLine from './torrent'
|
||||||
import {List, ListItem} from 'material-ui/List';
|
import {List, ListItem} from 'material-ui/List';
|
||||||
import Subheader from 'material-ui/Subheader';
|
import Subheader from 'material-ui/Subheader';
|
||||||
|
import Divider from 'material-ui/Divider';
|
||||||
|
|
||||||
export default class SearchResults extends Component {
|
export default class SearchResults extends Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<List style={{minWidth: '20em'}}>
|
<List style={{minWidth: '20em'}}>
|
||||||
{
|
{
|
||||||
this.props.results && this.props.results.length > 0
|
(this.props.torrentsSearchResults && this.props.torrentsSearchResults.length > 0)
|
||||||
|
|| (this.props.filesSearchResults && this.props.filesSearchResults.length > 0)
|
||||||
?
|
?
|
||||||
<Subheader inset={true}>Search results</Subheader>
|
<Subheader inset={true}>Search results</Subheader>
|
||||||
:
|
:
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
this.props.results && this.props.results.length > 0
|
this.props.torrentsSearchResults && this.props.torrentsSearchResults.length > 0
|
||||||
?
|
?
|
||||||
this.props.results.map((torrent, index) =>{
|
this.props.torrentsSearchResults.map((torrent, index) =>{
|
||||||
return(
|
return(
|
||||||
<TorrentLine torrent={torrent} key={index} />
|
<TorrentLine torrent={torrent} key={index} />
|
||||||
);
|
);
|
||||||
@ -26,6 +28,43 @@ export default class SearchResults extends Component {
|
|||||||
:
|
:
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
this.props.moreTorrentsEnabled
|
||||||
|
?
|
||||||
|
<div>
|
||||||
|
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText={<span>More Torrents</span>} onClick={() => {
|
||||||
|
if(this.props.onMoreTorrents)
|
||||||
|
this.props.onMoreTorrents();
|
||||||
|
}} />
|
||||||
|
<Divider />
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
null
|
||||||
|
}
|
||||||
|
{
|
||||||
|
this.props.filesSearchResults && this.props.filesSearchResults.length > 0
|
||||||
|
?
|
||||||
|
this.props.filesSearchResults.map((torrent, index) =>{
|
||||||
|
return(
|
||||||
|
<TorrentLine torrent={torrent} key={index} />
|
||||||
|
);
|
||||||
|
})
|
||||||
|
:
|
||||||
|
null
|
||||||
|
}
|
||||||
|
{
|
||||||
|
this.props.moreFilesEnabled
|
||||||
|
?
|
||||||
|
<div>
|
||||||
|
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText='More Files' onClick={() => {
|
||||||
|
if(this.props.onMoreFiles)
|
||||||
|
this.props.onMoreFiles();
|
||||||
|
}} />
|
||||||
|
<Divider />
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
null
|
||||||
|
}
|
||||||
</List>
|
</List>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -20,17 +20,27 @@ export default class Search extends Component {
|
|||||||
safeSearchText: 'safe search enabled',
|
safeSearchText: 'safe search enabled',
|
||||||
safeSearchColor: 'rgb(0, 188, 212)'
|
safeSearchColor: 'rgb(0, 188, 212)'
|
||||||
}
|
}
|
||||||
|
this.searchLimit = 10
|
||||||
}
|
}
|
||||||
|
|
||||||
search() {
|
search() {
|
||||||
this.setState({
|
this.setState({
|
||||||
searchingIndicator: true
|
searchingIndicator: true
|
||||||
});
|
});
|
||||||
this.searchData = [];
|
this.searchTorrents = [];
|
||||||
|
this.moreSearchTorrents = true;
|
||||||
|
this.searchFiles = [];
|
||||||
|
this.moreSearchFiles = true;
|
||||||
|
this.currentSearch = this.searchValue;
|
||||||
let queries = 2;
|
let queries = 2;
|
||||||
window.torrentSocket.emit('searchTorrent', this.searchValue, {limit: 10, safeSearch: !this.notSafeSearch}, window.customLoader((torrents) => {
|
window.torrentSocket.emit('searchTorrent', this.searchValue, {
|
||||||
|
limit: this.searchLimit,
|
||||||
|
safeSearch: !this.notSafeSearch
|
||||||
|
}, window.customLoader((torrents) => {
|
||||||
if(torrents) {
|
if(torrents) {
|
||||||
this.searchData = this.searchData.concat(torrents);
|
this.searchTorrents = torrents;
|
||||||
|
if(torrents.length != this.searchLimit)
|
||||||
|
this.moreSearchTorrents = false;
|
||||||
}
|
}
|
||||||
if(--queries == 0) {
|
if(--queries == 0) {
|
||||||
this.setState({
|
this.setState({
|
||||||
@ -40,9 +50,19 @@ export default class Search extends Component {
|
|||||||
this.forceUpdate();
|
this.forceUpdate();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
window.torrentSocket.emit('searchFiles', this.searchValue, {limit: 10, safeSearch: !this.notSafeSearch}, window.customLoader((torrents) => {
|
window.torrentSocket.emit('searchFiles', this.searchValue, {
|
||||||
|
limit: this.searchLimit,
|
||||||
|
safeSearch: !this.notSafeSearch
|
||||||
|
}, window.customLoader((torrents) => {
|
||||||
if(torrents) {
|
if(torrents) {
|
||||||
this.searchData = this.searchData.concat(torrents);
|
this.searchFiles = torrents;
|
||||||
|
let files = 0;
|
||||||
|
torrents.forEach((torrent) => {
|
||||||
|
if(torrent.path && torrent.path.length > 0)
|
||||||
|
files += torrent.path.length
|
||||||
|
});
|
||||||
|
if(files != this.searchLimit)
|
||||||
|
this.moreSearchFiles = false;
|
||||||
}
|
}
|
||||||
if(--queries == 0) {
|
if(--queries == 0) {
|
||||||
this.setState({
|
this.setState({
|
||||||
@ -53,6 +73,47 @@ export default class Search extends Component {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
moreTorrents() {
|
||||||
|
window.torrentSocket.emit('searchTorrent', this.currentSearch, {
|
||||||
|
index: this.searchTorrents.length,
|
||||||
|
limit: this.searchLimit,
|
||||||
|
safeSearch: !this.notSafeSearch
|
||||||
|
}, window.customLoader((torrents) => {
|
||||||
|
if(torrents) {
|
||||||
|
this.searchTorrents = this.searchTorrents.concat(torrents);
|
||||||
|
if(torrents.length != this.searchLimit)
|
||||||
|
this.moreSearchTorrents = false;
|
||||||
|
|
||||||
|
this.forceUpdate();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
moreFiles() {
|
||||||
|
let index = 0;
|
||||||
|
this.searchFiles.forEach((torrent) => {
|
||||||
|
if(torrent.path && torrent.path.length > 0)
|
||||||
|
index += torrent.path.length;
|
||||||
|
});
|
||||||
|
|
||||||
|
window.torrentSocket.emit('searchFiles', this.currentSearch, {
|
||||||
|
index: index,
|
||||||
|
limit: this.searchLimit,
|
||||||
|
safeSearch: !this.notSafeSearch
|
||||||
|
}, window.customLoader((torrents) => {
|
||||||
|
if(torrents) {
|
||||||
|
this.searchFiles = this.searchFiles.concat(torrents);
|
||||||
|
let files = 0;
|
||||||
|
torrents.forEach((torrent) => {
|
||||||
|
if(torrent.path && torrent.path.length > 0)
|
||||||
|
files += torrent.path.length
|
||||||
|
});
|
||||||
|
if(files != this.searchLimit)
|
||||||
|
this.moreSearchFiles = false;
|
||||||
|
|
||||||
|
this.forceUpdate();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.newStatisticFunc = (statistic) => {
|
this.newStatisticFunc = (statistic) => {
|
||||||
if(statistic) {
|
if(statistic) {
|
||||||
@ -139,7 +200,15 @@ export default class Search extends Component {
|
|||||||
:
|
:
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
<SearchResults results={this.searchData} />
|
<SearchResults
|
||||||
|
torrentsSearchResults={this.searchTorrents}
|
||||||
|
filesSearchResults={this.searchFiles}
|
||||||
|
|
||||||
|
moreTorrentsEnabled={this.moreSearchTorrents}
|
||||||
|
moreFilesEnabled={this.moreSearchFiles}
|
||||||
|
onMoreTorrents={() => this.moreTorrents()}
|
||||||
|
onMoreFiles={() => this.moreFiles()}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ return (
|
|||||||
if(node)
|
if(node)
|
||||||
node.onclick = () => { return false }
|
node.onclick = () => { return false }
|
||||||
}}>
|
}}>
|
||||||
<div className='column' style={{height: 'auto', whiteSpace: 'normal'}}>
|
<div className='column' style={{height: 'auto', whiteSpace: 'normal', paddingTop: '0.30em'}}>
|
||||||
<div>
|
<div>
|
||||||
{
|
{
|
||||||
formatBytes(torrent.size, 1) + ' (' + torrent.files + ' files)'
|
formatBytes(torrent.size, 1) + ' (' + torrent.files + ' files)'
|
||||||
@ -36,14 +36,16 @@ return (
|
|||||||
{
|
{
|
||||||
torrent.path && torrent.path.length > 0
|
torrent.path && torrent.path.length > 0
|
||||||
?
|
?
|
||||||
<div className='break-word fs0-75' style={{paddingTop: '0.3em'}}>{torrent.path}</div>
|
torrent.path.map((path, index) => {
|
||||||
|
return <div key={index} className='break-word fs0-75' style={{paddingTop: '0.3em', marginLeft: '0.6em'}}>{path}</div>
|
||||||
|
})
|
||||||
:
|
:
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
torrent.seeders || torrent.leechers || torrent.completed
|
torrent.seeders || torrent.leechers || torrent.completed
|
||||||
?
|
?
|
||||||
<div className='break-word fs0-85' style={{paddingTop: '0.3em'}}>
|
<div className='break-word fs0-85' style={{paddingTop: '0.35em'}}>
|
||||||
<span style={{color: (torrent.seeders > 0 ? '#00C853' : 'grey')}}>{torrent.seeders} seeders</span>
|
<span style={{color: (torrent.seeders > 0 ? '#00C853' : 'grey')}}>{torrent.seeders} seeders</span>
|
||||||
<span style={{color: (torrent.leechers > 0 ? '#AA00FF' : 'grey'), marginLeft: '12px'}}>{torrent.leechers} leechers</span>
|
<span style={{color: (torrent.leechers > 0 ? '#AA00FF' : 'grey'), marginLeft: '12px'}}>{torrent.leechers} leechers</span>
|
||||||
<span style={{color: (torrent.completed > 0 ? '#FF6D00' : 'grey'), marginLeft: '12px'}}>{torrent.completed} completed</span>
|
<span style={{color: (torrent.completed > 0 ? '#FF6D00' : 'grey'), marginLeft: '12px'}}>{torrent.completed} completed</span>
|
||||||
|
Reference in New Issue
Block a user