improved tagging system
new settings page tab
This commit is contained in:
		@@ -8,7 +8,7 @@ class Database
 | 
				
			|||||||
    private $servername = "192.168.0.30";
 | 
					    private $servername = "192.168.0.30";
 | 
				
			||||||
    private $username = "root";
 | 
					    private $username = "root";
 | 
				
			||||||
    private $password = "1qayxsw2";
 | 
					    private $password = "1qayxsw2";
 | 
				
			||||||
    private $dbname = "hub";
 | 
					    private $dbname = "mediacenter";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // The db connection is established in the private constructor.
 | 
					    // The db connection is established in the private constructor.
 | 
				
			||||||
    private function __construct()
 | 
					    private function __construct()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,21 +44,21 @@ foreach ($arr as $elem) {
 | 
				
			|||||||
                if ($video_attributes['height'] >= 1080) {
 | 
					                if ($video_attributes['height'] >= 1080) {
 | 
				
			||||||
                    $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,2)";
 | 
					                    $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,2)";
 | 
				
			||||||
                    if ($conn->query($query) !== TRUE) {
 | 
					                    if ($conn->query($query) !== TRUE) {
 | 
				
			||||||
                        echo "failed to add tag here.\n";
 | 
					                        echo "failed to add default tag here.\n";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if ($video_attributes['height'] >= 720 && $video_attributes['height'] < 1080) {
 | 
					                if ($video_attributes['height'] >= 720 && $video_attributes['height'] < 1080) {
 | 
				
			||||||
                    $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,4)";
 | 
					                    $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,4)";
 | 
				
			||||||
                    if ($conn->query($query) !== TRUE) {
 | 
					                    if ($conn->query($query) !== TRUE) {
 | 
				
			||||||
                        echo "failed to add tag here.\n";
 | 
					                        echo "failed to add default tag here.\n";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if ($video_attributes['height'] < 720) {
 | 
					                if ($video_attributes['height'] < 720) {
 | 
				
			||||||
                    $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,3)";
 | 
					                    $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,3)";
 | 
				
			||||||
                    if ($conn->query($query) !== TRUE) {
 | 
					                    if ($conn->query($query) !== TRUE) {
 | 
				
			||||||
                        echo "failed to add tag here.\n";
 | 
					                        echo "failed to add default tag here.\n";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                $added++;
 | 
					                $added++;
 | 
				
			||||||
@@ -125,19 +125,28 @@ function _get_video_attributes($video)
 | 
				
			|||||||
    $command = "$ffmpeg -i \"../videos/prn/$video\" -vstats 2>&1";
 | 
					    $command = "$ffmpeg -i \"../videos/prn/$video\" -vstats 2>&1";
 | 
				
			||||||
    $output = shell_exec($command);
 | 
					    $output = shell_exec($command);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $codec = "null";
 | 
				
			||||||
 | 
					    $width = 0;
 | 
				
			||||||
 | 
					    $height = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $regex_sizes = "/Video: ([^,]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; // or : $regex_sizes = "/Video: ([^\r\n]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; (code from @1owk3y)
 | 
					    $regex_sizes = "/Video: ([^,]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; // or : $regex_sizes = "/Video: ([^\r\n]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; (code from @1owk3y)
 | 
				
			||||||
    if (preg_match($regex_sizes, $output, $regs)) {
 | 
					    if (preg_match($regex_sizes, $output, $regs)) {
 | 
				
			||||||
        $codec = $regs [1] ? $regs [1] : null;
 | 
					        $codec = $regs [1] ? $regs [1] : "null";
 | 
				
			||||||
        $width = $regs [3] ? $regs [3] : null;
 | 
					        $width = $regs [3] ? $regs [3] : 0;
 | 
				
			||||||
        $height = $regs [4] ? $regs [4] : null;
 | 
					        $height = $regs [4] ? $regs [4] : 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $hours = 0;
 | 
				
			||||||
 | 
					    $mins = 0;
 | 
				
			||||||
 | 
					    $secs = 0;
 | 
				
			||||||
 | 
					    $ms = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $regex_duration = "/Duration: ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}).([0-9]{1,2})/";
 | 
					    $regex_duration = "/Duration: ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}).([0-9]{1,2})/";
 | 
				
			||||||
    if (preg_match($regex_duration, $output, $regs)) {
 | 
					    if (preg_match($regex_duration, $output, $regs)) {
 | 
				
			||||||
        $hours = $regs [1] ? $regs [1] : null;
 | 
					        $hours = $regs [1] ? $regs [1] : 0;
 | 
				
			||||||
        $mins = $regs [2] ? $regs [2] : null;
 | 
					        $mins = $regs [2] ? $regs [2] : 0;
 | 
				
			||||||
        $secs = $regs [3] ? $regs [3] : null;
 | 
					        $secs = $regs [3] ? $regs [3] : 0;
 | 
				
			||||||
        $ms = $regs [4] ? $regs [4] : null;
 | 
					        $ms = $regs [4] ? $regs [4] : 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return array('codec' => $codec,
 | 
					    return array('codec' => $codec,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ require 'Database.php';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
$conn = Database::getInstance()->getConnection();
 | 
					$conn = Database::getInstance()->getConnection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//$_POST['action'] = "getRandomMovies";$_POST['number'] =6;
 | 
				
			||||||
if (isset($_POST['action'])) {
 | 
					if (isset($_POST['action'])) {
 | 
				
			||||||
    $action = $_POST['action'];
 | 
					    $action = $_POST['action'];
 | 
				
			||||||
    switch ($action) {
 | 
					    switch ($action) {
 | 
				
			||||||
@@ -28,14 +28,31 @@ if (isset($_POST['action'])) {
 | 
				
			|||||||
            echo(json_encode($rows));
 | 
					            echo(json_encode($rows));
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case "getRandomMovies":
 | 
					        case "getRandomMovies":
 | 
				
			||||||
 | 
					            $return = new stdClass();
 | 
				
			||||||
            $query = "SELECT movie_id,movie_name FROM videos ORDER BY RAND() LIMIT " . $_POST['number'];
 | 
					            $query = "SELECT movie_id,movie_name FROM videos ORDER BY RAND() LIMIT " . $_POST['number'];
 | 
				
			||||||
            $result = $conn->query($query);
 | 
					            $result = $conn->query($query);
 | 
				
			||||||
            $rows = array();
 | 
					            $return->rows = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // get tags of random videos
 | 
				
			||||||
 | 
					            $ids = [];
 | 
				
			||||||
            while ($r = mysqli_fetch_assoc($result)) {
 | 
					            while ($r = mysqli_fetch_assoc($result)) {
 | 
				
			||||||
                array_push($rows, $r);
 | 
					                array_push($return->rows, $r);
 | 
				
			||||||
 | 
					                array_push($ids,"video_tags.video_id=".$r['movie_id']);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            echo(json_encode($rows));
 | 
					            $idstring = implode(" OR ",$ids);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $return->tags = array();
 | 
				
			||||||
 | 
					            $query = "SELECT t.tag_name FROM video_tags 
 | 
				
			||||||
 | 
					                        INNER JOIN tags t on video_tags.tag_id = t.tag_id
 | 
				
			||||||
 | 
					                        WHERE $idstring
 | 
				
			||||||
 | 
					                        GROUP BY t.tag_name";
 | 
				
			||||||
 | 
					            $result = $conn->query($query);
 | 
				
			||||||
 | 
					            while ($r = mysqli_fetch_assoc($result)) {
 | 
				
			||||||
 | 
					                array_push($return->tags, $r);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            echo(json_encode($return));
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case "loadVideo":
 | 
					        case "loadVideo":
 | 
				
			||||||
            $query = "SELECT movie_name,movie_url,thumbnail,likes,quality,length FROM videos WHERE movie_id='" . $_POST['movieid'] . "'";
 | 
					            $query = "SELECT movie_name,movie_url,thumbnail,likes,quality,length FROM videos WHERE movie_id='" . $_POST['movieid'] . "'";
 | 
				
			||||||
@@ -50,6 +67,18 @@ if (isset($_POST['action'])) {
 | 
				
			|||||||
            $arr["likes"] = $row["likes"];
 | 
					            $arr["likes"] = $row["likes"];
 | 
				
			||||||
            $arr["quality"] = $row["quality"];
 | 
					            $arr["quality"] = $row["quality"];
 | 
				
			||||||
            $arr["length"] = $row["length"];
 | 
					            $arr["length"] = $row["length"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // load tags of this video
 | 
				
			||||||
 | 
					            $arr['tags'] = Array();
 | 
				
			||||||
 | 
					            $query = "SELECT t.tag_name FROM video_tags 
 | 
				
			||||||
 | 
					                        INNER JOIN tags t on video_tags.tag_id = t.tag_id
 | 
				
			||||||
 | 
					                        WHERE video_tags.video_id=".$_POST['movieid']."
 | 
				
			||||||
 | 
					                        GROUP BY t.tag_name";
 | 
				
			||||||
 | 
					            $result = $conn->query($query);
 | 
				
			||||||
 | 
					            while ($r = mysqli_fetch_assoc($result)) {
 | 
				
			||||||
 | 
					                array_push($arr['tags'], $r);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            echo(json_encode($arr));
 | 
					            echo(json_encode($arr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
@@ -77,6 +106,7 @@ if (isset($_POST['action'])) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case "getTags":
 | 
					        case "getTags":
 | 
				
			||||||
 | 
					            // todo add this to loadVideo maybe
 | 
				
			||||||
            $movieid = $_POST['movieid'];
 | 
					            $movieid = $_POST['movieid'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $query = "SELECT tag_name FROM video_tags 
 | 
					            $query = "SELECT tag_name FROM video_tags 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,10 +10,12 @@ create table if not exists videos
 | 
				
			|||||||
    movie_id    int auto_increment
 | 
					    movie_id    int auto_increment
 | 
				
			||||||
        primary key,
 | 
					        primary key,
 | 
				
			||||||
    movie_name  varchar(200)                       null,
 | 
					    movie_name  varchar(200)                       null,
 | 
				
			||||||
    movie_url   varchar(200)                       null,
 | 
					    movie_url   varchar(250)                       null,
 | 
				
			||||||
    thumbnail   mediumblob                         null,
 | 
					    thumbnail   mediumblob                         null,
 | 
				
			||||||
    likes       int      default 0                 null,
 | 
					    likes       int      default 0                 null,
 | 
				
			||||||
    create_date datetime default CURRENT_TIMESTAMP null
 | 
					    create_date datetime default CURRENT_TIMESTAMP null,
 | 
				
			||||||
 | 
					    quality     int                                null,
 | 
				
			||||||
 | 
					    length      int                                null comment 'in seconds'
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
create table if not exists video_tags
 | 
					create table if not exists video_tags
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								src/App.js
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								src/App.js
									
									
									
									
									
								
							@@ -48,19 +48,25 @@ class App extends React.Component {
 | 
				
			|||||||
                        <li className="nav-item">
 | 
					                        <li className="nav-item">
 | 
				
			||||||
                            <div className="nav-link"
 | 
					                            <div className="nav-link"
 | 
				
			||||||
                                 style={this.state.page === "default" ? {color: "rgba(255,255,255,.75"} : {}}
 | 
					                                 style={this.state.page === "default" ? {color: "rgba(255,255,255,.75"} : {}}
 | 
				
			||||||
                                 onClick={() => this.loadHomePage()}>Home
 | 
					                                 onClick={() => this.setState({page: "default"})}>Home
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        <li className="nav-item">
 | 
					                        <li className="nav-item">
 | 
				
			||||||
                            <div className="nav-link"
 | 
					                            <div className="nav-link"
 | 
				
			||||||
                                 style={this.state.page === "random" ? {color: "rgba(255,255,255,.75"} : {}}
 | 
					                                 style={this.state.page === "random" ? {color: "rgba(255,255,255,.75"} : {}}
 | 
				
			||||||
                                 onClick={() => this.loadRandomPage()}>Random Video
 | 
					                                 onClick={() => this.setState({page: "random"})}>Random Video
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        <li className="nav-item">
 | 
					                        <li className="nav-item">
 | 
				
			||||||
                            <div className="nav-link"
 | 
					                            <div className="nav-link"
 | 
				
			||||||
                                 style={this.state.page === "categories" ? {color: "rgba(255,255,255,.75"} : {}}
 | 
					                                 style={this.state.page === "categories" ? {color: "rgba(255,255,255,.75"} : {}}
 | 
				
			||||||
                                 onClick={() => this.loadCategoriesPage()}>Categories
 | 
					                                 onClick={() => this.setState({page: "categories"})}>Categories
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                        <li className="nav-item">
 | 
				
			||||||
 | 
					                            <div className="nav-link"
 | 
				
			||||||
 | 
					                                 style={this.state.page === "settings" ? {color: "rgba(255,255,255,.75"} : {}}
 | 
				
			||||||
 | 
					                                 onClick={() => this.setState({page: "settings"})}>Settings
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                    </ul>
 | 
					                    </ul>
 | 
				
			||||||
@@ -70,21 +76,6 @@ class App extends React.Component {
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    loadCategoriesPage() {
 | 
					 | 
				
			||||||
        console.log("click categories");
 | 
					 | 
				
			||||||
        this.setState({page: "categories"});
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    loadRandomPage() {
 | 
					 | 
				
			||||||
        console.log("click random");
 | 
					 | 
				
			||||||
        this.setState({page: "random"});
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    loadHomePage() {
 | 
					 | 
				
			||||||
        console.log("click default");
 | 
					 | 
				
			||||||
        this.setState({page: "default"});
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    showVideo(element) {
 | 
					    showVideo(element) {
 | 
				
			||||||
        this.setState({
 | 
					        this.setState({
 | 
				
			||||||
            page: "video"
 | 
					            page: "video"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import SideBar from "./SideBar";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import "./css/HomePage.css"
 | 
					import "./css/HomePage.css"
 | 
				
			||||||
import "./css/DefaultPage.css"
 | 
					import "./css/DefaultPage.css"
 | 
				
			||||||
 | 
					import Tag from "./Tag";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class HomePage extends React.Component {
 | 
					class HomePage extends React.Component {
 | 
				
			||||||
    // stores all available movies
 | 
					    // stores all available movies
 | 
				
			||||||
@@ -23,7 +24,8 @@ class HomePage extends React.Component {
 | 
				
			|||||||
                sdvideonr: null,
 | 
					                sdvideonr: null,
 | 
				
			||||||
                tagnr: null
 | 
					                tagnr: null
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            tag: "all"
 | 
					            tag: "All",
 | 
				
			||||||
 | 
					            selectionnr: null
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,7 +36,12 @@ class HomePage extends React.Component {
 | 
				
			|||||||
        this.fetchStartData();
 | 
					        this.fetchStartData();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // this function clears all preview elements an reloads gravity with tag
 | 
					    /**
 | 
				
			||||||
 | 
					     * fetch available videos for specified tag
 | 
				
			||||||
 | 
					     * this function clears all preview elements an reloads gravity with tag
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param tag tag to fetch videos
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    fetchVideoData(tag) {
 | 
					    fetchVideoData(tag) {
 | 
				
			||||||
        const updateRequest = new FormData();
 | 
					        const updateRequest = new FormData();
 | 
				
			||||||
        updateRequest.append('action', 'getMovies');
 | 
					        updateRequest.append('action', 'getMovies');
 | 
				
			||||||
@@ -45,7 +52,10 @@ class HomePage extends React.Component {
 | 
				
			|||||||
            .then((response) => response.json()
 | 
					            .then((response) => response.json()
 | 
				
			||||||
                .then((result) => {
 | 
					                .then((result) => {
 | 
				
			||||||
                    this.data = result;
 | 
					                    this.data = result;
 | 
				
			||||||
                    this.setState({loadeditems: []});
 | 
					                    this.setState({
 | 
				
			||||||
 | 
					                        loadeditems: [],
 | 
				
			||||||
 | 
					                        selectionnr: this.data.length
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
                    this.loadindex = 0;
 | 
					                    this.loadindex = 0;
 | 
				
			||||||
                    this.loadPreviewBlock(12);
 | 
					                    this.loadPreviewBlock(12);
 | 
				
			||||||
                }))
 | 
					                }))
 | 
				
			||||||
@@ -54,6 +64,9 @@ class HomePage extends React.Component {
 | 
				
			|||||||
            });
 | 
					            });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * fetch the necessary data for left info box
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    fetchStartData() {
 | 
					    fetchStartData() {
 | 
				
			||||||
        const updateRequest = new FormData();
 | 
					        const updateRequest = new FormData();
 | 
				
			||||||
        updateRequest.append('action', 'getStartData');
 | 
					        updateRequest.append('action', 'getStartData');
 | 
				
			||||||
@@ -69,7 +82,8 @@ class HomePage extends React.Component {
 | 
				
			|||||||
                            hdvideonr: result['hd'],
 | 
					                            hdvideonr: result['hd'],
 | 
				
			||||||
                            sdvideonr: result['sd'],
 | 
					                            sdvideonr: result['sd'],
 | 
				
			||||||
                            tagnr: result['tags']
 | 
					                            tagnr: result['tags']
 | 
				
			||||||
                        }});
 | 
					                        }
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
                }))
 | 
					                }))
 | 
				
			||||||
            .catch(() => {
 | 
					            .catch(() => {
 | 
				
			||||||
                console.log("no connection to backend");
 | 
					                console.log("no connection to backend");
 | 
				
			||||||
@@ -86,7 +100,7 @@ class HomePage extends React.Component {
 | 
				
			|||||||
            <div>
 | 
					            <div>
 | 
				
			||||||
                <div className='pageheader'>
 | 
					                <div className='pageheader'>
 | 
				
			||||||
                    <span className='pageheadertitle'>Home Page</span>
 | 
					                    <span className='pageheadertitle'>Home Page</span>
 | 
				
			||||||
                    <span className='pageheadersubtitle'>All Videos - {this.state.sideinfo.videonr}</span>
 | 
					                    <span className='pageheadersubtitle'>{this.state.tag} Videos - {this.state.selectionnr}</span>
 | 
				
			||||||
                    <hr/>
 | 
					                    <hr/>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <SideBar>
 | 
					                <SideBar>
 | 
				
			||||||
@@ -99,10 +113,26 @@ class HomePage extends React.Component {
 | 
				
			|||||||
                    <div className='sidebarinfo'><b>{this.state.sideinfo.tagnr}</b> different Tags!</div>
 | 
					                    <div className='sidebarinfo'><b>{this.state.sideinfo.tagnr}</b> different Tags!</div>
 | 
				
			||||||
                    <hr/>
 | 
					                    <hr/>
 | 
				
			||||||
                    <div className='sidebartitle'>Default Tags:</div>
 | 
					                    <div className='sidebartitle'>Default Tags:</div>
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("all")}>All</button>
 | 
					                    <Tag onClick={() => {
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("fullhd")}>FullHd</button>
 | 
					                        this.setState({tag: "All"});
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("lowquality")}>LowQuality</button>
 | 
					                        this.fetchVideoData("all");
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("hd")}>HD</button>
 | 
					                    }}>All
 | 
				
			||||||
 | 
					                    </Tag>
 | 
				
			||||||
 | 
					                    <Tag onClick={() => {
 | 
				
			||||||
 | 
					                        this.setState({tag: "Full HD"});
 | 
				
			||||||
 | 
					                        this.fetchVideoData("fullhd");
 | 
				
			||||||
 | 
					                    }}>FullHd
 | 
				
			||||||
 | 
					                    </Tag>
 | 
				
			||||||
 | 
					                    <Tag onClick={() => {
 | 
				
			||||||
 | 
					                        this.setState({tag: "Low Quality"});
 | 
				
			||||||
 | 
					                        this.fetchVideoData("lowquality");
 | 
				
			||||||
 | 
					                    }}>LowQuality
 | 
				
			||||||
 | 
					                    </Tag>
 | 
				
			||||||
 | 
					                    <Tag onClick={() => {
 | 
				
			||||||
 | 
					                        this.setState({tag: "HD"});
 | 
				
			||||||
 | 
					                        this.fetchVideoData("hd");
 | 
				
			||||||
 | 
					                    }}>HD
 | 
				
			||||||
 | 
					                    </Tag>
 | 
				
			||||||
                </SideBar>
 | 
					                </SideBar>
 | 
				
			||||||
                <div className='maincontent'>
 | 
					                <div className='maincontent'>
 | 
				
			||||||
                    {this.state.loadeditems.map(elem => (
 | 
					                    {this.state.loadeditems.map(elem => (
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,21 @@ import React from "react";
 | 
				
			|||||||
import "./css/Player.css"
 | 
					import "./css/Player.css"
 | 
				
			||||||
import {PlyrComponent} from 'plyr-react';
 | 
					import {PlyrComponent} from 'plyr-react';
 | 
				
			||||||
import SideBar from "./SideBar";
 | 
					import SideBar from "./SideBar";
 | 
				
			||||||
 | 
					import Tag from "./Tag";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Player extends React.Component {
 | 
					class Player extends React.Component {
 | 
				
			||||||
    constructor(props, context) {
 | 
					    constructor(props, context) {
 | 
				
			||||||
        super(props, context);
 | 
					        super(props, context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.state = {};
 | 
					        this.state = {
 | 
				
			||||||
 | 
					            sources: null,
 | 
				
			||||||
 | 
					            movie_name: null,
 | 
				
			||||||
 | 
					            likes: null,
 | 
				
			||||||
 | 
					            quality: null,
 | 
				
			||||||
 | 
					            length: null,
 | 
				
			||||||
 | 
					            tags: []
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.props = props;
 | 
					        this.props = props;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -50,10 +58,9 @@ class Player extends React.Component {
 | 
				
			|||||||
                    <div className='sidebarinfo'><b>{this.state.length}</b> Minutes of length!</div>
 | 
					                    <div className='sidebarinfo'><b>{this.state.length}</b> Minutes of length!</div>
 | 
				
			||||||
                    <hr/>
 | 
					                    <hr/>
 | 
				
			||||||
                    <div className='sidebartitle'>Tags:</div>
 | 
					                    <div className='sidebartitle'>Tags:</div>
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("all")}>All</button>
 | 
					                    {this.state.tags.map((m) => (
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("fullhd")}>FullHd</button>
 | 
					                        <Tag>{m.tag_name}</Tag>
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("lowquality")}>LowQuality</button>
 | 
					                    ))}
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("hd")}>HD</button>
 | 
					 | 
				
			||||||
                </SideBar>
 | 
					                </SideBar>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <div className="videowrapper">
 | 
					                <div className="videowrapper">
 | 
				
			||||||
@@ -96,7 +103,8 @@ class Player extends React.Component {
 | 
				
			|||||||
                    movie_name: result.movie_name,
 | 
					                    movie_name: result.movie_name,
 | 
				
			||||||
                    likes: result.likes,
 | 
					                    likes: result.likes,
 | 
				
			||||||
                    quality: result.quality,
 | 
					                    quality: result.quality,
 | 
				
			||||||
                    length: result.length
 | 
					                    length: result.length,
 | 
				
			||||||
 | 
					                    tags: result.tags
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,15 @@ import React from "react";
 | 
				
			|||||||
import Preview from "./Preview";
 | 
					import Preview from "./Preview";
 | 
				
			||||||
import "./css/RandomPage.css"
 | 
					import "./css/RandomPage.css"
 | 
				
			||||||
import SideBar from "./SideBar";
 | 
					import SideBar from "./SideBar";
 | 
				
			||||||
 | 
					import Tag from "./Tag";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class RandomPage extends React.Component {
 | 
					class RandomPage extends React.Component {
 | 
				
			||||||
    constructor(props, context) {
 | 
					    constructor(props, context) {
 | 
				
			||||||
        super(props, context);
 | 
					        super(props, context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.state = {
 | 
					        this.state = {
 | 
				
			||||||
            videos: []
 | 
					            videos: [],
 | 
				
			||||||
 | 
					            tags: []
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -26,10 +28,9 @@ class RandomPage extends React.Component {
 | 
				
			|||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <SideBar>
 | 
					                <SideBar>
 | 
				
			||||||
                    <div className='sidebartitle'>Visible Tags:</div>
 | 
					                    <div className='sidebartitle'>Visible Tags:</div>
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("all")}>All</button>
 | 
					                    {this.state.tags.map((m) => (
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("fullhd")}>FullHd</button>
 | 
					                        <Tag>{m.tag_name}</Tag>
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("lowquality")}>LowQuality</button>
 | 
					                    ))}
 | 
				
			||||||
                    <button className='tagbtn' onClick={() => this.fetchVideoData("hd")}>HD</button>
 | 
					 | 
				
			||||||
                </SideBar>
 | 
					                </SideBar>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <div className='maincontent'>
 | 
					                <div className='maincontent'>
 | 
				
			||||||
@@ -61,7 +62,11 @@ class RandomPage extends React.Component {
 | 
				
			|||||||
        fetch('/api/videoload.php', {method: 'POST', body: updateRequest})
 | 
					        fetch('/api/videoload.php', {method: 'POST', body: updateRequest})
 | 
				
			||||||
            .then((response) => response.json()
 | 
					            .then((response) => response.json()
 | 
				
			||||||
                .then((result) => {
 | 
					                .then((result) => {
 | 
				
			||||||
                    this.setState({videos: result});
 | 
					                    console.log(result);
 | 
				
			||||||
 | 
					                    this.setState({
 | 
				
			||||||
 | 
					                        videos: result.rows,
 | 
				
			||||||
 | 
					                        tags: result.tags
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
                }))
 | 
					                }))
 | 
				
			||||||
            .catch(() => {
 | 
					            .catch(() => {
 | 
				
			||||||
                console.log("no connection to backend");
 | 
					                console.log("no connection to backend");
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										21
									
								
								src/Tag.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/Tag.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					import React from "react";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "./css/Tag.css"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Tag extends React.Component {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(props, context) {
 | 
				
			||||||
 | 
					        super(props, context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.props = props;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    render() {
 | 
				
			||||||
 | 
					        // todo onclick events correctly
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					            <button className='tagbtn' onClick={this.props.onClick}>{this.props.children}</button>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default Tag;
 | 
				
			||||||
@@ -9,26 +9,6 @@
 | 
				
			|||||||
    border: 2px #3574fe solid;
 | 
					    border: 2px #3574fe solid;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tagbtn {
 | 
					 | 
				
			||||||
    color: white;
 | 
					 | 
				
			||||||
    margin: 10px;
 | 
					 | 
				
			||||||
    background-color: #3574fe;
 | 
					 | 
				
			||||||
    border: none;
 | 
					 | 
				
			||||||
    border-radius: 10px;
 | 
					 | 
				
			||||||
    padding: 5px 15px 5px 15px;
 | 
					 | 
				
			||||||
    /*font-weight: bold;*/
 | 
					 | 
				
			||||||
    display: block;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.tagbtn:focus {
 | 
					 | 
				
			||||||
    background-color: #004eff;
 | 
					 | 
				
			||||||
    outline: none;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.tagbtn:hover {
 | 
					 | 
				
			||||||
    background-color: #004eff;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.sidebartitle {
 | 
					.sidebartitle {
 | 
				
			||||||
    font-weight: bold;
 | 
					    font-weight: bold;
 | 
				
			||||||
    font-size: larger;
 | 
					    font-size: larger;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								src/css/Tag.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/css/Tag.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					.tagbtn {
 | 
				
			||||||
 | 
					    color: white;
 | 
				
			||||||
 | 
					    margin: 10px;
 | 
				
			||||||
 | 
					    background-color: #3574fe;
 | 
				
			||||||
 | 
					    border: none;
 | 
				
			||||||
 | 
					    border-radius: 10px;
 | 
				
			||||||
 | 
					    padding: 5px 15px 5px 15px;
 | 
				
			||||||
 | 
					    /*font-weight: bold;*/
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tagbtn:focus {
 | 
				
			||||||
 | 
					    background-color: #004eff;
 | 
				
			||||||
 | 
					    outline: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tagbtn:hover {
 | 
				
			||||||
 | 
					    background-color: #004eff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user