2017-06-06 23:19:12 +02:00
import React from "react" ;
2017-08-07 00:24:55 +02:00
import FormField from "component/formField" ;
import { FormRow } from "component/form.js" ;
2017-06-06 23:19:12 +02:00
import SubHeader from "component/subHeader" ;
2017-08-18 19:09:40 +02:00
import * as settings from "constants/settings" ;
2017-06-06 23:19:12 +02:00
import lbry from "lbry.js" ;
2017-06-16 07:43:43 +02:00
import Link from "component/link" ;
2017-08-07 00:24:55 +02:00
import FormFieldPrice from "component/formFieldPrice" ;
2017-08-07 02:55:31 +02:00
import { remote } from "electron" ;
2017-05-28 16:09:56 +02:00
2017-06-08 06:42:19 +02:00
class SettingsPage extends React . PureComponent {
2017-05-17 10:10:25 +02:00
constructor ( props ) {
super ( props ) ;
2017-06-02 18:40:26 +02:00
2017-05-18 03:37:39 +02:00
this . state = {
2017-06-16 07:43:43 +02:00
clearingCache : false ,
2017-06-06 23:19:12 +02:00
} ;
2017-05-17 10:10:25 +02:00
}
2017-06-16 07:43:43 +02:00
clearCache ( ) {
this . setState ( {
clearingCache : true ,
} ) ;
const success = ( ) => {
this . setState ( { clearingCache : false } ) ;
window . location . href = ` ${ remote . app . getAppPath ( ) } /dist/index.html ` ;
} ;
const clear = ( ) => this . props . clearCache ( ) . then ( success . bind ( this ) ) ;
setTimeout ( clear , 1000 , { once : true } ) ;
}
2017-05-17 10:10:25 +02:00
setDaemonSetting ( name , value ) {
2017-06-06 23:19:12 +02:00
this . props . setDaemonSetting ( name , value ) ;
2017-05-17 10:10:25 +02:00
}
onRunOnStartChange ( event ) {
2017-06-06 23:19:12 +02:00
this . setDaemonSetting ( "run_on_startup" , event . target . checked ) ;
2017-05-17 10:10:25 +02:00
}
onShareDataChange ( event ) {
2017-06-06 23:19:12 +02:00
this . setDaemonSetting ( "share_usage_data" , event . target . checked ) ;
2017-05-17 10:10:25 +02:00
}
onDownloadDirChange ( event ) {
2017-06-06 23:19:12 +02:00
this . setDaemonSetting ( "download_directory" , event . target . value ) ;
2017-05-17 10:10:25 +02:00
}
2017-08-07 00:24:55 +02:00
onKeyFeeChange ( newValue ) {
2017-09-29 22:05:26 +02:00
let setting = newValue ;
//this is stupid and should be fixed... somewhere
if ( setting && ( setting . amount === undefined || setting . amount === null ) ) {
setting . amount = 0 ;
}
this . setDaemonSetting ( "max_key_fee" , setting ) ;
2017-05-17 10:10:25 +02:00
}
2017-07-02 20:37:20 +02:00
onKeyFeeDisableChange ( isDisabled ) {
this . setDaemonSetting ( "disable_max_key_fee" , isDisabled ) ;
2017-05-17 10:10:25 +02:00
}
2017-08-05 03:36:36 +02:00
onThemeChange ( event ) {
2017-08-12 20:46:10 +02:00
const { value } = event . target ;
2017-09-07 02:52:34 +02:00
this . props . setClientSetting ( settings . THEME , value ) ;
2017-08-05 03:36:36 +02:00
}
2017-09-29 22:05:26 +02:00
onInstantPurchaseEnabledChange ( enabled ) {
2017-09-08 07:03:37 +02:00
this . props . setClientSetting ( settings . INSTANT _PURCHASE _ENABLED , enabled ) ;
}
onInstantPurchaseMaxChange ( newValue ) {
this . props . setClientSetting ( settings . INSTANT _PURCHASE _MAX , newValue ) ;
}
2017-07-25 00:15:51 +02:00
// onMaxUploadPrefChange(isLimited) {
// if (!isLimited) {
// this.setDaemonSetting("max_upload", 0.0);
// }
// this.setState({
// isMaxUpload: isLimited,
// });
// }
//
// onMaxUploadFieldChange(event) {
// this.setDaemonSetting("max_upload", Number(event.target.value));
// }
//
// onMaxDownloadPrefChange(isLimited) {
// if (!isLimited) {
// this.setDaemonSetting("max_download", 0.0);
// }
// this.setState({
// isMaxDownload: isLimited,
// });
// }
//
// onMaxDownloadFieldChange(event) {
// this.setDaemonSetting("max_download", Number(event.target.value));
// }
2017-05-17 23:52:45 +02:00
2017-05-17 10:10:25 +02:00
onShowNsfwChange ( event ) {
2017-08-18 19:09:40 +02:00
this . props . setClientSetting ( settings . SHOW _NSFW , event . target . checked ) ;
2017-05-17 10:10:25 +02:00
}
2017-07-07 15:15:45 +02:00
onLanguageChange ( e ) {
2017-07-07 15:26:03 +02:00
this . props . changeLanguage ( e . target . value ) ;
2017-08-23 01:50:59 +02:00
this . forceUpdate ( ) ;
2017-07-02 21:13:37 +02:00
}
2017-09-07 03:53:42 +02:00
onShowUnavailableChange ( event ) {
this . props . setClientSetting (
settings . SHOW _UNAVAILABLE ,
event . target . checked
) ;
}
2017-04-12 16:55:19 +02:00
2017-08-24 18:29:54 +02:00
componentWillMount ( ) {
2017-09-07 02:52:34 +02:00
this . props . getThemes ( ) ;
2017-08-24 18:29:54 +02:00
}
2017-08-20 01:59:48 +02:00
componentDidMount ( ) { }
2017-08-07 05:01:10 +02:00
2017-05-17 10:10:25 +02:00
render ( ) {
2017-09-07 03:53:42 +02:00
const {
daemonSettings ,
language ,
languages ,
showNsfw ,
2017-09-08 07:03:37 +02:00
instantPurchaseEnabled ,
instantPurchaseMax ,
2017-09-07 03:53:42 +02:00
showUnavailable ,
theme ,
themes ,
} = this . props ;
2017-05-17 23:52:45 +02:00
2017-07-26 10:20:18 +02:00
if ( ! daemonSettings || Object . keys ( daemonSettings ) . length === 0 ) {
2017-06-06 23:19:12 +02:00
return (
< main className = "main--single-column" >
< span className = "empty" > { _ _ ( "Failed to load settings." ) } < / span >
< / main >
) ;
2016-04-10 02:00:56 +02:00
}
return (
2017-05-01 02:15:21 +02:00
< main className = "main--single-column" >
2017-05-05 07:48:15 +02:00
< SubHeader / >
2017-08-30 18:43:35 +02:00
{ / *
2017-07-02 21:13:37 +02:00
< section className = "card" >
< div className = "card__content" >
< h3 > { _ _ ( "Language" ) } < / h3 >
< / div >
< div className = "card__content" >
< div className = "form-row" >
< FormField
2017-08-19 20:03:51 +02:00
type = "select"
2017-07-02 21:13:37 +02:00
name = "language"
2017-08-24 19:33:41 +02:00
defaultValue = { language }
2017-07-07 15:37:24 +02:00
onChange = { this . onLanguageChange . bind ( this ) }
2017-08-19 20:03:51 +02:00
>
< option value = "en" > { _ _ ( "English" ) } < / option >
{ Object . keys ( languages ) . map ( dLang =>
2017-08-24 19:33:41 +02:00
< option key = { dLang } value = { dLang } >
2017-08-19 20:03:51 +02:00
{ languages [ dLang ] }
< / option >
) }
< / FormField >
2017-07-02 21:13:37 +02:00
< / div >
< / div >
2017-08-30 18:43:35 +02:00
< / section > * / }
2016-08-08 00:45:26 +02:00
< section className = "card" >
2017-04-10 14:32:40 +02:00
< div className = "card__content" >
2017-05-26 08:40:35 +02:00
< h3 > { _ _ ( "Download Directory" ) } < / h3 >
2017-04-10 14:32:40 +02:00
< / div >
< div className = "card__content" >
2017-06-06 23:19:12 +02:00
< FormRow
type = "directory"
name = "download_directory"
defaultValue = { daemonSettings . download _directory }
helper = { _ _ ( "LBRY downloads will be saved here." ) }
onChange = { this . onDownloadDirChange . bind ( this ) }
/ >
2017-04-10 14:32:40 +02:00
< / div >
2016-04-10 02:00:56 +02:00
< / section >
2016-08-08 00:45:26 +02:00
< section className = "card" >
2017-04-10 14:32:40 +02:00
< div className = "card__content" >
2017-09-08 07:03:37 +02:00
< h3 > { _ _ ( "Purchase Settings" ) } < / h3 >
2017-04-10 14:32:40 +02:00
< / div >
< div className = "card__content" >
2017-09-23 00:31:23 +02:00
< div className = "form-row__label-row" >
< label className = "form-row__label" >
{ _ _ ( "Max Purchase Price" ) }
< / label >
< / div >
2017-06-06 23:19:12 +02:00
< FormRow
type = "radio"
2017-07-02 20:37:20 +02:00
name = "max_key_fee"
onClick = { ( ) => {
this . onKeyFeeDisableChange ( true ) ;
2017-06-06 23:19:12 +02:00
} }
2017-07-02 20:37:20 +02:00
defaultChecked = { daemonSettings . disable _max _key _fee }
label = { _ _ ( "No Limit" ) }
2017-06-06 23:19:12 +02:00
/ >
2017-04-12 16:55:19 +02:00
< div className = "form-row" >
2017-06-06 23:19:12 +02:00
< FormField
type = "radio"
2017-07-02 20:37:20 +02:00
name = "max_key_fee"
onClick = { ( ) => {
this . onKeyFeeDisableChange ( false ) ;
2017-06-06 23:19:12 +02:00
} }
2017-07-02 20:37:20 +02:00
defaultChecked = { ! daemonSettings . disable _max _key _fee }
2017-06-06 23:19:12 +02:00
label = {
2017-07-02 20:37:20 +02:00
daemonSettings . disable _max _key _fee
? _ _ ( "Choose limit" )
: _ _ ( "Limit to" )
2017-06-06 23:19:12 +02:00
}
/ >
2017-08-07 00:24:55 +02:00
{ ! daemonSettings . disable _max _key _fee &&
< FormFieldPrice
min = "0"
onChange = { this . onKeyFeeChange . bind ( this ) }
defaultValue = {
daemonSettings . max _key _fee
? daemonSettings . max _key _fee
: { currency : "USD" , amount : 50 }
}
/ > }
2017-04-12 16:55:19 +02:00
< / div >
2017-07-02 20:37:20 +02:00
< div className = "form-field__helper" >
{ _ _ (
2017-07-25 16:07:17 +02:00
"This will prevent you from purchasing any content over this cost, as a safety measure."
2017-07-02 20:37:20 +02:00
) }
2017-04-12 16:55:19 +02:00
< / div >
2016-08-08 05:31:21 +02:00
< / div >
2017-09-08 07:03:37 +02:00
< div className = "card__content" >
2017-09-23 00:31:23 +02:00
< div className = "form-row__label-row" >
< label className = "form-row__label" >
{ _ _ ( "Purchase Confirmations" ) }
< / label >
< / div >
< FormRow
2017-09-08 07:03:37 +02:00
type = "radio"
name = "instant_purchase_max"
2017-09-29 22:05:26 +02:00
checked = { ! instantPurchaseEnabled }
2017-09-08 07:03:37 +02:00
label = { _ _ ( "Ask for confirmation of all purchases" ) }
onClick = { e => {
2017-09-29 22:05:26 +02:00
this . onInstantPurchaseEnabledChange ( false ) ;
2017-09-08 07:03:37 +02:00
} }
/ >
< div className = "form-row" >
< FormField
type = "radio"
name = "instant_purchase_max"
2017-09-29 22:05:26 +02:00
checked = { instantPurchaseEnabled }
2017-09-08 07:03:37 +02:00
label = {
"Single-click purchasing of content less than" +
2017-09-29 22:05:26 +02:00
( instantPurchaseEnabled ? "" : "..." )
2017-09-08 07:03:37 +02:00
}
onClick = { e => {
2017-09-29 22:05:26 +02:00
this . onInstantPurchaseEnabledChange ( true ) ;
2017-09-08 07:03:37 +02:00
} }
/ >
2017-09-29 22:05:26 +02:00
{ instantPurchaseEnabled &&
2017-09-08 07:03:37 +02:00
< FormFieldPrice
min = "0.1"
onChange = { val => this . onInstantPurchaseMaxChange ( val ) }
2017-09-29 22:05:26 +02:00
defaultValue = { instantPurchaseMax }
2017-09-08 07:03:37 +02:00
/ > }
< / div >
< div className = "form-field__helper" >
When this option is chosen , LBRY won ' t ask you to confirm
downloads below the given price .
< / div >
< / div >
2016-04-10 02:00:56 +02:00
< / section >
2017-07-02 20:37:20 +02:00
2016-08-22 21:19:04 +02:00
< section className = "card" >
2017-04-10 14:32:40 +02:00
< div className = "card__content" >
2017-05-26 08:40:35 +02:00
< h3 > { _ _ ( "Content" ) } < / h3 >
2016-08-22 22:56:52 +02:00
< / div >
2017-04-10 20:12:07 +02:00
< div className = "card__content" >
2017-06-06 23:19:12 +02:00
< FormRow
type = "checkbox"
onChange = { this . onShowUnavailableChange . bind ( this ) }
2017-09-07 03:53:42 +02:00
defaultChecked = { showUnavailable }
2017-06-06 23:19:12 +02:00
label = { _ _ ( "Show unavailable content in search results" ) }
/ >
< FormRow
label = { _ _ ( "Show NSFW content" ) }
type = "checkbox"
onChange = { this . onShowNsfwChange . bind ( this ) }
2017-09-07 03:53:42 +02:00
defaultChecked = { showNsfw }
2017-06-06 23:19:12 +02:00
helper = { _ _ (
"NSFW content may include nudity, intense sexuality, profanity, or other adult content. By displaying NSFW content, you are affirming you are of legal age to view mature content in your country or jurisdiction. "
) }
/ >
2017-01-19 10:58:11 +01:00
< / div >
< / section >
2017-06-06 06:21:55 +02:00
2016-08-08 00:45:26 +02:00
< section className = "card" >
2017-04-10 14:32:40 +02:00
< div className = "card__content" >
2017-05-26 08:40:35 +02:00
< h3 > { _ _ ( "Share Diagnostic Data" ) } < / h3 >
2017-04-10 14:32:40 +02:00
< / div >
2017-04-10 20:12:07 +02:00
< div className = "card__content" >
2017-06-06 23:19:12 +02:00
< FormRow
type = "checkbox"
onChange = { this . onShareDataChange . bind ( this ) }
defaultChecked = { daemonSettings . share _usage _data }
label = { _ _ (
"Help make LBRY better by contributing diagnostic data about my usage"
) }
/ >
2017-04-10 14:32:40 +02:00
< / div >
2016-04-10 02:00:56 +02:00
< / section >
2017-06-16 07:43:43 +02:00
2017-08-05 03:36:36 +02:00
< section className = "card" >
< div className = "card__content" >
< h3 > { _ _ ( "Theme" ) } < / h3 >
< / div >
< div className = "card__content" >
< FormField
type = "select"
onChange = { this . onThemeChange . bind ( this ) }
2017-09-07 03:53:42 +02:00
defaultValue = { theme }
2017-08-05 03:36:36 +02:00
className = "form-field__input--inline"
>
2017-09-07 03:53:42 +02:00
{ themes . map ( ( theme , index ) =>
2017-09-07 02:52:34 +02:00
< option key = { theme } value = { theme } >
{ theme }
2017-08-19 23:34:45 +02:00
< / option >
2017-08-05 03:36:36 +02:00
) }
< / FormField >
< / div >
< / section >
2017-06-16 07:43:43 +02:00
< section className = "card" >
< div className = "card__content" >
< h3 > { _ _ ( "Application Cache" ) } < / h3 >
< / div >
< div className = "card__content" >
< p >
< Link
label = {
this . state . clearingCache
? _ _ ( "Clearing" )
: _ _ ( "Clear the cache" )
}
icon = "icon-trash"
button = "alt"
onClick = { this . clearCache . bind ( this ) }
disabled = { this . state . clearingCache }
/ >
< / p >
< / div >
< / section >
2017-06-06 23:19:12 +02:00
< / main >
2016-04-10 02:00:56 +02:00
) ;
}
2017-05-17 10:10:25 +02:00
}
2016-11-22 21:19:08 +01:00
export default SettingsPage ;