diff --git a/.gitignore b/.gitignore index d995b8f..1f1f18e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ vendor bot sounds debug - +youtube diff --git a/client/app/app.js b/client/app/app.js index bc83130..dd31abd 100644 --- a/client/app/app.js +++ b/client/app/app.js @@ -6,12 +6,14 @@ import Wrapper from './Wrapper'; import Home from './pages/Home/Home'; import Soundboard from './pages/Soundboard/Soundboard'; import NotFound from './pages/NotFound/NotFound'; +import Downloader from './pages/Downloader/Downloader'; ReactDOM.render( + diff --git a/client/app/components/Navbar/Navbar.component.js b/client/app/components/Navbar/Navbar.component.js index 6d67912..637b2a7 100644 --- a/client/app/components/Navbar/Navbar.component.js +++ b/client/app/components/Navbar/Navbar.component.js @@ -11,6 +11,7 @@ export default class Navbar extends React.Component {
Go Discord Bot
Home Soundboard + Youtube Downloader ); } diff --git a/client/app/pages/Downloader/Downloader.js b/client/app/pages/Downloader/Downloader.js new file mode 100644 index 0000000..f1989fd --- /dev/null +++ b/client/app/pages/Downloader/Downloader.js @@ -0,0 +1,93 @@ +import React from 'react'; +import axios from 'axios'; + +import './Downloader.scss'; + +export default class Downloader extends React.Component { + + constructor(props) { + super(props); + this.state = { + fileType: "mp3", + url: "", + message: "", + dataLoaded: false, + downloadLink: "", + downLoadFileName: "", + dataLoading: false, + }; + } + + sendRequest() { + if (this.state.url === "") { + this.setState({ + message: "Invalid URL", + }); + + return; + } + + this.setState({ + message: "", + url: "", + dataLoaded: false, + dataLoading: true, + }); + + axios.get(`/ytdownloader`, { + params: { + fileType: this.state.fileType, + url: this.state.url, + } + }).then((res) => { + this.setState({ + dataLoaded: true, + dataLoading: false, + downloadLink: `/public/youtube/${res.data.fileName}`, + downLoadFileName: res.data.fileName, + }); + }).catch(() => { + this.setState({ + message: "Internal error.", + dataLoading: false, + }); + }); + } + + render() { + return ( +
+
+
+ Youtube to MP3 +
+ + this.setState({url: event.target.value})}/> + + {/*
+ + +
*/} + + +
+ +
+ + {this.state.message !== "" &&
{this.state.message}
} + {this.state.dataLoaded && {this.state.downLoadFileName}} +
+ +
+ ); + } +} diff --git a/client/app/pages/Downloader/Downloader.scss b/client/app/pages/Downloader/Downloader.scss new file mode 100644 index 0000000..9057a83 --- /dev/null +++ b/client/app/pages/Downloader/Downloader.scss @@ -0,0 +1,16 @@ +.Downloader { + padding: 10px; +} + +.Downloader__input { + width: 100%; + margin-top: 10px; + margin-bottom: 10px; +} + +.Downloader__button { + + & + & { + margin-left: 10px; + } +} diff --git a/client/app/pages/Soundboard/SoundList.component.js b/client/app/pages/Soundboard/SoundList.component.js index 7a2df6e..7a84e6b 100644 --- a/client/app/pages/Soundboard/SoundList.component.js +++ b/client/app/pages/Soundboard/SoundList.component.js @@ -76,7 +76,7 @@ export default class SoundList extends React.Component { {this.checkExtension(sound.extension) && this.state.showAudioControls[index] ? -