feat(downloading): choose dir on new download
This commit is contained in:
55
src/app/context-menu.js
Normal file
55
src/app/context-menu.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import React, {Component} from 'react';
|
||||||
|
import {List, ListItem} from 'material-ui/List';
|
||||||
|
|
||||||
|
export default class ContextMenu extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props)
|
||||||
|
this.state = {toggle: false}
|
||||||
|
}
|
||||||
|
render()
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<div style={{position: 'relative', display: 'inline-block'}}>
|
||||||
|
<div style={{display: 'inline-block'}} onClick={(e) => {
|
||||||
|
this.setState({toggle: !this.state.toggle})
|
||||||
|
if(this.props.onClick)
|
||||||
|
this.props.onClick(e)
|
||||||
|
}}>
|
||||||
|
{this.props.children}
|
||||||
|
</div>
|
||||||
|
{
|
||||||
|
this.state.toggle
|
||||||
|
&&
|
||||||
|
<div style={{width: '100%', height: '100%', position: 'fixed', top: 0, left: 0, zIndex: 2}} onClick={(e) => {
|
||||||
|
this.setState({toggle: !this.state.toggle})
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
}}><span></span></div>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
this.state.toggle
|
||||||
|
&&
|
||||||
|
<List className='context-menu' style={Object.assign({
|
||||||
|
position: 'absolute',
|
||||||
|
maxWidth: 350,
|
||||||
|
minWidth: 200,
|
||||||
|
top: -20,
|
||||||
|
backgroundColor: '#ffffff',
|
||||||
|
boxShadow: '0 0 10px rgba(0,0,0,0.45)',
|
||||||
|
borderRadius: 6,
|
||||||
|
zIndex: 3
|
||||||
|
}, !this.props.rightAlign ? { left: -30 } : { right: -30 })}>
|
||||||
|
{
|
||||||
|
this.props.menu && this.props.menu.map(menu => <ListItem style={{fontSize: '0.9em'}} primaryText={menu.name} leftIcon={menu.icon} onClick={(e) => {
|
||||||
|
menu.click()
|
||||||
|
this.setState({toggle: !this.state.toggle})
|
||||||
|
e.preventDefault()
|
||||||
|
e.stopPropagation()
|
||||||
|
}} />)
|
||||||
|
}
|
||||||
|
</List>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
73
src/app/download-torrent-menu.js
Normal file
73
src/app/download-torrent-menu.js
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import ContextMenu from './context-menu'
|
||||||
|
|
||||||
|
let dialog
|
||||||
|
if(typeof WEB === 'undefined')
|
||||||
|
dialog = require('electron').remote.dialog
|
||||||
|
|
||||||
|
export default (props) => {
|
||||||
|
return (
|
||||||
|
<ContextMenu rightAlign={true} onClick={(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
}} menu={[
|
||||||
|
{name: __('Download'), click: () => {
|
||||||
|
window.torrentSocket.emit('download', props.torrent, null, (added) => {
|
||||||
|
if(props.onAdded)
|
||||||
|
props.onAdded(added)
|
||||||
|
})
|
||||||
|
}, icon: <svg style={{
|
||||||
|
fill: 'black'
|
||||||
|
}} viewBox="0 0 56 56">
|
||||||
|
<g>
|
||||||
|
<path d="M35.586,41.586L31,46.172V28c0-1.104-0.896-2-2-2s-2,0.896-2,2v18.172l-4.586-4.586c-0.781-0.781-2.047-0.781-2.828,0
|
||||||
|
s-0.781,2.047,0,2.828l7.999,7.999c0.093,0.094,0.196,0.177,0.307,0.251c0.047,0.032,0.099,0.053,0.148,0.081
|
||||||
|
c0.065,0.036,0.127,0.075,0.196,0.103c0.065,0.027,0.133,0.042,0.2,0.062c0.058,0.017,0.113,0.04,0.173,0.051
|
||||||
|
C28.738,52.986,28.869,53,29,53s0.262-0.014,0.392-0.04c0.06-0.012,0.115-0.034,0.173-0.051c0.067-0.02,0.135-0.035,0.2-0.062
|
||||||
|
c0.069-0.028,0.131-0.067,0.196-0.103c0.05-0.027,0.101-0.049,0.148-0.081c0.11-0.074,0.213-0.157,0.307-0.251l7.999-7.999
|
||||||
|
c0.781-0.781,0.781-2.047,0-2.828S36.367,40.805,35.586,41.586z"/>
|
||||||
|
<path d="M47.835,18.986c-0.137-0.019-2.457-0.335-4.684,0.002C43.1,18.996,43.049,19,42.999,19c-0.486,0-0.912-0.354-0.987-0.85
|
||||||
|
c-0.083-0.546,0.292-1.056,0.838-1.139c1.531-0.233,3.062-0.196,4.083-0.124C46.262,9.135,39.83,3,32.085,3
|
||||||
|
C27.388,3,22.667,5.379,19.8,9.129C21.754,10.781,23,13.246,23,16c0,0.553-0.447,1-1,1s-1-0.447-1-1
|
||||||
|
c0-2.462-1.281-4.627-3.209-5.876c-0.227-0.147-0.462-0.277-0.702-0.396c-0.069-0.034-0.139-0.069-0.21-0.101
|
||||||
|
c-0.272-0.124-0.55-0.234-0.835-0.321c-0.035-0.01-0.071-0.017-0.106-0.027c-0.259-0.075-0.522-0.132-0.789-0.177
|
||||||
|
c-0.078-0.013-0.155-0.025-0.233-0.036C14.614,9.027,14.309,9,14,9c-3.859,0-7,3.141-7,7c0,0.082,0.006,0.163,0.012,0.244
|
||||||
|
l0.012,0.21l-0.009,0.16C7.008,16.744,7,16.873,7,17v0.63l-0.567,0.271C2.705,19.688,0,24,0,28.154C0,34.135,4.865,39,10.845,39H25
|
||||||
|
V28c0-2.209,1.791-4,4-4s4,1.791,4,4v11h2.353c0.059,0,0.116-0.005,0.174-0.009l0.198-0.011l0.271,0.011
|
||||||
|
C36.053,38.995,36.11,39,36.169,39h9.803C51.501,39,56,34.501,56,28.972C56,24.161,52.49,19.872,47.835,18.986z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
},
|
||||||
|
{name: __('Download to') + '...', click: () => {
|
||||||
|
if(dialog)
|
||||||
|
{
|
||||||
|
const path = dialog.showOpenDialog({
|
||||||
|
properties: ['openDirectory']
|
||||||
|
});
|
||||||
|
if(!path || path.length < 1)
|
||||||
|
return
|
||||||
|
window.torrentSocket.emit('download', props.torrent, path[0], (added) => {
|
||||||
|
if(props.onAdded)
|
||||||
|
props.onAdded(added)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
icon: <svg viewBox="0 0 60 60">
|
||||||
|
<g>
|
||||||
|
<path d="M54.168,0H5.832C4.271,0,3,1.271,3,2.832v54.336C3,58.729,4.271,60,5.832,60h48.336C55.729,60,57,58.729,57,57.168V2.832
|
||||||
|
C57,1.271,55.729,0,54.168,0z M5.832,2h48.336C54.627,2,55,2.373,55,2.832V29H5V2.832C5,2.373,5.373,2,5.832,2z M54.168,58H5.832
|
||||||
|
C5.373,58,5,57.627,5,57.168V31h50v26.168C55,57.627,54.627,58,54.168,58z"/>
|
||||||
|
<path d="M24.505,18h10.99C37.428,18,39,16.428,39,14.495V13c0-0.553-0.447-1-1-1s-1,0.447-1,1v1.495C37,15.325,36.325,16,35.495,16
|
||||||
|
h-10.99C23.675,16,23,15.325,23,14.495V13c0-0.553-0.447-1-1-1s-1,0.447-1,1v1.495C21,16.428,22.572,18,24.505,18z"/>
|
||||||
|
<path d="M38,41c-0.553,0-1,0.447-1,1v1.495C37,44.325,36.325,45,35.495,45h-10.99C23.675,45,23,44.325,23,43.495V42
|
||||||
|
c0-0.553-0.447-1-1-1s-1,0.447-1,1v1.495C21,45.428,22.572,47,24.505,47h10.99C37.428,47,39,45.428,39,43.495V42
|
||||||
|
C39,41.447,38.553,41,38,41z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
}
|
||||||
|
]}>
|
||||||
|
{props.children}
|
||||||
|
</ContextMenu>
|
||||||
|
)
|
||||||
|
}
|
@ -20,6 +20,7 @@ import FlatButton from 'material-ui/FlatButton';
|
|||||||
import {fileTypeDetect} from './content'
|
import {fileTypeDetect} from './content'
|
||||||
import {contentIcon} from './torrent'
|
import {contentIcon} from './torrent'
|
||||||
import TrackersImages from './trackers-images'
|
import TrackersImages from './trackers-images'
|
||||||
|
import DownloadTorrentMenu from './download-torrent-menu'
|
||||||
|
|
||||||
let parseDescriptionText = (text) => {
|
let parseDescriptionText = (text) => {
|
||||||
return text.split("\n").map(function(item) {
|
return text.split("\n").map(function(item) {
|
||||||
@ -103,17 +104,17 @@ const treeToTorrentFiles = (tree, torrent, toggles) => {
|
|||||||
leftIcon={!tree[file].__fileBT ? <FileFolder /> : contentIcon(fileTypeDetect({path: file}))}
|
leftIcon={!tree[file].__fileBT ? <FileFolder /> : contentIcon(fileTypeDetect({path: file}))}
|
||||||
rightToggle={
|
rightToggle={
|
||||||
newToggles.length > 0
|
newToggles.length > 0
|
||||||
&&
|
&&
|
||||||
<Toggle
|
<Toggle
|
||||||
toggled={newToggles.every( ({selected}) => selected )}
|
toggled={newToggles.every( ({selected}) => selected )}
|
||||||
onToggle={(e, checked) => {
|
onToggle={(e, checked) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
let toggleValues = {}
|
let toggleValues = {}
|
||||||
newToggles.forEach(({downloadIndex}) => toggleValues[downloadIndex] = checked)
|
newToggles.forEach(({downloadIndex}) => toggleValues[downloadIndex] = checked)
|
||||||
window.torrentSocket.emit('downloadSelectFiles', torrent, toggleValues)
|
window.torrentSocket.emit('downloadSelectFiles', torrent, toggleValues)
|
||||||
}}
|
}}
|
||||||
/>}
|
/>}
|
||||||
/>);
|
/>);
|
||||||
|
|
||||||
if(toggles)
|
if(toggles)
|
||||||
@ -254,7 +255,7 @@ export default class TorrentPage extends Page {
|
|||||||
// Получаем более новую статистику пира
|
// Получаем более новую статистику пира
|
||||||
if((Date.now() / 1000) - this.torrent.trackersChecked > 10 * 60) {
|
if((Date.now() / 1000) - this.torrent.trackersChecked > 10 * 60) {
|
||||||
window.torrentSocket.emit('checkTrackers', this.torrent.hash);
|
window.torrentSocket.emit('checkTrackers', this.torrent.hash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, () => {
|
}, () => {
|
||||||
this.setState({
|
this.setState({
|
||||||
@ -273,15 +274,15 @@ export default class TorrentPage extends Page {
|
|||||||
if(this.props.hash != hash)
|
if(this.props.hash != hash)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(filesList)
|
if(filesList)
|
||||||
{
|
{
|
||||||
if(this.torrent)
|
if(this.torrent)
|
||||||
{
|
{
|
||||||
this.torrent.filesList = filesList
|
this.torrent.filesList = filesList
|
||||||
this.forceUpdate()
|
this.forceUpdate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.getTorrentInfo();
|
this.getTorrentInfo();
|
||||||
}
|
}
|
||||||
window.torrentSocket.on('filesReady', this.filesUpdated);
|
window.torrentSocket.on('filesReady', this.filesUpdated);
|
||||||
@ -447,30 +448,27 @@ export default class TorrentPage extends Page {
|
|||||||
{
|
{
|
||||||
!this.state.downloaded && !this.state.downloading && !this.state.startingDownloading
|
!this.state.downloaded && !this.state.downloading && !this.state.startingDownloading
|
||||||
&&
|
&&
|
||||||
<RaisedButton
|
<DownloadTorrentMenu torrent={this.torrent}>
|
||||||
href={`magnet:?xt=urn:btih:${this.torrent.hash}`}
|
<RaisedButton
|
||||||
target="_self"
|
href={`magnet:?xt=urn:btih:${this.torrent.hash}`}
|
||||||
label={__('Download')}
|
target="_self"
|
||||||
backgroundColor='#00C853'
|
label={__('Download')}
|
||||||
labelColor='white'
|
backgroundColor='#00C853'
|
||||||
style={{marginTop: 8}}
|
labelColor='white'
|
||||||
onClick={(e) => {
|
style={{marginTop: 8}}
|
||||||
e.preventDefault();
|
onClick={(e) => {
|
||||||
window.torrentSocket.emit('download', this.torrent, null, (added) => {
|
e.preventDefault();
|
||||||
if(added)
|
}}
|
||||||
this.setState({startingDownloading: true})
|
icon={
|
||||||
})
|
<svg viewBox="0 0 56 56" fill='white'>
|
||||||
}}
|
<g>
|
||||||
icon={
|
<path d="M35.586,41.586L31,46.172V28c0-1.104-0.896-2-2-2s-2,0.896-2,2v18.172l-4.586-4.586c-0.781-0.781-2.047-0.781-2.828,0
|
||||||
<svg viewBox="0 0 56 56" fill='white'>
|
|
||||||
<g>
|
|
||||||
<path d="M35.586,41.586L31,46.172V28c0-1.104-0.896-2-2-2s-2,0.896-2,2v18.172l-4.586-4.586c-0.781-0.781-2.047-0.781-2.828,0
|
|
||||||
s-0.781,2.047,0,2.828l7.999,7.999c0.093,0.094,0.196,0.177,0.307,0.251c0.047,0.032,0.099,0.053,0.148,0.081
|
s-0.781,2.047,0,2.828l7.999,7.999c0.093,0.094,0.196,0.177,0.307,0.251c0.047,0.032,0.099,0.053,0.148,0.081
|
||||||
c0.065,0.036,0.127,0.075,0.196,0.103c0.065,0.027,0.133,0.042,0.2,0.062c0.058,0.017,0.113,0.04,0.173,0.051
|
c0.065,0.036,0.127,0.075,0.196,0.103c0.065,0.027,0.133,0.042,0.2,0.062c0.058,0.017,0.113,0.04,0.173,0.051
|
||||||
C28.738,52.986,28.869,53,29,53s0.262-0.014,0.392-0.04c0.06-0.012,0.115-0.034,0.173-0.051c0.067-0.02,0.135-0.035,0.2-0.062
|
C28.738,52.986,28.869,53,29,53s0.262-0.014,0.392-0.04c0.06-0.012,0.115-0.034,0.173-0.051c0.067-0.02,0.135-0.035,0.2-0.062
|
||||||
c0.069-0.028,0.131-0.067,0.196-0.103c0.05-0.027,0.101-0.049,0.148-0.081c0.11-0.074,0.213-0.157,0.307-0.251l7.999-7.999
|
c0.069-0.028,0.131-0.067,0.196-0.103c0.05-0.027,0.101-0.049,0.148-0.081c0.11-0.074,0.213-0.157,0.307-0.251l7.999-7.999
|
||||||
c0.781-0.781,0.781-2.047,0-2.828S36.367,40.805,35.586,41.586z"/>
|
c0.781-0.781,0.781-2.047,0-2.828S36.367,40.805,35.586,41.586z"/>
|
||||||
<path d="M47.835,18.986c-0.137-0.019-2.457-0.335-4.684,0.002C43.1,18.996,43.049,19,42.999,19c-0.486,0-0.912-0.354-0.987-0.85
|
<path d="M47.835,18.986c-0.137-0.019-2.457-0.335-4.684,0.002C43.1,18.996,43.049,19,42.999,19c-0.486,0-0.912-0.354-0.987-0.85
|
||||||
c-0.083-0.546,0.292-1.056,0.838-1.139c1.531-0.233,3.062-0.196,4.083-0.124C46.262,9.135,39.83,3,32.085,3
|
c-0.083-0.546,0.292-1.056,0.838-1.139c1.531-0.233,3.062-0.196,4.083-0.124C46.262,9.135,39.83,3,32.085,3
|
||||||
C27.388,3,22.667,5.379,19.8,9.129C21.754,10.781,23,13.246,23,16c0,0.553-0.447,1-1,1s-1-0.447-1-1
|
C27.388,3,22.667,5.379,19.8,9.129C21.754,10.781,23,13.246,23,16c0,0.553-0.447,1-1,1s-1-0.447-1-1
|
||||||
c0-2.462-1.281-4.627-3.209-5.876c-0.227-0.147-0.462-0.277-0.702-0.396c-0.069-0.034-0.139-0.069-0.21-0.101
|
c0-2.462-1.281-4.627-3.209-5.876c-0.227-0.147-0.462-0.277-0.702-0.396c-0.069-0.034-0.139-0.069-0.21-0.101
|
||||||
@ -479,10 +477,11 @@ export default class TorrentPage extends Page {
|
|||||||
l0.012,0.21l-0.009,0.16C7.008,16.744,7,16.873,7,17v0.63l-0.567,0.271C2.705,19.688,0,24,0,28.154C0,34.135,4.865,39,10.845,39H25
|
l0.012,0.21l-0.009,0.16C7.008,16.744,7,16.873,7,17v0.63l-0.567,0.271C2.705,19.688,0,24,0,28.154C0,34.135,4.865,39,10.845,39H25
|
||||||
V28c0-2.209,1.791-4,4-4s4,1.791,4,4v11h2.353c0.059,0,0.116-0.005,0.174-0.009l0.198-0.011l0.271,0.011
|
V28c0-2.209,1.791-4,4-4s4,1.791,4,4v11h2.353c0.059,0,0.116-0.005,0.174-0.009l0.198-0.011l0.271,0.011
|
||||||
C36.053,38.995,36.11,39,36.169,39h9.803C51.501,39,56,34.501,56,28.972C56,24.161,52.49,19.872,47.835,18.986z"/>
|
C36.053,38.995,36.11,39,36.169,39h9.803C51.501,39,56,34.501,56,28.972C56,24.161,52.49,19.872,47.835,18.986z"/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
</DownloadTorrentMenu>
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
this.state.downloading
|
this.state.downloading
|
||||||
|
@ -11,6 +11,7 @@ import LinearProgress from './LinearProgress';
|
|||||||
let rating = require('./rating');
|
let rating = require('./rating');
|
||||||
import scrollBack from './remember-scroll'
|
import scrollBack from './remember-scroll'
|
||||||
import TrackersImages from './trackers-images'
|
import TrackersImages from './trackers-images'
|
||||||
|
import DownloadTorrentMenu from './download-torrent-menu'
|
||||||
|
|
||||||
const contentIcon = (type, category, fill = 'grey') => {
|
const contentIcon = (type, category, fill = 'grey') => {
|
||||||
if(category == 'xxx')
|
if(category == 'xxx')
|
||||||
@ -184,6 +185,8 @@ export default class Torrent extends Component {
|
|||||||
this.state.downloadRemoveOnDone = removeOnDone
|
this.state.downloadRemoveOnDone = removeOnDone
|
||||||
this.state.downloadPaused = paused
|
this.state.downloadPaused = paused
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.downloadPathInput = React.createRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount()
|
componentDidMount()
|
||||||
@ -438,41 +441,39 @@ export default class Torrent extends Component {
|
|||||||
{
|
{
|
||||||
!this.state.startingDownloading && !this.state.downloading && !this.state.downloaded
|
!this.state.startingDownloading && !this.state.downloading && !this.state.downloaded
|
||||||
?
|
?
|
||||||
<ToolTip hint={__('Download using built-in client')} right={true}>
|
<DownloadTorrentMenu torrent={torrent} onAdded={(added) => {
|
||||||
<a href={`magnet:?xt=urn:btih:${torrent.hash}`}>
|
if(added)
|
||||||
<svg style={{
|
this.setState({startingDownloading: true})
|
||||||
height: '24px',
|
}}>
|
||||||
marginRight: 12,
|
<ToolTip hint={__('Download using built-in client')} right={true}>
|
||||||
fill: torrent.contentCategory != 'xxx' ? (torrent.peer ? '#5643db' : 'black') : (torrent.peer ? '#9083e2' : 'grey')
|
<a href={`magnet:?xt=urn:btih:${torrent.hash}`}>
|
||||||
}} onClick={(e) => {
|
<svg style={{
|
||||||
e.preventDefault();
|
height: '24px',
|
||||||
e.stopPropagation();
|
marginRight: 12,
|
||||||
window.torrentSocket.emit('download', torrent, null, (added) => {
|
fill: torrent.contentCategory != 'xxx' ? (torrent.peer ? '#5643db' : 'black') : (torrent.peer ? '#9083e2' : 'grey')
|
||||||
if(added)
|
}} viewBox="0 0 56 56">
|
||||||
this.setState({startingDownloading: true})
|
<g>
|
||||||
})
|
<path d="M35.586,41.586L31,46.172V28c0-1.104-0.896-2-2-2s-2,0.896-2,2v18.172l-4.586-4.586c-0.781-0.781-2.047-0.781-2.828,0
|
||||||
}} viewBox="0 0 56 56">
|
s-0.781,2.047,0,2.828l7.999,7.999c0.093,0.094,0.196,0.177,0.307,0.251c0.047,0.032,0.099,0.053,0.148,0.081
|
||||||
<g>
|
c0.065,0.036,0.127,0.075,0.196,0.103c0.065,0.027,0.133,0.042,0.2,0.062c0.058,0.017,0.113,0.04,0.173,0.051
|
||||||
<path d="M35.586,41.586L31,46.172V28c0-1.104-0.896-2-2-2s-2,0.896-2,2v18.172l-4.586-4.586c-0.781-0.781-2.047-0.781-2.828,0
|
C28.738,52.986,28.869,53,29,53s0.262-0.014,0.392-0.04c0.06-0.012,0.115-0.034,0.173-0.051c0.067-0.02,0.135-0.035,0.2-0.062
|
||||||
s-0.781,2.047,0,2.828l7.999,7.999c0.093,0.094,0.196,0.177,0.307,0.251c0.047,0.032,0.099,0.053,0.148,0.081
|
c0.069-0.028,0.131-0.067,0.196-0.103c0.05-0.027,0.101-0.049,0.148-0.081c0.11-0.074,0.213-0.157,0.307-0.251l7.999-7.999
|
||||||
c0.065,0.036,0.127,0.075,0.196,0.103c0.065,0.027,0.133,0.042,0.2,0.062c0.058,0.017,0.113,0.04,0.173,0.051
|
c0.781-0.781,0.781-2.047,0-2.828S36.367,40.805,35.586,41.586z"/>
|
||||||
C28.738,52.986,28.869,53,29,53s0.262-0.014,0.392-0.04c0.06-0.012,0.115-0.034,0.173-0.051c0.067-0.02,0.135-0.035,0.2-0.062
|
<path d="M47.835,18.986c-0.137-0.019-2.457-0.335-4.684,0.002C43.1,18.996,43.049,19,42.999,19c-0.486,0-0.912-0.354-0.987-0.85
|
||||||
c0.069-0.028,0.131-0.067,0.196-0.103c0.05-0.027,0.101-0.049,0.148-0.081c0.11-0.074,0.213-0.157,0.307-0.251l7.999-7.999
|
c-0.083-0.546,0.292-1.056,0.838-1.139c1.531-0.233,3.062-0.196,4.083-0.124C46.262,9.135,39.83,3,32.085,3
|
||||||
c0.781-0.781,0.781-2.047,0-2.828S36.367,40.805,35.586,41.586z"/>
|
C27.388,3,22.667,5.379,19.8,9.129C21.754,10.781,23,13.246,23,16c0,0.553-0.447,1-1,1s-1-0.447-1-1
|
||||||
<path d="M47.835,18.986c-0.137-0.019-2.457-0.335-4.684,0.002C43.1,18.996,43.049,19,42.999,19c-0.486,0-0.912-0.354-0.987-0.85
|
c0-2.462-1.281-4.627-3.209-5.876c-0.227-0.147-0.462-0.277-0.702-0.396c-0.069-0.034-0.139-0.069-0.21-0.101
|
||||||
c-0.083-0.546,0.292-1.056,0.838-1.139c1.531-0.233,3.062-0.196,4.083-0.124C46.262,9.135,39.83,3,32.085,3
|
c-0.272-0.124-0.55-0.234-0.835-0.321c-0.035-0.01-0.071-0.017-0.106-0.027c-0.259-0.075-0.522-0.132-0.789-0.177
|
||||||
C27.388,3,22.667,5.379,19.8,9.129C21.754,10.781,23,13.246,23,16c0,0.553-0.447,1-1,1s-1-0.447-1-1
|
c-0.078-0.013-0.155-0.025-0.233-0.036C14.614,9.027,14.309,9,14,9c-3.859,0-7,3.141-7,7c0,0.082,0.006,0.163,0.012,0.244
|
||||||
c0-2.462-1.281-4.627-3.209-5.876c-0.227-0.147-0.462-0.277-0.702-0.396c-0.069-0.034-0.139-0.069-0.21-0.101
|
l0.012,0.21l-0.009,0.16C7.008,16.744,7,16.873,7,17v0.63l-0.567,0.271C2.705,19.688,0,24,0,28.154C0,34.135,4.865,39,10.845,39H25
|
||||||
c-0.272-0.124-0.55-0.234-0.835-0.321c-0.035-0.01-0.071-0.017-0.106-0.027c-0.259-0.075-0.522-0.132-0.789-0.177
|
V28c0-2.209,1.791-4,4-4s4,1.791,4,4v11h2.353c0.059,0,0.116-0.005,0.174-0.009l0.198-0.011l0.271,0.011
|
||||||
c-0.078-0.013-0.155-0.025-0.233-0.036C14.614,9.027,14.309,9,14,9c-3.859,0-7,3.141-7,7c0,0.082,0.006,0.163,0.012,0.244
|
C36.053,38.995,36.11,39,36.169,39h9.803C51.501,39,56,34.501,56,28.972C56,24.161,52.49,19.872,47.835,18.986z"/>
|
||||||
l0.012,0.21l-0.009,0.16C7.008,16.744,7,16.873,7,17v0.63l-0.567,0.271C2.705,19.688,0,24,0,28.154C0,34.135,4.865,39,10.845,39H25
|
</g>
|
||||||
V28c0-2.209,1.791-4,4-4s4,1.791,4,4v11h2.353c0.059,0,0.116-0.005,0.174-0.009l0.198-0.011l0.271,0.011
|
|
||||||
C36.053,38.995,36.11,39,36.169,39h9.803C51.501,39,56,34.501,56,28.972C56,24.161,52.49,19.872,47.835,18.986z"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</ToolTip>
|
</ToolTip>
|
||||||
|
</DownloadTorrentMenu>
|
||||||
:
|
:
|
||||||
this.state.startingDownloading && !this.state.downloading
|
this.state.startingDownloading && !this.state.downloading
|
||||||
?
|
?
|
||||||
|
@ -187,6 +187,7 @@
|
|||||||
"Torrents cleaned": "Torrents cleaned",
|
"Torrents cleaned": "Torrents cleaned",
|
||||||
"or with hash": "or with hash",
|
"or with hash": "or with hash",
|
||||||
"Check torrent files intergrity": "Check torrent files intergrity",
|
"Check torrent files intergrity": "Check torrent files intergrity",
|
||||||
"Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.": "Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation."
|
"Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.": "Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.",
|
||||||
|
"Download to": "Download to"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -187,6 +187,7 @@
|
|||||||
"Torrents cleaned": "Торренты очещены",
|
"Torrents cleaned": "Торренты очещены",
|
||||||
"or with hash": "или по хэшу",
|
"or with hash": "или по хэшу",
|
||||||
"Check torrent files intergrity": "Проверка целостности файлов",
|
"Check torrent files intergrity": "Проверка целостности файлов",
|
||||||
"Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.": "Включить проверку целостности файлов в базе при добавлении каждого торрента. Отключение этой опции освободит некоторорое количество ресурсов процессора при добавлении."
|
"Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.": "Включить проверку целостности файлов в базе при добавлении каждого торрента. Отключение этой опции освободит некоторорое количество ресурсов процессора при добавлении.",
|
||||||
|
"Download to": "Скачать в"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -187,6 +187,7 @@
|
|||||||
"Torrents cleaned": "Torrents cleaned",
|
"Torrents cleaned": "Torrents cleaned",
|
||||||
"or with hash": "or with hash",
|
"or with hash": "or with hash",
|
||||||
"Check torrent files intergrity": "Check torrent files intergrity",
|
"Check torrent files intergrity": "Check torrent files intergrity",
|
||||||
"Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.": "Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation."
|
"Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.": "Enable database torrents files intergrity check on adding each torrent. Disable this will free some cpu usage on adding operation.",
|
||||||
|
"Download to": "Download to"
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user