Lazy movie list cover, lazy load actor, list next episode in season when play

pull/9/head
root 4 years ago
parent a42de4f8ab
commit c24a1675cb

@ -17,10 +17,14 @@ class Controller_Home extends Controller_Template
$user = Session::get('user');
$sessionServer = Session::get('server');
if(!$user)
if(is_null($user))
Response::redirect('/login');
$server = $sessionServer ? Model_Server::find_by_pk($sessionServer->id) : Model_Server::find_one_by('user_id', $user->id);
$server = $sessionServer ? Model_Server::find_by_pk($sessionServer->id) : (Model_Server::find_one_by('user_id', $user->id) ?: Model_Server::find_by([
['online', '=', 1],
['disable', '=', 0],
], null, null, 10)[0]
);
if(!$server)
Response::redirect('/login');

@ -117,7 +117,7 @@ class Controller_Rest_Browse extends Controller_Rest
if(!$library)
return $this->response(array('error' => true, 'message' => 'No library found!'));
return Model_Library::getSectionsContent($server, $library);
return Model_Library::getLibraryContents($server, $library);
}
public function get_seasons()

@ -26,7 +26,7 @@ class Controller_Rest_Movie extends Controller_Rest
else
$episodes = [$movie];
$view = View::forge('stream/index');
$view = View::forge('player/index');
$view->set('user_settings', $user_settings);
$view->set('movie', $movie);

@ -95,7 +95,7 @@ class Model_Library extends Model_Overwrite
'server_id' => $server->id,
'name' => $library['@attributes']['title'],
'type' => $library['@attributes']['type'],
'updatedAt' => $library['@attributes']['updatedAt'],
'updatedAt' => time(),
'createdAt' => $library['@attributes']['createdAt'],
'scannedAt' => $library['@attributes']['scannedAt']
));
@ -120,7 +120,7 @@ class Model_Library extends Model_Overwrite
* @return bool
* @throws FuelException
*/
public static function getSectionsContent($server, $library)
public static function getLibraryContents($server, $library)
{
$curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port? ':' . $server->port : '') . '/library/sections/' . $library->plex_key . '/all?X-Plex-Token=' . $server->token, 'curl');

