Merge branch 'master' of github.com:KevinMidboe/seasonedShows
This commit is contained in:
		
							
								
								
									
										8
									
								
								client/.babelrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								client/.babelrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | /* | ||||||
|  | 	./.babelrc | ||||||
|  | */ | ||||||
|  | { | ||||||
|  | 	"presets":[ | ||||||
|  | 		"es2015", "env", "react" | ||||||
|  | 	] | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								client/app/components/App.jsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								client/app/components/App.jsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | /* | ||||||
|  | 	./app/components/App.jsx | ||||||
|  | 	 | ||||||
|  | 	<FetchData url={"https://apollo.kevinmidboe.com/api/v1/plex/playing"} /> | ||||||
|  | */ | ||||||
|  | import React from 'react'; | ||||||
|  | import FetchData from './FetchData.js'; | ||||||
|  | import ListStrays from './ListStrays.jsx' | ||||||
|  | import SearchRequest from './SearchRequest.jsx'; | ||||||
|  |  | ||||||
|  | export default class App extends React.Component { | ||||||
|  | 	render() { | ||||||
|  | 		return ( | ||||||
|  | 			<div> | ||||||
|  | 				<div style={{textAlign: 'center'}}> | ||||||
|  | 					<h1>Welcome to Seasoned</h1> | ||||||
|  | 				</div> | ||||||
|  | 					<ListStrays /> | ||||||
|  |  | ||||||
|  | 					<FetchData /> | ||||||
|  |  | ||||||
|  | 					<SearchRequest /> | ||||||
|  | 			</div> | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										63
									
								
								client/app/components/FetchData.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								client/app/components/FetchData.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | import React from 'react'; | ||||||
|  |  | ||||||
|  | class FetchData extends React.Component { | ||||||
|  | 	constructor(props){ | ||||||
|  | 		super(props) | ||||||
|  | 		this.state = { | ||||||
|  | 			playing: [], | ||||||
|  |       		hei: '1', | ||||||
|  |       		intervalId: null, | ||||||
|  |       		url: '' | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	componentDidMount(){ | ||||||
|  | 		var that = this; | ||||||
|  | 		fetch("https://apollo.kevinmidboe.com/api/v1/plex/playing").then( | ||||||
|  | 			function(response){ | ||||||
|  | 				response.json().then(function(data){ | ||||||
|  | 					that.setState({ | ||||||
|  | 						playing: that.state.playing.concat(data.video) | ||||||
|  | 					}) | ||||||
|  | 				}) | ||||||
|  | 			} | ||||||
|  | 		) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	componentWillUnmount() { | ||||||
|  | 	   // use intervalId from the state to clear the interval | ||||||
|  | 	   clearInterval(this.state.intervalId); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	getPlaying() { | ||||||
|  | 		if (this.state.playing.length != 0) { | ||||||
|  | 			return this.state.playing.map((playingObj) => { | ||||||
|  | 				if (playingObj.type === 'episode') { | ||||||
|  | 					console.log('episode') | ||||||
|  | 					return ([ | ||||||
|  | 						<span>{playingObj.title}</span>, | ||||||
|  | 						<span>{playingObj.season}</span>, | ||||||
|  | 						<span>{playingObj.episode}</span> | ||||||
|  | 					]) | ||||||
|  | 				} else if (playingObj.type === 'movie') { | ||||||
|  | 					console.log('movie') | ||||||
|  | 					return ([ | ||||||
|  | 						<span>{playingObj.title}</span> | ||||||
|  | 					]) | ||||||
|  | 				} | ||||||
|  | 			}) | ||||||
|  | 		} else { | ||||||
|  | 			return (<span>Nothing playing</span>) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	render(){ | ||||||
|  | 			return( | ||||||
|  | 			<div className="FetchData">{this.getPlaying()}</div> | ||||||
|  | 		); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default FetchData; | ||||||
							
								
								
									
										44
									
								
								client/app/components/ListStrays.jsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								client/app/components/ListStrays.jsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | import React from 'react'; | ||||||
|  |  | ||||||
|  | class ListStrays extends React.Component { | ||||||
|  | 	constructor(props){ | ||||||
|  | 		super(props) | ||||||
|  | 		this.state = { | ||||||
|  | 			strays: [], | ||||||
|  |       		hei: '1' | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	componentDidMount(){ | ||||||
|  | 		var that = this; | ||||||
|  | 		fetch('https://apollo.kevinmidboe.com/api/v1/seasoned/all').then( | ||||||
|  | 			function(response){ | ||||||
|  | 				response.json().then(function(data){ | ||||||
|  | 					// console.log(data); | ||||||
|  | 					that.setState({ | ||||||
|  | 						strays: that.state.strays.concat(data) | ||||||
|  | 					}) | ||||||
|  | 				}) | ||||||
|  | 			} | ||||||
|  | 		) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	render(){ | ||||||
|  | 		return( | ||||||
|  | 			<div className="ListStrays"> | ||||||
|  | 				{this.state.strays.map((strayObj) => { | ||||||
|  | 					if (strayObj.verified == 0) { | ||||||
|  | 						var url = "https://kevinmidboe.com/seasoned/verified.html?id=" + strayObj.id; | ||||||
|  | 						return ([ | ||||||
|  | 							<span key={strayObj.id}>{strayObj.name}</span>, | ||||||
|  | 							<a href={url}>{strayObj.id}</a> | ||||||
|  | 						]) | ||||||
|  | 					} | ||||||
|  | 				})} | ||||||
|  |  | ||||||
|  | 			</div> | ||||||
|  | 		) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default ListStrays; | ||||||
							
								
								
									
										43
									
								
								client/app/components/MovieObject.jsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								client/app/components/MovieObject.jsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | import React from 'react'; | ||||||
|  |  | ||||||
|  | class MovieObject { | ||||||
|  | 	constructor(object) { | ||||||
|  | 		this.id = object.id; | ||||||
|  | 		this.title = object.title; | ||||||
|  | 		this.year = object.year; | ||||||
|  | 		// Check if object.poster != undefined | ||||||
|  | 		this.poster = object.poster; | ||||||
|  | 		this.matchedInPlex = object.matchedInPlex | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	requestExisting(id) { | ||||||
|  | 		console.log('Exists', id) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	requestMovie(id) { | ||||||
|  | 		console.log(id); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	getElement() { | ||||||
|  | 		var returnList = [] | ||||||
|  |  | ||||||
|  | 		returnList.push(<p>{this.title} ({this.year})</p>) | ||||||
|  | 		 | ||||||
|  | 		var posterPath, buttonState; | ||||||
|  | 		if (this.poster != undefined) { | ||||||
|  | 			posterPath = 'https://image.tmdb.org/t/p/w150' + this.poster; | ||||||
|  | 		} | ||||||
|  | 		returnList.push(<img src={posterPath}></img>); | ||||||
|  |  | ||||||
|  | 		if (this.matchedInPlex) { | ||||||
|  | 			returnList.push(<button onClick={() => this.requestExisting(this.id)}>Request anyway</button>) | ||||||
|  | 		} else { | ||||||
|  | 			returnList.push(<button onClick={() => this.requestMovie(this.id)}>Request</button>) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		returnList.push(<br></br>); | ||||||
|  | 		return returnList; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default MovieObject; | ||||||
							
								
								
									
										78
									
								
								client/app/components/SearchRequest.jsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								client/app/components/SearchRequest.jsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | import React from 'react'; | ||||||
|  |  | ||||||
|  | import MovieObject from './MovieObject.jsx'; | ||||||
|  |  | ||||||
|  | class SearchRequest extends React.Component { | ||||||
|  | 	constructor(props){ | ||||||
|  |     super(props) | ||||||
|  |     this.state = { | ||||||
|  |       searchQuery: '', | ||||||
|  |       items: [] | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   componentDidMount(){ | ||||||
|  |   	var that = this; | ||||||
|  | 		fetch("https://apollo.kevinmidboe.com/api/v1/plex/request?query=interstellar") | ||||||
|  |     .then(response => response.json()) | ||||||
|  |     .then(data => this.setState({ | ||||||
|  |         items: data | ||||||
|  |       }) | ||||||
|  |     ).catch(err => console.error('Error load: ', err.toString())); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   _handleKeyPress(e) { | ||||||
|  |     if (e.key === 'Enter') { | ||||||
|  |       this.fetchQuery(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   fetchQuery() { | ||||||
|  |     var query = 'https://apollo.kevinmidboe.com/api/v1/plex/request?query=' + this.state.searchQuery; | ||||||
|  |  | ||||||
|  |       fetch(query) | ||||||
|  |       .then(response => response.json()) | ||||||
|  |       .then(data => this.setState({ | ||||||
|  |           items: data | ||||||
|  |         }) | ||||||
|  |       ).catch(err => console.error('Error submit: ', err.toString())); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   printMovies(item) { | ||||||
|  |     if (item != undefined) { | ||||||
|  |       let a = new MovieObject(item); | ||||||
|  |       return a.getElement(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   handleChange(event){ | ||||||
|  |     this.setState({ | ||||||
|  |       searchQuery: event.target.value | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   render(){ | ||||||
|  |     return( | ||||||
|  |       <div> | ||||||
|  |         <input | ||||||
|  |           type="text" | ||||||
|  |           onKeyPress={(event) => this._handleKeyPress(event)} | ||||||
|  |           onChange={event => this.handleChange(event)} | ||||||
|  |           value={this.state.searchQuery} | ||||||
|  |           /> | ||||||
|  |           <button onClick={() => this.fetchQuery()}>Search</button> | ||||||
|  |           <br></br> | ||||||
|  |  | ||||||
|  |           {this.state.searchQuery} | ||||||
|  |           <br></br> | ||||||
|  |              | ||||||
|  |           {this.state.items.map((item) => this.printMovies(item))} | ||||||
|  |       </div> | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | 	 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export default SearchRequest; | ||||||
							
								
								
									
										12
									
								
								client/app/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								client/app/index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  |   <head> | ||||||
|  |     <meta charset="utf-8"> | ||||||
|  |     <title>seasoned Shows</title> | ||||||
|  |   </head> | ||||||
|  |   <body> | ||||||
|  |     <div id="root"> | ||||||
|  |  | ||||||
|  |     </div> | ||||||
|  |   </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										15
									
								
								client/app/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								client/app/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | /* | ||||||
|  | * @Author: KevinMidboe | ||||||
|  | * @Date:   2017-06-01 21:08:55 | ||||||
|  | * @Last Modified by:   KevinMidboe | ||||||
|  | * @Last Modified time: 2017-06-01 21:34:32 | ||||||
|  |  | ||||||
|  |     ./client/index.js | ||||||
|  |     which is the webpack entry file | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | import React from 'react'; | ||||||
|  | import ReactDOM from 'react-dom'; | ||||||
|  | import App from './components/App.jsx'; | ||||||
|  |  | ||||||
|  | ReactDOM.render(<App />, document.getElementById('root')); | ||||||
| @@ -5,9 +5,22 @@ | |||||||
|   "repository": "https://github.com/KevinMidboe/seasonedShows", |   "repository": "https://github.com/KevinMidboe/seasonedShows", | ||||||
|   "author": "Kevin Midboe", |   "author": "Kevin Midboe", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|  |   "scripts": { | ||||||
|  |     "start": "webpack-dev-server" | ||||||
|  |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|  |     "html-webpack-plugin": "^2.28.0", | ||||||
|     "path": "^0.12.7", |     "path": "^0.12.7", | ||||||
|  |     "react": "^15.5.4", | ||||||
|  |     "react-dom": "^15.5.4", | ||||||
|     "webpack": "^2.6.1", |     "webpack": "^2.6.1", | ||||||
|     "webpack-dev-server": "^2.4.5" |     "webpack-dev-server": "^2.4.5" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "babel-core": "^6.24.1", | ||||||
|  |     "babel-loader": "^7.0.0", | ||||||
|  |     "babel-preset-env": "^1.5.1", | ||||||
|  |     "babel-preset-es2015": "^6.24.1", | ||||||
|  |     "babel-preset-react": "^6.24.1" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										33
									
								
								client/webpack.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								client/webpack.config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | /* | ||||||
|  | * @Author: KevinMidboe | ||||||
|  | * @Date:   2017-06-01 19:09:16 | ||||||
|  | * @Last Modified by:   KevinMidboe | ||||||
|  | * @Last Modified time: 2017-06-02 19:38:45 | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | const path = require('path'); | ||||||
|  |  | ||||||
|  | const HtmlWebpackPlugin = require('html-webpack-plugin'); | ||||||
|  | const HtmlWebpackPluginConfig = new HtmlWebpackPlugin({ | ||||||
|  | 	template: './app/index.html', | ||||||
|  | 	filename: 'index.html', | ||||||
|  | 	inject: 'body' | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | module.exports = { | ||||||
|  | 	entry: './app/index.js', | ||||||
|  | 	output: { | ||||||
|  | 		path: path.resolve('dist'), | ||||||
|  | 		filename: 'index_bundle.js' | ||||||
|  | 	}, | ||||||
|  | 	devServer: { | ||||||
|  | 		headers: {'Access-Control-Allow-Origin': '*'} | ||||||
|  | 	}, | ||||||
|  | 	module: { | ||||||
|  | 		loaders: [ | ||||||
|  | 				{ test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ }, | ||||||
|  | 				{ test: /\.jsx$/, loader: 'babel-loader', exclude: /node_modules/ } | ||||||
|  |     	] | ||||||
|  |   	}, | ||||||
|  |   	plugins: [HtmlWebpackPluginConfig] | ||||||
|  | } | ||||||
							
								
								
									
										1072
									
								
								client/yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										1072
									
								
								client/yarn.lock
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -6,7 +6,9 @@ function convertStreamToMediaInfo(plexStream) { | |||||||
| 	mediaInfo.duration = plexStream.duration; | 	mediaInfo.duration = plexStream.duration; | ||||||
| 	mediaInfo.height = plexStream.height; | 	mediaInfo.height = plexStream.height; | ||||||
| 	mediaInfo.width = plexStream.width; | 	mediaInfo.width = plexStream.width; | ||||||
| 	mediaInfo.bitrate = plexStream.bitrate; | 	if (plexStream.bitrate) { | ||||||
|  | 		mediaInfo.bitrate = plexStream.bitrate; | ||||||
|  | 	} | ||||||
| 	mediaInfo.resolution = plexStream.videoResolution; | 	mediaInfo.resolution = plexStream.videoResolution; | ||||||
| 	mediaInfo.framerate = plexStream.videoFrameRate; | 	mediaInfo.framerate = plexStream.videoFrameRate; | ||||||
| 	mediaInfo.protocol = plexStream.protocol; | 	mediaInfo.protocol = plexStream.protocol; | ||||||
|   | |||||||
| @@ -3,20 +3,23 @@ var express    = require('express');        // call express | |||||||
| var app        = express();                 // define our app using express | var app        = express();                 // define our app using express | ||||||
| var bodyParser = require('body-parser');  | var bodyParser = require('body-parser');  | ||||||
|  |  | ||||||
|  |  | ||||||
| // this will let us get the data from a POST | // this will let us get the data from a POST | ||||||
| // configure app to use bodyParser() | // configure app to use bodyParser() | ||||||
| app.use(bodyParser.json()); | app.use(bodyParser.json()); | ||||||
| app.use(bodyParser.urlencoded({ extended: true })); | app.use(bodyParser.urlencoded({ extended: true })); | ||||||
|  |  | ||||||
| var port = 31459;        // set our port |  | ||||||
|  |  | ||||||
|  | var port = 31459;        // set our port | ||||||
| var router = express.Router(); | var router = express.Router(); | ||||||
|  | var allowedOrigins = ['https://kevinmidboe.com', 'http://localhost:8080'] | ||||||
|  |  | ||||||
|  |  | ||||||
| router.use(function(req, res, next) { | router.use(function(req, res, next) { | ||||||
|     // do logging |  | ||||||
|     console.log('Something is happening.'); |     console.log('Something is happening.'); | ||||||
| 	res.setHeader('Access-Control-Allow-Origin', 'https://kevinmidboe.com'); |     var origin = req.headers.origin; | ||||||
|  |     if (allowedOrigins.indexOf(origin) > -1) { | ||||||
|  | 		res.setHeader('Access-Control-Allow-Origin', origin); | ||||||
|  | 	} | ||||||
|     next(); |     next(); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user