add option to enable disable the tmdb support

This commit is contained in:
Lukas Heiligenbrunner 2020-07-18 01:10:04 +02:00
parent 8b89db6d5c
commit 1d9cf31f13
7 changed files with 98 additions and 13 deletions

View File

@ -2,7 +2,7 @@
class SSettings class SSettings
{ {
private $database; private ?Database $database;
/** /**
* SSettings constructor. * SSettings constructor.
@ -19,4 +19,21 @@ class SSettings
$r = mysqli_fetch_assoc($result); $r = mysqli_fetch_assoc($result);
return $r['video_path']; return $r['video_path'];
} }
/**
* check if TMDB is enableds
* @return bool isenabled?
*/
public function isTMDBGrabbingEnabled(): bool
{
$query = "SELECT TMDB_grabbing from settings";
$result = $this->database->getConnection()->query($query);
if(!$result){
return true; // if undefined in db --> default true
}else{
$r = mysqli_fetch_assoc($result);
return $r['TMDB_grabbing'] == '1';
}
}
} }

View File

@ -1,7 +1,9 @@
<?php <?php
require 'Database.php'; require 'Database.php';
require 'SSettings.php';
$conn = Database::getInstance()->getConnection(); $conn = Database::getInstance()->getConnection();
$settings = new SSettings();
if (isset($_POST['action'])) { if (isset($_POST['action'])) {
$action = $_POST['action']; $action = $_POST['action'];
@ -15,11 +17,10 @@ if (isset($_POST['action'])) {
} }
$r = mysqli_fetch_assoc($result); $r = mysqli_fetch_assoc($result);
if ($r['password'] != "-1") { // booleans need to be set manually
$r['passwordEnabled'] = true; $r['passwordEnabled'] = $r['password'] != "-1";
} else { $r['TMDB_grabbing'] = ($r['TMDB_grabbing'] != '0');
$r['passwordEnabled'] = false;
}
echo json_encode($r); echo json_encode($r);
break; break;
case "saveGeneralSettings": case "saveGeneralSettings":
@ -27,12 +28,14 @@ if (isset($_POST['action'])) {
$password = $_POST['password']; $password = $_POST['password'];
$videopath = $_POST['videopath']; $videopath = $_POST['videopath'];
$tvshowpath = $_POST['tvshowpath']; $tvshowpath = $_POST['tvshowpath'];
$tmdbsupport = $_POST['tmdbsupport'];
$query = "UPDATE settings SET $query = "UPDATE settings SET
video_path='$videopath', video_path='$videopath',
episode_path='$tvshowpath', episode_path='$tvshowpath',
password='$password', password='$password',
mediacenter_name='$mediacentername' mediacenter_name='$mediacentername',
TMDB_grabbing=$tmdbsupport
WHERE 1"; WHERE 1";
if ($conn->query($query) === true) { if ($conn->query($query) === true) {

View File

@ -1,6 +1,7 @@
<?php <?php
require 'Database.php'; require 'Database.php';
require 'TMDBMovie.php'; require 'TMDBMovie.php';
require 'SSettings.php';
writeLog("starting extraction!\n"); writeLog("starting extraction!\n");
@ -10,9 +11,12 @@ $tmdb = new TMDBMovie();
$tmdbgenres = $tmdb->getAllGenres(); $tmdbgenres = $tmdb->getAllGenres();
$conn = Database::getInstance()->getConnection(); $conn = Database::getInstance()->getConnection();
$settings = new SSettings();
$scandir = "../videos/prn/"; // load video path from settings
$scandir = "../" . $settings->getVideoPath();
$arr = scandir($scandir); $arr = scandir($scandir);
$TMDB_enabled = $settings->isTMDBGrabbingEnabled();
$all = 0; $all = 0;
$added = 0; $added = 0;
@ -33,15 +37,22 @@ foreach ($arr as $elem) {
$poster = -1; $poster = -1;
$genres = -1; $genres = -1;
if (!is_null($dta = $tmdb->searchMovie($moviename))) { if (!is_null($dta = $tmdb->searchMovie($moviename))) {
$pic = file_get_contents($tmdb->picturebase . $dta->poster_path);
$poster = shell_exec("ffmpeg -hide_banner -loglevel panic -ss 00:04:00 -i \"../videos/prn/$elem\" -vframes 1 -q:v 2 -f singlejpeg pipe:1 2>/dev/null"); $poster = shell_exec("ffmpeg -hide_banner -loglevel panic -ss 00:04:00 -i \"../videos/prn/$elem\" -vframes 1 -q:v 2 -f singlejpeg pipe:1 2>/dev/null");
// check if tmdb support is enabled
if ($TMDB_enabled) {
$pic = file_get_contents($tmdb->picturebase . $dta->poster_path);
// error handling for download error // error handling for download error
if (!$pic) { if (!$pic) {
$pic = $poster; $pic = $poster;
$poster = -1; $poster = -1;
echo "Failed to load Picture from TMDB! \n"; echo "Failed to load Picture from TMDB! \n";
} }
} else {
$pic = $poster;
$poster = -1;
}
$genres = $dta->genre_ids; $genres = $dta->genre_ids;
} else { } else {

View File

@ -29,9 +29,22 @@ create table if not exists video_tags
foreign key (video_id) references videos (movie_id) foreign key (video_id) references videos (movie_id)
); );
create table settings
(
id enum(1) NOT NULL default 0,
video_path varchar(255) null,
episode_path varchar(255) null,
password varchar(32) default '-1' null,
mediacenter_name varchar(32) default 'OpenMediaCenter' null,
PRIMARY KEY (id)
);
INSERT INTO tags (tag_id, tag_name) INSERT INTO tags (tag_id, tag_name)
VALUES (2, 'fullhd'); VALUES (2, 'fullhd');
INSERT INTO tags (tag_id, tag_name) INSERT INTO tags (tag_id, tag_name)
VALUES (3, 'lowquality'); VALUES (3, 'lowquality');
INSERT INTO tags (tag_id, tag_name) INSERT INTO tags (tag_id, tag_name)
VALUES (4, 'hd'); VALUES (4, 'hd');
INSERT INTO settings (video_path, episode_path, password, mediacenter_name)
VALUES ('./videos/', './tvshows/', -1, 'OpenMediaCenter');

View File

@ -110,4 +110,21 @@ describe('<CategoryPage/>', function () {
expect(func).toBeCalledTimes(1); expect(func).toBeCalledTimes(1);
}); });
it('test sidebar tag clicks', function () {
const func = jest.fn();
const wrapper = mount(<CategoryPage category="fullhd"/>);
wrapper.instance().loadTag = func;
console.log(wrapper.debug());
expect(func).toBeCalledTimes(0);
wrapper.find("SideBar").find("Tag").forEach(e => {
e.simulate("click");
})
expect(func).toBeCalledTimes(4);
});
}); });