@ -44,6 +44,7 @@ class Model_Movie extends Model_Overwrite
private $_season = null;
private $_tv_show = null;
private $_library = null;
/** @var Model_Server */
private $_server = null;
public $trailer = null;
@ -82,6 +83,9 @@ class Model_Movie extends Model_Overwrite
return $this->_library;
}
/**
* @return Model_Server
*/
public function getServer()
{
if(!$this->_server) {
@ -463,20 +467,6 @@ class Model_Movie extends Model_Overwrite
return $movies_id_array;
}
public static function getMovieMetadata($server, $movie)
{
/*$curl = Request::forge('http://' . $server->url . ($server->port ? ':' . $server->port : '') . $movie->plex_key . '?X-Plex-Token=' . $server->token, 'curl');
$curl->execute();
if ($curl->response()->status !== 200)
return false;
$media = Format::forge($curl->response()->body, 'xml')->to_array();
if(isset($movies['Video']))
$this->getMovies($server, $movies['Video']);*/
}
public static function getThirtyLastedTvShows($server)
{
return self::find(function ($query) use ($server) {
@ -492,6 +482,12 @@ class Model_Movie extends Model_Overwrite
->join('server', 'LEFT')
->on('library.server_id', '=', 'server.id')
->where('server.id', $server->id)
->and_where('server.online', 1)
->and_where('server.disable', 0)
->and_where('library.disable', 0)
->and_where('tvshow.disable', 0)
->and_where('season.disable', 0)
->and_where('movie.disable', 0)
->and_where('movie.type', 'episode')
->order_by('movie.addedAt', 'DESC')
->order_by(DB::expr('MAX(' . DB::table_prefix('movie') .'.addedAt)'), 'DESC ')//'movie.addedAt', 'DESC')
@ -512,6 +508,7 @@ class Model_Movie extends Model_Overwrite
->join('server', 'LEFT')
->on('library.server_id', '=', 'server.id')
->where('server.id', $server->id)
->and_where('movie.disable', 0)
->and_where('movie.type', 'movie')
->order_by('movie.addedAt', 'DESC')
->limit(30)
@ -526,6 +523,7 @@ class Model_Movie extends Model_Overwrite
return $query
->select('*')
->where('type', 'movie')
->group_by('originalTitle', 'title', 'year', 'studio')
->order_by('title', 'ASC')
;
});
@ -534,6 +532,6 @@ class Model_Movie extends Model_Overwrite
public function getTrailer()
{
$trailer = new Model_Trailer($this->originalTitle ?: $this->title, $this->year, $this->type);
$this->trailer = $trailer->trailer;
$this->trailer = $trailer->getTrailer();
}
}

@ -1,36 +1,44 @@
<?php
use Fuel\Core\DB;
use Fuel\Core\Model_Crud;
use Fuel\Core\Str;
abstract class Model_Overwrite extends Model_Crud
{
protected static function disable()
{
return isset(static::$_disable) ? 'disabled' : null;
}
public function delete()
{
static::disable() ? $query = DB::update(static::$_table_name)
->value('disable', 1)
->where(static::primary_key(), '=', $this->{static::primary_key()}) : null;
$this->pre_delete($query);
$result = $query ? $query->execute(static::get_connection(true)) : null;
return $this->post_delete($result);
}
protected function pre_save(&$query)
{
if($this->is_new()) {
if(!isset($this->{static::primary_key()}) || !$this->{static::primary_key()} || $this->{static::primary_key()} === null) {
$this->{static::primary_key()} = Str::random('uuid');
$query->set([static::primary_key() => $this->{static::primary_key()}]);
}
}
}
}
<?php
use Fuel\Core\DB;
use Fuel\Core\Model_Crud;
use Fuel\Core\Str;
abstract class Model_Overwrite extends Model_Crud
{
protected static function disable()
{
return isset(static::$_disable) ? 'disabled' : null;
}
/**
* All deletion is fake and change just an attribute in database
* @return int|mixed
*/
public function delete()
{
static::disable() ? $query = DB::update(static::$_table_name)
->value('disable', 1)
->where(static::primary_key(), '=', $this->{static::primary_key()}) : null;
$this->pre_delete($query);
$result = $query ? $query->execute(static::get_connection(true)) : null;
return $this->post_delete($result);
}
/**
* Use it to force to use UUID to primary key
* @param \Fuel\Core\Database_Query $query
*/
protected function pre_save(&$query)
{
if($this->is_new()) {
if(!isset($this->{static::primary_key()}) || !$this->{static::primary_key()} || $this->{static::primary_key()} === null) {
$this->{static::primary_key()} = Str::random('uuid');
$query->set([static::primary_key() => $this->{static::primary_key()}]);
}
}
}
}

@ -129,16 +129,15 @@ class Model_Season extends Model_Overwrite
$tvshow_id = $tvshow->id;
$season = Model_Season::find(function ($query) use ($XMLseason, $tvshow_id) {
/** @var Database_Query_Builder_Select $query */
return $query
->select('*')
->where('plex_key', $XMLseason['@attributes']['key'])
->where('plex_key', $XMLseason['@attributes']['ratingKey'])
->and_where('tv_show_id', $tvshow_id);
})[0] ?: Model_Season::forge();
$season->set([
'tv_show_id' => $tvshow->id,
'plex_key' => $XMLseason['@attributes']['key'],
'plex_key' => $XMLseason['@attributes']['ratingKey'],
'number' => $XMLseason['@attributes']['index'],
'title' => $XMLseason['@attributes']['title'],
'thumb' => isset($XMLseason['@attributes']['thumb']) ? $XMLseason['@attributes']['thumb'] : null,
@ -171,7 +170,7 @@ class Model_Season extends Model_Overwrite
public static function getMovies($server, $season)
{
try {
$curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . $season->plex_key . '?X-Plex-Token=' . $server->token, 'curl');
$curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . '/library/metadata/' . $season->plex_key . '/children?X-Plex-Token=' . $server->token, 'curl');
if($server->https) {
$curl->set_options([

@ -10,7 +10,7 @@ class Model_Trailer
private $_url;
public $trailer;
private $_trailer;
public function __construct($title, $year, $type)
{
@ -26,16 +26,24 @@ class Model_Trailer
$this->getMovieTrailer();
if(!$this->trailer)
if(!$this->_trailer)
$this->getMovieTeaser();
return $this->trailer;
}
}
/**
* @return mixed
*/
public function getTrailer()
{
return $this->_trailer;
}
private function getUrl()
{
$html = Request::forge('https://www.themoviedb.org/search/movie?query=' . urlencode($this->_title) . '+y%3A' . $this->_year . '&language=us', 'curl');
$html->set_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0');
$html->execute();
if ($html->response()->status !== 200)
@ -56,6 +64,7 @@ class Model_Trailer
private function getMovieTrailer()
{
$html = Request::forge('https://www.themoviedb.org' . $this->_url . '/videos?active_nav_item=Trailers&video_language=en-US&language=en-US', 'curl');
$html->set_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0');
$html->set_options(array(
CURLOPT_FOLLOWLOCATION => true,
)
@ -76,12 +85,13 @@ class Model_Trailer
$youtube = '//www.youtube.com/embed/'.$youtube[1].'?enablejsapi=1&autoplay=0&hl=en-US&modestbranding=1&fs=1';
$this->trailer = $youtube;
$this->_trailer = $youtube;
}
private function getMovieTeaser()
{
$html = Request::forge('https://www.themoviedb.org' . $this->_url . '/videos?active_nav_item=Teasers&video_language=en-US&language=en-US', 'curl');
$html->set_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0');
$html->set_options(array(
CURLOPT_FOLLOWLOCATION => true,
)
@ -102,6 +112,6 @@ class Model_Trailer
$youtube = preg_replace('/\&origin\=https%3A%2F%2Fwww\.themoviedb\.org/i', '', $youtube[1]);
$this->trailer = $youtube;
$this->_trailer = $youtube;
}
}

@ -117,9 +117,7 @@ class Model_Tvshow extends Model_Overwrite
if(!$this->_server)
$this->getServer();
$plex_key = preg_split('/\/children/', $this->plex_key)[0];
$curl = Request::forge(($this->_server->https ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . $plex_key . '?X-Plex-Token=' . $this->_server->token, 'curl');
$curl = Request::forge(($this->_server->https ? 'https' : 'http').'://' . $this->_server->url . ($this->_server->port ? ':' . $this->_server->port : '') . '/library/metadata/' . $this->plex_key . '?X-Plex-Token=' . $this->_server->token, 'curl');
if($this->_server->https) {
$curl->set_options([
@ -161,16 +159,15 @@ class Model_Tvshow extends Model_Overwrite
$library_id = $library->id;
$tvshow = Model_Tvshow::find(function ($query) use ($subsection, $library_id) {
/** @var Database_Query_Builder_Select $query */
return $query
->select('*')
->where('plex_key', $subsection['@attributes']['key'])
->where('plex_key', $subsection['@attributes']['ratingKey'])
->and_where('library_id', $library_id);
})[0] ?: Model_Tvshow::forge();
$tvshow->set([
'library_id' => $library->id,
'plex_key' => $subsection['@attributes']['key'],
'plex_key' => $subsection['@attributes']['ratingKey'],
'studio' => isset($subsection['@attributes']['studio']) ? $subsection['@attributes']['studio'] : null,
'title' => $subsection['@attributes']['title'],
'contentRating' => isset($subsection['@attributes']['contentRating']) ? $subsection['@attributes']['contentRating'] : null,
@ -212,7 +209,7 @@ class Model_Tvshow extends Model_Overwrite
public static function getTvShowSeasons($server, $tvshow)
{
try {
$curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . $tvshow->plex_key . '?X-Plex-Token=' . $server->token, 'curl');
$curl = Request::forge(($server->https ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . '/library/metadata/' . $tvshow->plex_key . '/children?X-Plex-Token=' . $server->token, 'curl');
if($server->https) {
$curl->set_options([

@ -47,7 +47,7 @@ class Model_User extends Model_Overwrite
;
});
if(count($result) > 0)
if($result !== null)
return $result[0];
else
return false;

@ -0,0 +1,50 @@
<?php
namespace Fuel\Tasks;
use Exception;
use Fuel\Core\Debug;
use Model_Movie;
use Fuel\Core\Request;
class Clean
{
public function movies()
{
$movies = Model_Movie::find_all();
/** @var Model_Movie $movie */
foreach ($movies as $movie) {
$server = $movie->getServer();
try {
$curl = Request::forge(($server->https === '1' ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . $movie->plex_key . '?X-Plex-Token=' . $server->token, 'curl');
$curl->set_options([
CURLOPT_CONNECTTIMEOUT => 1
]);
if($server->https === '1') {
$curl->set_options([
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false
]);
}
$curl->execute();
if ($curl->response()->status !== 200)
throw new FuelException('No session found!');
} catch (Exception $exception) {
$movie->set([
'updatedAt' => time(),
'disable' => 1
]);
$movie->save();
}
}
}
}

@ -4,7 +4,9 @@ namespace Fuel\Tasks;
use Exception;
use Fuel\Core\FuelException;
use Fuel\Core\RequestStatusException;
use Model_Library;
use Model_Movie;
use Model_Season;
use Model_Server;
use Model_Tvshow;
@ -19,7 +21,7 @@ class Server
foreach ($servers as $server) {
try {
$curl = Request::forge(($this->_server->https === '1' ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . '?X-Plex-Token=' . $server->token, 'curl');
$curl = Request::forge(($server->https === '1' ? 'https' : 'http').'://' . $server->url . ($server->port ? ':' . $server->port : '') . '?X-Plex-Token=' . $server->token, 'curl');
$curl->set_options([
CURLOPT_CONNECTTIMEOUT => 1
@ -54,14 +56,134 @@ class Server
}
}
public function checkNotFound()
{
$this->_checkMovies();
$this->_checkSeasons();
$this->_checkTvShows();
}
private function _checkMovies()
{
$movies = Model_Movie::find_all();
/** @var Model_Movie $movie */
foreach ($movies as $movie) {
$movie->plex_key;
$server = $movie->getServer();
try {
$curl = Request::forge(($server->https === '1' ? 'https' : 'http') . '://' . $server->url . ($server->port ? ':' . $server->port : '') . $movie->plex_key . '?X-Plex-Token=' . $server->token, 'curl');
$curl->set_options([
CURLOPT_CONNECTTIMEOUT => 1
]);
if ($server->https === '1') {
$curl->set_options([
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false
]);
}
$curl->execute();
} catch (RequestStatusException $exception) {
$movie->set([
'disable' => 1
]);
$movie->save();
} catch (Exception $exception) {
}
}
}
private function _checkSeasons()
{
$seasons = Model_Season::find_all();
/** @var Model_Season $season */
foreach ($seasons as $season) {
$season->plex_key;
$server = $season->getServer();
try {
$curl = Request::forge(($server->https === '1' ? 'https' : 'http') . '://' . $server->url . ($server->port ? ':' . $server->port : '') . $season->plex_key . '?X-Plex-Token=' . $server->token, 'curl');
$curl->set_options([
CURLOPT_CONNECTTIMEOUT => 1
]);
if ($server->https === '1') {
$curl->set_options([
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false
]);
}
$curl->execute();
} catch (RequestStatusException $exception) {
$season->set([
'disable' => 1
]);
$season->save();
} catch (Exception $exception) {
}
}
}
private function _checkTvShows()
{
$tv_shows = Model_Tvshow::find_all();
/** @var Model_Tvshow $tv_show */
foreach ($tv_shows as $tv_show) {
$tv_show->plex_key;
$server = $tv_show->getServer();
try {
$curl = Request::forge(($server->https === '1' ? 'https' : 'http') . '://' . $server->url . ($server->port ? ':' . $server->port : '') . $tv_show->plex_key . '?X-Plex-Token=' . $server->token, 'curl');
$curl->set_options([
CURLOPT_CONNECTTIMEOUT => 1
]);
if ($server->https === '1') {
$curl->set_options([
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false
]);
}
$curl->execute();
} catch (RequestStatusException $exception) {
$tv_show->set([
'disable' => 1
]);
$tv_show->save();
} catch (Exception $exception) {
}
}
}
public function browseServers()
{
$time = ini_get('max_execution_time');
$servers = Model_Server::find_all();
$servers = Model_Server::find([
'where' => [
'online' => 1,
'disable' => 0
]
]);
if($time > 0 && $time < ($servers * 5 * 60)) {
ini_set('max_execution_time', 5 * $servers);
if($time > 0 && $time < ($servers * 10 * 60)) {
ini_set('max_execution_time', 10 * $servers);
}
foreach ($servers as $server) {
@ -90,7 +212,7 @@ class Server
$libraries = Model_Library::find_by('server_id',$server->id);
foreach ($libraries as $library) {
Model_Library::getSectionsContent($server, $library);
Model_Library::getLibraryContents($server, $library);
}
$this->browseTvShows($server);

@ -16,7 +16,7 @@
<div class="HubCellHeader-hubCellHeader-2pvYN">
<div class="HubCellTitle-hubCellTitle-2abIn">
<a href="#" role="link" class="Link-link-2XYrU Link-default-32xSO"><?php echo strtoupper(__('recently.tv_shows')); ?></a>
<span class="PrePlayStatusButton-statusButton-28XJ7 Button-button--JvPI Button-small-3Zwli"><?php echo count($episodes); ?></span>
<span class="PrePlayStatusButton-statusButton-28XJ7 Button-button--JvPI Button-small-3Zwli"><?php echo $episodes !== null ? count($episodes) : 0; ?></span>
</div>
<div class="HubCell-hubActions-28w1- tv-shows-hubcell">
<button role="button" data-hubcell-action="previous"
@ -131,7 +131,7 @@
<div class="HubCellHeader-hubCellHeader-2pvYN">
<div class="HubCellTitle-hubCellTitle-2abIn">
<a href="#" role="link" class="Link-link-2XYrU Link-default-32xSO"><?php echo strtoupper(__('recently.movies')); ?></a>
<span class="PrePlayStatusButton-statusButton-28XJ7 Button-button--JvPI Button-small-3Zwli"><?php echo count($movies); ?></span>
<span class="PrePlayStatusButton-statusButton-28XJ7 Button-button--JvPI Button-small-3Zwli"><?php echo $movies !== null ? count($movies) : 0; ?></span>
</div>
<div class="HubCell-hubActions-28w1- movies-hubcell">
<button role="button" data-hubcell-action="previous"
@ -256,7 +256,7 @@
if ($('#' + select + '_list').scrollLeft() === 0) {
$(previous).addClass('isDisabled');
}
}, 200);
}, 100);
}
if ($(this).data('hubcell-action') === 'next') {
$('#' + select + '_list').animate({scrollLeft: $('#' + select + '_list').scrollLeft() + 152 * 2}, 300);
@ -272,7 +272,7 @@
if ($('#' + select + '_list').scrollLeft() === 0) {
$(next).addClass('isDisabled');
}
}, 300);
}, 100);
}
});
});

@ -15,7 +15,7 @@
type="button">Par Titre
<div class="DisclosureArrowButton-disclosureArrow-34Wg3 DisclosureArrow-disclosureArrow-1sBFv DisclosureArrowButton-down-bd2wx DisclosureArrowButton-medium-3-Y37 DisclosureArrow-down-1U7WW DisclosureArrow-up-rjGpc DisclosureArrow-default-3_FCW DisclosureArrow-medium-3VjTd "></div>
</button>
<span class="PageHeaderBadge-badge-sOmD- Badge-badge-1VCQ1 Badge-default-1XnzT"><?php echo count($movies); ?></span>
<span class="PageHeaderBadge-badge-sOmD- Badge-badge-1VCQ1 Badge-default-1XnzT"><?php echo $movies ? count($movies) : 0; ?></span>
</div>
<div class="PageHeaderRight-pageHeaderRight-2CT0g">
<div class="pageHeaderToolbar-toolbarContainer-2N-IJ Measure-container-2XznZ">
@ -50,6 +50,7 @@
<div class="MetadataListPageContent-metadataListPageContent-s56y9 PageContent-pageContent-16mK6">
<div class="MetadataListPageContent-metadataListScroller-1uFgY Scroller-scroller-d5-b- Scroller-vertical-1bgGS ">
<div class=" " style="width: 100%; height: auto;">
<?php if($movies) : ?>
<?php foreach ($movies as $movie) : ?>
<div class=" virtualized-cell-3KPHx " data-qa-id="cellItem"
style="display: inline-block; margin-left: 25px; margin-top: 15px;">
@ -77,8 +78,8 @@
<?php if(get_class($movie) === Model_Movie::class) : ?>
<a href="/movie/<?php echo $movie->id; ?>"
<?php elseif(get_class($movie) === Model_Tvshow::class) : ?>
<a href="/tvshow/<?php echo $movie->id; ?>"
<?php endif; ?>
<a href="/tvshow/<?php echo $movie->id; ?>"
<?php endif; ?>
role="link"
class="MetadataPosterCardOverlay-link-1Swhl Link-link-2XYrU Link-default-32xSO"></a>
<button tabindex="-1" data-id="<?php echo $movie->id; ?>"
@ -110,8 +111,8 @@
<?php if(get_class($movie) === Model_Movie::class) : ?>
<a title="<?php echo $movie->title; ?>" href="/movie/<?php echo $movie->id; ?>"
<?php elseif(get_class($movie) === Model_Tvshow::class) : ?>
<a title="<?php echo $movie->title; ?>" href="/tvshow/<?php echo $movie->id; ?>"
<?php endif; ?>
<a title="<?php echo $movie->title; ?>" href="/tvshow/<?php echo $movie->id; ?>"
<?php endif; ?>
role="link" style="width: 130px;"
class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F Link-link-2XYrU Link-default-32xSO">
<?php echo $movie->title; ?>
@ -120,12 +121,13 @@
<?php if(get_class($movie) === Model_Movie::class) : ?>
<?php echo $movie->year; ?>
<?php elseif(get_class($movie) === Model_Tvshow::class) : ?>
<?php echo count($movie->getSeasons()) > 1 ? count($movie->getSeasons()) . ' season' : count($movie->getSeasons()) . ' seasons'; ?>
<?php echo ($movie->getSeasons() ? count($movie->getSeasons()) : 0) . (($movie->getSeasons() ? count($movie->getSeasons()) : 0) > 1 ? ' season' : ' seasons'); ?>
<?php endif; ?>
</span>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
</div>

@ -306,7 +306,7 @@
<div class="TagPosterCard-card-RVD0D MetadataPosterCardFace-poster-L2P6r TagPosterCard-isPerson-1ez1h" style="width: 118px; height: 118px;">
<?php if (isset($role['@attributes']['thumb'])) : ?>
<div class="PosterCardImg-imageContainer-1Ar4M">
<div style="background-image: url('<?php echo $role['@attributes']['thumb']; ?>'); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;" class=""></div>
<div class="actor_img" data-background="<?php echo $role['@attributes']['thumb']; ?>" style="background-image: url(''); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;" class=""></div>
</div>
<?php else : ?>
<div style="font-size: 30px; line-height: 118px;" class="Anagram-anagram-2KZ_Z">
@ -403,6 +403,10 @@
event.target.remove();
});
/** LOAD IMG **/
$('.actor_img').each(function (index, element) {
var actor_img = $(element).data('background');
$(element).css('background-image', 'url("' + actor_img + '")');
});
$('.PosterCardImg-imageContainer-1Ar4M[data-movie-id]').each(function (index, element) {
var movie_id = $(element).data('movie-id');
$('[data-movie-id="' + movie_id + '"] > div').css('background-image', 'url("/cover/movie?movie_id='+ movie_id +'&width='+ 325 +'&height='+ 488 +'")');

@ -59,7 +59,7 @@
<div class="MetadataPosterCardFace-face--dz_D MetadataPosterCardFace-poster-L2P6r MetadataPosterCardFace-faceFront-1bxHG ">
<i class="plex-icon-shows-560 MetadataPosterCardIcon-placeholderIcon-2P76z" aria-hidden="true" style="font-size: 30px; line-height: 189px;"></i>
<div class="PosterCardImg-imageContainer-1Ar4M" data-movie-id="<?php echo $movie->id; ?>">
<div style="background-image: url(); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;"
<div style="background-image: none; background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;"
class=""></div>
</div>
<div class=" MetadataPosterCardOverlay-overlay-1uMpL">
@ -330,12 +330,36 @@
});
});
/** LOAD IMAGES **/
$('.PosterCardImg-imageContainer-1Ar4M[data-movie-id]').each(function (index, element) {
/** IF USING CLOUDFLARE TOO MANY REQUEST **/
setTimeout(function(){
var movie_id = $(element).data('movie-id');
$('[data-movie-id="' + movie_id + '"] > div').css('background-image', 'url("/cover/movie?movie_id='+ movie_id +'&width='+ 160 +'&height='+ 236 +'")');
}, 10 * index);
$('.MetadataListPageContent-metadataListScroller-1uFgY.MetadataListPageContent-hasGutter-1EfyE.Scroller-scroller-d5-b-.Scroller-vertical-1bgGS').scroll(function() {
let number = 1;
$('.PosterCardImg-imageContainer-1Ar4M[data-movie-id]').each(function (index, element) {
let movie_id = $(element).data('movie-id');
let position = element.getBoundingClientRect();
let movie = document.querySelector('[data-movie-id="' + movie_id + '"] > div');
if( position.top > 0 && position.top <= (window.innerHeight || document.documentElement.clientHeight) && !movie.classList.contains('hasBackground') ) {
console.log(movie, position.top, window.innerHeight, !movie.classList.contains('hasBackground'));
movie.classList.add('hasBackground');
console.log(movie, position.top, window.innerHeight, !movie.classList.contains('hasBackground'));
/** IF USING CLOUDFLARE TOO MANY REQUEST **/
setTimeout(function () {
$('[data-movie-id="' + movie_id + '"] > div')
.css('opacity', 0)
.css('background-image', 'url("/cover/movie?movie_id=' + movie_id + '&width=' + 160 + '&height=' + 236 + '")')
.animate({opacity: 1}, 500);
}, 50 +( 50 * number));
number++;
} else if( ( position.top < 0 || position.top > (window.innerHeight || document.documentElement.clientHeight) ) && movie.classList.contains('hasBackground') ) {
$('[data-movie-id="' + movie_id + '"] > div').css('background-image', '')
.removeClass('hasBackground')
.animate({opacity: 0}, 500);
}
});
});
$('.MetadataListPageContent-metadataListScroller-1uFgY.MetadataListPageContent-hasGutter-1EfyE.Scroller-scroller-d5-b-.Scroller-vertical-1bgGS').scroll();
});
</script>

@ -0,0 +1,293 @@
<input id="data_movie" type="hidden" data-src="<?php echo $movie->getStreamUrl($user_settings); ?>" data-movie-type="<?php echo $movie->type; ?>"/>
<input id="data_movie_id" type="hidden" data-movie-id="<?php echo $movie->id; ?>" />
<button aria-label="Lire" role="playCenter" type="button"
class="PlayPauseOverlay-playButton-25OfW PlayButton-playButton-3WX8X Link-link-2XYrU Link-default-32xSO"
style="z-index: 0">
<div class="PlayPauseOverlay-playCircle-3ydPY PlayButton-playCircle-3Evfd"><i
class="plex-icon-play-560 PlayPauseOverlay-playIcon-21tOf PlayButton-playIcon-dt3sk"
aria-hidden="true"></i></div>
</button>
<div class="AudioVideoFullPlayer-topBar-2XUGM AudioVideoFullPlayer-bar-dDYeo" style="z-index: 0">
<div class="FullPlayerTopControls-topControls-2gkcE">
<div>
<button aria-label="Réduire le lecteur" title="Réduire le lecteur" data-qa-id="minimizePlayerButton"
role="button"
class="FullPlayerTopControls-topButton-2iGrJ PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-player-minimize-560" aria-hidden="true"></i></button>
</div>
<div>
<button aria-haspopup="true" id="id-1451" role="button"
class="FullPlayerTopControls-castButton-1CwQ3 FullPlayerTopControls-topButton-2iGrJ PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 DisclosureArrowButton-disclosureArrowButton-3tbYZ DisclosureArrowButton-medium-3-Y37 Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-player-companion-cast-560" aria-hidden="true"></i>
<div class="DisclosureArrowButton-disclosureArrow-34Wg3 DisclosureArrow-disclosureArrow-1sBFv DisclosureArrowButton-down-bd2wx DisclosureArrowButton-medium-3-Y37 DisclosureArrow-down-1U7WW DisclosureArrow-up-rjGpc DisclosureArrow-default-3_FCW DisclosureArrow-medium-3VjTd"></div>
</button>
<button aria-label="Entrer en mode plein écran" title="Entrer en mode plein écran"
data-qa-id="fullscreenButton" role="button"
class="FullPlayerTopControls-topButton-2iGrJ PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-player-fullscreen-560" aria-hidden="true"></i></button>
</div>
</div>
</div>
<div class="AudioVideoFullPlayer-content-37T7O hidden" style="bottom: 86px;">
<div class="AudioVideoPlayQueue-container-mD38o" style="background: #1b1b1b;">
<div class="AudioVideoFullPlayerContentHeadingContainer-headingContainer-2UyXv">
<div class="AudioVideoFullPlayerContentHeading-heading-1XO9q">Lire la liste de lecture</div>
<div class="AudioVideoPlayQueue-topContainer-3udEG">
<div class="AudioVideoPlayQueue-topLeft-_-AJU">
<span class="AudioVideoPlayQueue-count-1zBsg"><?php echo count($episodes); ?> élément</span>
</div>
</div>
<div class="AudioVideoFullPlayerContentHeadingContainer-divider-1A1d_"></div>
</div>
<div class="AudioVideoPlayQueue-content-28l4x Scroller-vertical-VScFL Scroller-scroller-3GqQc Scroller-vertical-VScFL Scroller-auto-LsWiW" style="overflow-y: auto;">
<?php foreach ($episodes as $episode) : ?>
<div class="AudioVideoPlayQueueItemDragSource-container-3ncn7">
<div class="AudioVideoPlayQueueItem-container-2_nsg AudioVideoPlayQueueItem-isCurrentItem-3g1KW"
data-qa-id="playQueueItem">
<div class="AudioVideoPlayQueueItem-leftContainer-2xVS6">
<div class="EqualizerIcon-equalizer-2SoFA" style="width: 14px; height: 14px;">
<?php if($movie->id === $episode->id) : ?>
<div class="EqualizerIcon-bar-1nPot"
style="left: 0px; width: 3px; background-color: rgb(249, 190, 3); transition-duration: 467.145ms; transform: scaleY(0.9);"></div>
<div class="EqualizerIcon-bar-1nPot"
style="left: 5px; width: 3px; background-color: rgb(249, 190, 3); transition-duration: 409.912ms; transform: scaleY(0.9);"></div>
<div class="EqualizerIcon-bar-1nPot"
style="left: 9.5px; width: 3px; background-color: rgb(249, 190, 3); transition-duration: 477.391ms; transform: scaleY(0.9);"></div>
<?php endif; ?>
</div>
</div>
<div class="AudioVideoPlayQueueItem-metadataContainer-w326I AudioVideoPlayerPlayQueueMetadata-container-sM2h0">
<div class="AudioVideoPlayerPlayQueueMetadata-cardContainer-vcGvj">
<?php if ($episode->type === 'movie') : ?>
<div class="AudioVideoPlayerPlayQueueMetadata-card-18P30 QuickSearchMetadataPosterCard-card-3_XFi MetadataPosterButtonCard-card-2T8TR" style="width: 36px; height: 54px;">
<?php else : ?>
<div class="AudioVideoPlayerPlayQueueMetadata-card-18P30 QuickSearchMetadataPosterCard-card-3_XFi MetadataPosterButtonCard-card-2T8TR" style="width: 64px; height: 36px;">
<?php endif; ?>
<div class="PosterCardImg-imageContainer-1Ar4M">
<?php if ($episode->type === 'movie') : ?>
<div style="background-image: url('/cover/movie?movie_id=<?php echo $episode->id; ?>&width=36&height=54'); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;"class=""></div>
<?php else : ?>
<div style="background-image: url('/cover/movie?movie_id=<?php echo $episode->id; ?>&width=64&height=36&thumb=true'); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;"class=""></div>
<?php endif; ?>
</div>
<button aria-label="<?php echo $episode->year; ?>"
data-qa-id="metadataPosterPlayButton" tabindex="-1" role="button"
class="MetadataPosterButtonCard-playButton-aOV1E PlayButton-playButton-3WX8X Link-link-2XYrU Link-default-32xSO "
type="button">
<div class="MetadataPosterButtonCard-playCircle-366hc PlayButton-playCircle-3Evfd">
<i class="plex-icon-play-560 PlayButton-playIcon-dt3sk" aria-hidden="true"></i>
</div>
</button>
</div>
</div>
<div class="AudioVideoPlayerPlayQueueMetadata-titlesContainer-2G9lR" data-qa-id="playQueueTitleContainer">
<a data-qa-id="metadataTitleLink" title="<?php echo $episode->title; ?>" href="<?php echo ($episode->type === 'movie' ? '/movie/' : '/episode/') . $episode->id; ?>"
role="link" class="MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F Link-link-2XYrU Link-default-32xSO"><?php echo $episode->title; ?></a>
<?php if ($episode->type === 'movie') : ?>
<span class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY "
data-qa-id="metadataYear"><?php echo $episode->year; ?>
</span>
<?php else : ?>
<span class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY ">
<span>
<a title="Saison 1" href="#" role="link" class=" Link-link-2n0yJ Link-default-2XA2b">S1</a>
<span class="DashSeparator-separator-2a3yn">·</span>
<a title="VOSTFR (BDRip" href="#" role="link" class=" Link-link-2n0yJ Link-default-2XA2b">E26</a>
</span>
<span class="DashSeparator-separator-2a3yn"></span>
<a data-qa-id="metadataTitleLink" title="VOSTFR (BDRip" href="#" role="link" class=" Link-link-2n0yJ Link-default-2XA2b">VOSTFR (BDRip</a>
</span>
<?php endif; ?>
</div>
<div class="AudioVideoPlayQueueItem-metadataDurationContainer-184Jw AudioVideoPlayerPlayQueueMetadata-durationContainer-2dgI9">
<?php echo $episode->getDuration(); ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<!-- Quality choice -->
<div class="AudioVideoPlaybackSettings-container-2pTAj AudioVideoStripeContainer-container-MI02O"
style="transform: translateY(246px)">
<div class="AudioVideoPlaybackSettings-title-2MRYF">Configuration de la lecture</div>
<div class="AudioVideoPlaybackSettings-menusContainer-2bvbj" data-qa-id="playbackSettingsContainer">
<div class="AudioVideoSettingsRow-row-2CrSz ">
<div class="AudioVideoSettingsRow-label-2h0yy AudioVideoSettingsRow-cell-24KvK">Qualité</div>
<div class="AudioVideoSettingsRow-cell-24KvK">
<button aria-haspopup="true" id="id-221" data-qa-id="videoQuality" role="button"
class="DisclosureArrowButton-disclosureArrowButton-3tbYZ DisclosureArrowButton-medium-3-Y37 DisclosureArrowButton-isSelected-oswRN Link-link-2XYrU Link-default-32xSO Link-medium-2KGbN Link-isSelected-3GpAs "
type="button">Convertir (Maximum)
<div class="DisclosureArrowButton-disclosureArrow-34Wg3 DisclosureArrow-disclosureArrow-1sBFv DisclosureArrowButton-down-bd2wx DisclosureArrowButton-medium-3-Y37 DisclosureArrow-down-1U7WW DisclosureArrow-up-rjGpc DisclosureArrow-default-3_FCW DisclosureArrow-medium-3VjTd DisclosureArrow-isSelected-VMAVr"></div>
</button>
</div>
</div>
<div class="AudioVideoSettingsRow-row-2CrSz ">
<div class="AudioVideoSettingsRow-label-2h0yy AudioVideoSettingsRow-cell-24KvK">Flux Audio</div>
<div class="AudioVideoSettingsRow-cell-24KvK"><span data-qa-id="audioStream">Inconnu
<span class="DashSeparator-separator-2a3yn"></span>MP3 Stéréo
</span></div>
</div>
<div class="AudioVideoSettingsRow-row-2CrSz ">
<div class="AudioVideoSettingsRow-label-2h0yy AudioVideoSettingsRow-cell-24KvK">Sous-titres</div>
<div class="AudioVideoSettingsRow-cell-24KvK"><span><span data-qa-id="subtitleStream">Aucun
</span></span></div>
</div>
</div>
<div class="Measure-scrollContainer-3vb4J">
<div class="Measure-expandContent-1JQfL"></div>
</div>
<div class="Measure-scrollContainer-3vb4J">
<div class="Measure-shrinkContent-32Udi Measure-expandContent-1JQfL"></div>
</div>
</div>
<div class="Next hidden" style="position: absolute;bottom: 120px;right: 100px;">
<button name="close" type="button" class="AudioVideoPlayerControls-closeButton-2ULmA btn btn-danger">
<span class="btn-label">Fermer</span>
</button>
<?php foreach ($episodes as $index => $episode) : ?>
<?php if($movie->id === $episode->id && isset($episodes[$index + 1])) : ?>
<button id="next" type="button" class="submit-btn btn btn-primary" data-id="<?php echo $episodes[$index + 1]->id; ?>">
<span class="btn-label">Episode suivant</span>
</button>
<?php endif; ?>
<?php endforeach; ?>
</div>
<div class="AudioVideoFullPlayer-bottomBar-2yixi AudioVideoFullPlayer-bar-dDYeo"
style="bottom: -86px; height: 86px; z-index: 0">
<div class="AudioVideoBottomBar-controlsContainer-2c743">
<div>
<div class="AudioVideoBottomBar-seekBar-2ai3z SeekBar-seekBar-2UK3i Slider-slider-2oLVT Slider-hasAutoHideThumb-tpdhC">
<div class="SeekBar-seekBarTrack-3Gu5R Slider-track-28JOS">
<div class="SeekBar-seekBarBuffer-3bUz9 Slider-secondaryFill-31_05 Slider-fill-35GFq "
style="transform: scaleX(0);"></div>
<div class="SeekBar-seekBarFill-1Lcu0 Slider-fill-35GFq "
style="transform: scaleX(0);"></div>
</div>
<div class="Slider-thumbTrack-21hGV" style="transform: translateX(-100%);">
<button id="buttonTrack" role="slider" aria-valuemin="0"
aria-valuemax="<?php echo $movie->duration; ?>" aria-valuenow="0"
class="Slider-thumb-2QGiU Link-link-2XYrU Link-link-2XYrU Link-default-32xSO"
type="range"></button>
</div>
</div>
</div>
<div class="AudioVideoPlayerControls-controls-OwK1f">
<div class="AudioVideoPlayerControls-buttonGroupLeft-3kwFX AudioVideoPlayerControls-buttonGroup-ShnOa">
<div class="AudioVideoPlayerControls-titlesButtonGroup-2V4Qg AudioVideoPlayerControls-buttonGroup-ShnOa">
<div class="AudioVideoPlayerControls-metadataContainer-3h2Oi AudioVideoPlayerControlsMetadata-container-2PqUx ">
<?php if ($movie->type === 'episode') : ?>
<div class="AudioVideoPlayerControlsMetadata-titlesContainer-1oLik">
<a title="<?php echo $movie->getTvShow()->title; ?>"
href="/tvshow/<?php echo $movie->getTvShow()->id; ?>" role="link"
class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F Link-link-2XYrU Link-default-32xSO">
<?php echo $movie->getTvShow()->title; ?>
</a>
<span class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY ">
<span>
<a title="Saison <?php echo $movie->getSeason()->number; ?>"
href="/season/<?php echo $movie->getSeason()->id; ?>" role="link"
class=" Link-link-2XYrU Link-default-32xSO">S<?php echo $movie->getSeason()->number; ?></a>
<span class="DashSeparator-separator-2a3yn">·</span>
<a title="<?php echo $movie->title; ?>" href="#" role="link"
class=" Link-link-2XYrU Link-default-32xSO">E<?php echo $movie->number; ?></a>
</span>
<span class="DashSeparator-separator-2a3yn"></span>
<a data-qa-id="metadataTitleLink" title="<?php echo $movie->title; ?>" href="#"
role="link" class=" Link-link-2XYrU Link-default-32xSO">
<?php echo $movie->title; ?>
</a>
</span>
</div>
<?php else : ?>
<div class="AudioVideoPlayerControlsMetadata-titlesContainer-1oLik">
<a title="<?php echo $movie->title; ?>" href="/movie/<?php echo $movie->id; ?>"
role="link"
class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F Link-link-2XYrU Link-default-32xSO">
<?php echo $movie->title; ?>
</a>
<span class="MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY ">
<?php echo $movie->year; ?>
</span>
</div>
<?php endif; ?>
</div>
</div>
<div class="AudioVideoPlayerControls-durationContainer-3TK0D">
<button data-qa-id="mediaDuration" role="button"
class="DurationRemaining-container-1F4w8 Link-link-2XYrU Link-default-32xSO"
type="button"><span class="media-time">00:00</span> / <span
class="media-duration"><?php echo $movie->getDurationMovie(); ?></span></button>
</div>
</div>
<div class="AudioVideoPlayerControls-buttonGroupCenter-Vok98 AudioVideoPlayerControls-buttonGroup-ShnOa">
<button aria-label="Répéter" title="Répéter" data-qa-id="repeatButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-repeat-560" aria-hidden="true"></i></button>
<button aria-label="Précédent" title="Précédent" data-qa-id="previousButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 IconButton-isDisabled-2Wi5U Link-link-2XYrU Link-default-32xSO isDisabled "
type="button" disabled=""><i class="plex-icon-player-prev-560" aria-hidden="true"></i>
</button>
<button aria-label="Reculer (30 secondes)" title="Reculer (30 secondes)" data-qa-id="skipBackButton"
role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-skip-back-560" aria-hidden="true"></i></button>
<button aria-label="Lire" title="Lire" data-qa-id="resumeButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-play-560" aria-hidden="true"></i></button>
<button aria-label="Avancer (30 secondes)" title="Avancer (30 secondes)"
data-qa-id="skipForwardButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-skip-forward-560" aria-hidden="true"></i></button>
<button aria-label="Suivant" title="Suivant" data-qa-id="nextButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-next-560" aria-hidden="true"></i></button>
<button aria-label="Ordre aléatoire." title="Ordre aléatoire." data-qa-id="shuffleButton"
role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-shuffle-560" aria-hidden="true"></i></button>
</div>
<div class="AudioVideoPlayerControls-buttonGroupRight-17650 AudioVideoPlayerControls-buttonGroup-ShnOa">
<div class="AudioVideoPlayerControls-auxButtons-2YhIh"><span><button aria-label="Plus d'actions"
title="Plus d'actions"
id="id-1453"
data-qa-id="moreButton"
role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i
class="plex-icon-player-more-560" aria-hidden="true"></i></button>
</span>
<button aria-label="Réglages" title="Réglages" data-qa-id="videoSettingsButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-video-settings-560" aria-hidden="true"></i>
</button>
</div>
<div>
<button aria-label="Lire la liste de lecture" title="Lire la liste de lecture"
data-qa-id="playQueueButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-queue-560" aria-hidden="true"></i></button>
<span><button aria-label="Sourdine" title="Sourdine" data-qa-id="volumeButton" role="button"
class="PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-player-volume-high-560"
aria-hidden="true"></i></button><div
class="VolumeSlider-slider-1QXdT Slider-slider-2oLVT Slider-hasAutoHideThumb-tpdhC"><div
class="VolumeSlider-track-2WJDz Slider-track-28JOS"><div
class="VolumeSlider-fill-3XkYy Slider-fill-35GFq"
style="transform: scaleX(1);"></div></div><div
class="Slider-thumbTrack-21hGV" style="transform: translateX(-100%);">
<button id="buttonVolume"
role="slider" aria-valuemin="0" aria-valuemax="100" aria-valuenow="100"
class="Slider-thumb-2QGiU Link-link-2XYrU Link-default-32xSO "
type="range"></button></div></div></span>
<button aria-label="Fermer le Lecteur" title="Fermer le Lecteur" data-qa-id="closeButton"
role="button"
class="AudioVideoPlayerControls-closeButton-2ULmA PlayerIconButton-playerButton-1DmNp IconButton-button-2FVq6 Link-link-2XYrU Link-default-32xSO "
type="button"><i class="plex-icon-close-560" aria-hidden="true"></i></button>
</div>
</div>
</div>
</div>
</div>

@ -140,7 +140,7 @@
</div>
<div data-qa-id="metadataTitleContainer"
class="MetadataPosterCell-titleContainer-24DI6">
<a title="<?php echo $episode->title; ?>" href="/tvshow/<?php echo $episode->id; ?>"
<a title="<?php echo $episode->title; ?>" href="/episode/<?php echo $episode->id; ?>"
role="link" style="width: 192px;"
class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F Link-link-2XYrU Link-default-32xSO">
<?php echo $episode->title; ?>

@ -90,7 +90,7 @@
</div>
<script type="text/javascript">
$(window).on('load', function() {
// LIBRARY BUTTON ACTION
// LIBRARY BUTTON REFRESH
$('button.refresh-library-btn').on('click', function () {
var library_id = $(this).data('library-id');
ajax += 1;

@ -215,7 +215,7 @@
<div class="TagPosterCard-card-RVD0D MetadataPosterCardFace-poster-L2P6r TagPosterCard-isPerson-1ez1h" style="width: 118px; height: 118px;">
<?php if (isset($role['@attributes']['thumb'])) : ?>
<div class="PosterCardImg-imageContainer-1Ar4M">
<div style="background-image: url('<?php echo $role['@attributes']['thumb']; ?>'); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;" class=""></div>
<div class="actor_img" data-background="<?php echo $role['@attributes']['thumb']; ?>" style="background-image: url(''); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;" class=""></div>
</div>
<?php else : ?>
<div style="font-size: 30px; line-height: 118px;" class="Anagram-anagram-2KZ_Z">
@ -278,6 +278,11 @@
summary.css('max-height', '78px');
}
});
/** LOAD IMG **/
$('.actor_img').each(function (index, element) {
var actor_img = $(element).data('background');
$(element).css('background-image', 'url("' + actor_img + '")');
});
$('.PosterCardImg-imageContainer-1Ar4M[data-tvshow-id]').each(function (index, element) {
var tvshow_id = $(element).data('tvshow-id');
$('[data-tvshow-id="' + tvshow_id + '"] > div').css('background-image', 'url("/cover/tvshow?tvshow_id=' + tvshow_id + '&width=' + 325 + '&height=' + 488 + '")');

Loading…
Cancel
Save