mirror of https://github.com/FreeTubeApp/FreeTube
160 lines
4.0 KiB
JavaScript
160 lines
4.0 KiB
JavaScript
import Vue from 'vue'
|
|
import $ from 'jquery'
|
|
import { mapActions } from 'vuex'
|
|
import FtCard from '../ft-card/ft-card.vue'
|
|
import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
|
|
import FtButton from '../ft-button/ft-button.vue'
|
|
import FtSelect from '../ft-select/ft-select.vue'
|
|
import FtInput from '../ft-input/ft-input.vue'
|
|
import FtLoader from '../ft-loader/ft-loader.vue'
|
|
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
|
|
|
|
// FIXME: Missing web logic branching
|
|
|
|
import { ipcRenderer } from 'electron'
|
|
import debounce from 'lodash.debounce'
|
|
|
|
import { IpcChannels } from '../../../constants'
|
|
|
|
export default Vue.extend({
|
|
name: 'ProxySettings',
|
|
components: {
|
|
'ft-card': FtCard,
|
|
'ft-toggle-switch': FtToggleSwitch,
|
|
'ft-button': FtButton,
|
|
'ft-select': FtSelect,
|
|
'ft-input': FtInput,
|
|
'ft-loader': FtLoader,
|
|
'ft-flex-box': FtFlexBox
|
|
},
|
|
data: function () {
|
|
return {
|
|
isLoading: false,
|
|
dataAvailable: false,
|
|
proxyTestUrl: 'https://api.ipify.org?format=json',
|
|
proxyTestUrl1: 'https://freegeoip.app/json/',
|
|
proxyId: '',
|
|
proxyCountry: '',
|
|
proxyRegion: '',
|
|
proxyCity: '',
|
|
proxyHost: '',
|
|
protocolNames: [
|
|
'HTTP',
|
|
'HTTPS',
|
|
'SOCKS4',
|
|
'SOCKS5'
|
|
],
|
|
protocolValues: [
|
|
'http',
|
|
'https',
|
|
'socks4',
|
|
'socks5'
|
|
]
|
|
}
|
|
},
|
|
computed: {
|
|
useProxy: function () {
|
|
return this.$store.getters.getUseProxy
|
|
},
|
|
proxyProtocol: function () {
|
|
return this.$store.getters.getProxyProtocol
|
|
},
|
|
proxyHostname: function () {
|
|
return this.$store.getters.getProxyHostname
|
|
},
|
|
proxyPort: function () {
|
|
return this.$store.getters.getProxyPort
|
|
},
|
|
proxyUrl: function () {
|
|
return `${this.proxyProtocol}://${this.proxyHostname}:${this.proxyPort}`
|
|
}
|
|
},
|
|
mounted: function () {
|
|
this.debounceEnableProxy = debounce(this.enableProxy, 200)
|
|
},
|
|
beforeDestroy: function () {
|
|
if (this.proxyHostname === '') {
|
|
this.updateProxyHostname('127.0.0.1')
|
|
}
|
|
|
|
if (this.proxyPort === '') {
|
|
this.updateProxyPort('9050')
|
|
}
|
|
},
|
|
methods: {
|
|
handleUpdateProxy: function (value) {
|
|
if (value) {
|
|
this.enableProxy()
|
|
} else {
|
|
this.disableProxy()
|
|
}
|
|
this.updateUseProxy(value)
|
|
},
|
|
|
|
handleUpdateProxyProtocol: function (value) {
|
|
if (this.useProxy) {
|
|
this.enableProxy()
|
|
}
|
|
this.updateProxyProtocol(value)
|
|
},
|
|
|
|
handleUpdateProxyHostname: function (value) {
|
|
if (this.useProxy) {
|
|
this.debounceEnableProxy()
|
|
}
|
|
this.updateProxyHostname(value)
|
|
},
|
|
|
|
handleUpdateProxyPort: function (value) {
|
|
if (this.useProxy) {
|
|
this.debounceEnableProxy()
|
|
}
|
|
this.updateProxyPort(value)
|
|
},
|
|
|
|
enableProxy: function () {
|
|
ipcRenderer.send(IpcChannels.ENABLE_PROXY, this.proxyUrl)
|
|
},
|
|
|
|
disableProxy: function () {
|
|
ipcRenderer.send(IpcChannels.DISABLE_PROXY)
|
|
},
|
|
|
|
testProxy: function () {
|
|
this.isLoading = true
|
|
if (!this.useProxy) {
|
|
this.enableProxy()
|
|
}
|
|
$.getJSON(this.proxyTestUrl1, (response) => {
|
|
console.log(response)
|
|
this.proxyIp = response.ip
|
|
this.proxyCountry = response.country_name
|
|
this.proxyRegion = response.region_name
|
|
this.proxyCity = response.city
|
|
this.dataAvailable = true
|
|
}).fail((xhr, textStatus, error) => {
|
|
console.log(xhr)
|
|
console.log(textStatus)
|
|
console.log(error)
|
|
this.showToast({
|
|
message: this.$t('Settings.Proxy Settings["Error getting network information. Is your proxy configured properly?"]')
|
|
})
|
|
this.dataAvailable = false
|
|
}).always(() => {
|
|
if (!this.useProxy) {
|
|
this.disableProxy()
|
|
}
|
|
this.isLoading = false
|
|
})
|
|
},
|
|
|
|
...mapActions([
|
|
'showToast',
|
|
'updateUseProxy',
|
|
'updateProxyProtocol',
|
|
'updateProxyHostname',
|
|
'updateProxyPort'
|
|
])
|
|
}
|
|
})
|