View File

@ -8,6 +8,7 @@ class GeneralSettings extends React.Component {
this.state = { this.state = {
passwordsupport: false, passwordsupport: false,
tmdbsupport: null,
videopath: "", videopath: "",
tvshowpath: "", tvshowpath: "",
@ -23,12 +24,14 @@ class GeneralSettings extends React.Component {
fetch('/api/Settings.php', {method: 'POST', body: updateRequest}) fetch('/api/Settings.php', {method: 'POST', body: updateRequest})
.then((response) => response.json() .then((response) => response.json()
.then((result) => { .then((result) => {
console.log(result);
this.setState({ this.setState({
videopath: result.video_path, videopath: result.video_path,
tvshowpath: result.episode_path, tvshowpath: result.episode_path,
mediacentername: result.mediacenter_name, mediacentername: result.mediacenter_name,
password: result.password, password: result.password,
passwordsupport: result.passwordEnabled passwordsupport: result.passwordEnabled,
tmdbsupport: result.TMDB_grabbing
}); });
})); }));
} }
@ -67,6 +70,17 @@ class GeneralSettings extends React.Component {
}} }}
/> />
<Form.Check
type="switch"
id="custom-switch-2"
data-testid='tmdb-switch'
label="Enable TMDB video grabbing support"
checked={this.state.tmdbsupport}
onChange={() => {
this.setState({tmdbsupport: !this.state.tmdbsupport})
}}
/>
{this.state.passwordsupport ? {this.state.passwordsupport ?
<Form.Group data-testid="passwordfield"> <Form.Group data-testid="passwordfield">
<Form.Label>Password</Form.Label> <Form.Label>Password</Form.Label>
@ -98,6 +112,7 @@ class GeneralSettings extends React.Component {
updateRequest.append('videopath', this.state.videopath); updateRequest.append('videopath', this.state.videopath);
updateRequest.append('tvshowpath', this.state.tvshowpath); updateRequest.append('tvshowpath', this.state.tvshowpath);
updateRequest.append('mediacentername', this.state.mediacentername); updateRequest.append('mediacentername', this.state.mediacentername);
updateRequest.append("tmdbsupport", this.state.tmdbsupport);
fetch('/api/Settings.php', {method: 'POST', body: updateRequest}) fetch('/api/Settings.php', {method: 'POST', body: updateRequest})
.then((response) => response.json() .then((response) => response.json()

View File

@ -98,4 +98,13 @@ describe('<GeneralSettings/>', function () {
wrapper.find("[data-testid='passwordfield']").find("FormControl").simulate("change", event); wrapper.find("[data-testid='passwordfield']").find("FormControl").simulate("change", event);
expect(wrapper.state().password).toBe("test"); expect(wrapper.state().password).toBe("test");
}); });
it('test tmdbsupport change event', function () {
const wrapper = shallow(<GeneralSettings/>);
wrapper.setState({tmdbsupport: true});
expect(wrapper.state().tmdbsupport).toBe(true);
wrapper.find("[data-testid='tmdb-switch']").simulate("change");
expect(wrapper.state().tmdbsupport).toBe(false);
});
}); });