Optimisation and reforge view

pull/9/head
Chewbaka69 6 years ago
parent 3dd0dfd943
commit b18b1e8b62

@ -17,14 +17,13 @@ class Controller_Library extends Controller_Home
if(!$library)
Response::redirect('/home');
$body = null;
$body = View::forge('libraries/list');
$content = null;
if($library->type === 'movie') {
$body = View::forge('movie/list');
$content = Model_Movie::find_by('library_id', $library->id);
} else if($library->type === 'show') {
$body = View::forge('movie/list');
$content = Model_Tvshow::find_by('library_id', $library->id);
}

@ -19,13 +19,7 @@ class Controller_Movie extends Controller_Home
$movie->getMetaData();
$body = null;
if($movie->type === 'movie')
$body = View::forge('movie/movie');
else if($movie->type === 'episode')
$body = View::forge('movie/episode');
$body = View::forge('movie/index');
$body->set('movie', $movie);
$this->template->body = $body;

@ -50,6 +50,11 @@ class Controller_Register extends Controller
'admin' => 0,
'lastlogin' => time()
));
$user->save();
Session::set('user', $user);
Response::redirect('/home');
}
} catch (FuelException $e) {
$view->set('error', $e->getMessage());

@ -8,17 +8,48 @@ class Controller_Rest_Browse extends Controller_Rest
{
public function get_server()
{
$servers = Model_Server::find(array(
'select' => array('id','name', 'url', 'port', 'token'),
'where' => array(
'id' => Input::get('server_id'),
)
));
if(!Session::get('user')->admin) {
$server = Model_Server::find(array(
'select' => array('id', 'name', 'url', 'port', 'token'),
'where' => array(
'id' => Input::get('server_id'),
'user_id' => Session::get('user')->id
)
));
} else {
$server = Model_Server::find(array(
'select' => array('id', 'name', 'url', 'port', 'token'),
'where' => array(
'id' => Input::get('server_id')
)
));
}
$this->response($servers);
if(!$server)
$this->response(array('error' => true, 'message' => 'No server found!'));
$this->response($server);
}
public function get_library()
{
$library = Model_Library::find_one_by(function($query) {
$query
->select('library.*', 'server.id as server_id', 'server.name as server_name')
->join('server', 'LEFT')
->on('server.id', '=','library.server_id' )
->where('server.user_id', Session::get('user')->id)
->and_where('server.disable', 0)
;
});
if(!$library)
$this->response(array('error' => true, 'message' => 'No server found!'));
$this->response($library);
}
public function get_servers()
public function get_my_servers()
{
$servers = Model_Server::find(array(
'select' => array('id','name'),

@ -259,6 +259,23 @@ class Controller_Rest_Install extends Controller_Rest
);
$logs .= 'Permission table create!'."\r\n";
$logs .= 'Creation table libraries permission'."\r\n";
/**
* CREATE TABLE USER'S PERMISSION
*/
DBUtil::create_table(
'libraries_permission',
array(
'id' => array('constraint' => 36, 'type' => 'varchar'),
'permission_id' => array('constraint' => 36, 'type' => 'varchar'),
'library_id' => array('constraint' => 36, 'type' => 'varchar'),
'value' => array('constraint' => 36, 'type' => 'varchar'),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
);
$logs .= 'Libraries Permission table create!'."\r\n";
$logs .= 'Creation table user permission'."\r\n";
/**
* CREATE TABLE USER'S PERMISSION
@ -269,7 +286,8 @@ class Controller_Rest_Install extends Controller_Rest
'id' => array('constraint' => 36, 'type' => 'varchar'),
'permission_id' => array('constraint' => 36, 'type' => 'varchar'),
'user_id' => array('constraint' => 36, 'type' => 'varchar'),
'library_id' => array('constraint' => 36, 'type' => 'varchar'),
'library_id' => array('constraint' => 36, 'type' => 'varchar', 'null' => true),
'value' => array('constraint' => 36, 'type' => 'varchar'),
'disable' => array('constraint' => 1, 'type' => 'int', 'default' => 0)
),
array('id'), false, 'InnoDB', 'utf8_unicode_ci'
@ -336,8 +354,48 @@ class Controller_Rest_Install extends Controller_Rest
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('libraries_permission', array(
'constraint' => 'constraintPermissionLibrariesPermission',
'key' => 'permission_id',
'reference' => array(
'table' => 'permission',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('libraries_permission', array(
'constraint' => 'constraintLibraryLibrariesPermission',
'key' => 'library_id',
'reference' => array(
'table' => 'permission',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_permission', array(
'constraint' => 'constraintPermissionUserPermission',
'key' => 'permission_id',
'reference' => array(
'table' => 'permission',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_permission', array(
'constraint' => 'constraintUserUserPermission',
'key' => 'user_id',
'reference' => array(
'table' => 'user',
'column' => 'id',
),
'on_update' => 'NO ACTION',
'on_delete' => 'NO ACTION',
));
DBUtil::add_foreign_key('user_permission', array(
'constraint' => 'constraintLibraryPermission',
'constraint' => 'constraintLibraryUserPermission',
'key' => 'library_id',
'reference' => array(
'table' => 'library',
@ -387,6 +445,7 @@ class Controller_Rest_Install extends Controller_Rest
}catch (FuelException $e) {
DBUtil::drop_table('user_watching');
DBUtil::drop_table('user_permission');
DBUtil::drop_table('libraries_permission');
DBUtil::drop_table('permission');
DBUtil::drop_table('library');
DBUtil::drop_table('server');

@ -1,7 +1,6 @@
<?php
use Fuel\Core\Controller_Rest;
use Fuel\Core\Response;
use Fuel\Core\View;
use Fuel\Core\FuelException;
@ -23,6 +22,6 @@ class Controller_Rest_Movie extends Controller_Rest
$view->set('movie', $movie);
return new Response($view);
return $this->response($view->render());
}
}

@ -2,17 +2,16 @@
use Fuel\Core\Controller_Rest;
use Fuel\Core\FuelException;
use Fuel\Core\Response;
use Fuel\Core\Session;
use Fuel\Core\View;
class Controller_Rest_Settings extends Controller_Rest
{
public function get_add_server()
public function get_modal_server()
{
$view = View::forge('modal/modal');
return new Response($view);
return $this->response($view->render());
}
public function post_server()
@ -43,7 +42,7 @@ class Controller_Rest_Settings extends Controller_Rest
return $this->response(array('error' => false));
} catch (FuelException $e) {
return $this->response(array('error' => true, 'message' => $e->getMessage() ?: 'Wrong parameters'), 400);
return $this->response(array('error' => true, 'message' => $e->getMessage() ?: 'Wrong parameters'), $e->getCode());
}
}
@ -66,4 +65,32 @@ class Controller_Rest_Settings extends Controller_Rest
return $this->response(array('error' => true, 'message' => $e->getMessage() ?: 'Wrong parameters'), 400);
}
}
public function delete_library()
{
try {
$library = Input::delete('library_id');
$library = Model_Library::find_one_by(function($query) use($library) {
$query
->join('server', 'LEFT')
->on('server.id', '=','library.server_id' )
->where('server.user_id', Session::get('user')->id)
->and_where('library.id', $library)
->and_where('library.disable', 0)
->and_where('server.disable', 0)
;
});
if(!$library)
throw new FuelException('No active library found!');
$library->set(['disable' => 1]);
$library->save();
return $this->response(array('error' => false));
} catch (FuelException $e) {
return $this->response(array('error' => true, 'message' => $e->getMessage() ?: 'Wrong parameters'), 400);
}
}
}

@ -1,7 +1,6 @@
<?php
use Fuel\Core\Controller_Template;
use Fuel\Core\DB;
use Fuel\Core\Response;
use Fuel\Core\Session;
use Fuel\Core\View;
@ -32,7 +31,7 @@ class Controller_Settings extends Controller_Template
public function action_servers()
{
$this->template->js_bottom = ['plex_alert.js'];
$this->template->js_bottom = ['plex_alert.js', 'server_refresh.js'];
$body = View::forge('settings/servers');
@ -49,25 +48,4 @@ class Controller_Settings extends Controller_Template
$this->template->body = $body;
}
public function action_libraries()
{
$body = View::forge('settings/libraries');
$user_id = Session::get('user')->id;
$libraries = Model_Library::find(function($query) use($user_id) {
$query
->select('library.*')
->join('server', 'LEFT')
->on('server.id', '=','library.server_id' )
->where('server.user_id', $user_id)
->and_where('server.disable', 0)
;
});
$body->set('libraries', $libraries);
$this->template->body = $body;
}
}

@ -8,5 +8,7 @@ return array(
'library/:library_id' => 'library/index',
'tvshow/:tvshow_id' => 'tvshow/index',
'season/:season_id' => 'season/index',
'movie/:movie_id' => 'movie/index'
'episode/:episode_id' => 'episode/index',
'movie/:movie_id' => 'movie/index',
'settings/libraries/premissions/:library_id' => 'settings/libraries/permissions'
);

@ -4,8 +4,10 @@
<div class="HubCell-hubCell-3Ys17" data-qa-id="tv_show"
style="visibility: visible;">
<div class="HubCellHeader-hubCellHeader-2pvYN">
<div class="HubCellTitle-hubCellTitle-2abIn"><a
href="#" role="link" class="Link-link-2XYrU Link-default-32xSO">RECENTLY ADDED TV</a></div>
<div class="HubCellTitle-hubCellTitle-2abIn">
<a href="#" role="link" class="Link-link-2XYrU Link-default-32xSO">RECENTLY ADDED TV</a>
<span class="PrePlayStatusButton-statusButton-28XJ7 Button-button--JvPI Button-small-3Zwli"><?php echo count($episodes); ?></span>
</div>
<div class="HubCell-hubActions-28w1- tv-shows-hubcell">
<button role="button" data-hubcell-action="previous"
class="HubCell-hubScrollButton-2Y7ri Link-link-2XYrU Link-default-32xSO isDisabled"
@ -35,18 +37,22 @@
style="width: 127px; height: 191px;">
<div class="MetadataPosterCardFace-face--dz_D MetadataPosterCardFace-poster-L2P6r MetadataPosterCardFace-faceFront-1bxHG ">
<div class="PosterCardImg-imageContainer-1Ar4M" data-movie-id="<?php echo $episode->id; ?>">
<div style="background-image: url(data:image/jpeg;base64,<?php //echo $episode->getCover(); ?>); background-size: cover; background-position: center center; background-repeat: no-repeat; width: 100%; height: 100%; position: absolute; z-index: 2;"
<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;"
class=""></div>
</div>
<div class=" MetadataPosterCardOverlay-overlay-1uMpL ">
<div class="MetadataPosterCardOverlay-background-2EwyB"></div>
<div class="MetadataPosterCardOverlay-unwatchedTagContainer-1lcEn">
<div class="MetadataPosterCardOverlay-unwatchedTag-Fqazx MetadataPosterCardOverlay-unwatchedBadge-Qn1fv MetadataPosterCardOverlay-badge-1FU-p"></div>
<div class="MetadataPosterCardOverlay-unwatchedBadge-Qn1fv MetadataPosterCardOverlay-badge-1FU-p"><?php echo $episode->count > 1 ? $episode->count : ''; ?></div>
</div>
<a href="/movie/<?php echo $episode->id; ?>"
<?php if($episode->count > 1) : ?>
<a href="/season/<?php echo $episode->getSeason()->id; ?>"
<?php else: ?>
<a href="/episode/<?php echo $episode->id; ?>"
<?php endif; ?>
role="link"
class="MetadataPosterCardOverlay-link-1Swhl Link-link-2XYrU Link-default-32xSO"></a>
<button data-id="<?php echo $episode->id; ?>"
class="MetadataPosterCardOverlay-link-1Swhl Link-link-2XYrU Link-default-32xSO">
<button data-id="<?php echo $episode->count <= 1 ? $episode->id : ''; ?>"
tabindex="-1"
role="button"
class="MetadataPosterCardOverlay-playButton-1fjhk PlayButton-playButton-3WX8X MetadataPosterCardOverlay-button-M43H- Link-link-2XYrU Link-default-32xSO"
@ -55,6 +61,7 @@
<i class="plex-icon-play-560 PlayButton-playIcon-dt3sk"
aria-hidden="true"></i></div>
</button>
</a>
<button id="id-3281" tabindex="-1"
aria-label="More Actions"
aria-haspopup="true"
@ -84,22 +91,31 @@
class=" MetadataPosterTitle-title-3tU5F Link-link-2XYrU Link-default-32xSO">
<?php echo $episode->getTvShow()->title; ?>
</a>
<?php if(1 == $episode->count) : ?>
<a title="<?php echo $episode->title; ?>"
href="/movie/<?php echo $episode->id; ?>"
href="/episode/<?php echo $episode->id; ?>"
role="link"
class="MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY Link-link-2XYrU Link-default-32xSO">
<?php echo $episode->title; ?>
</a>
<span class=" MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY "><a
title="<?php echo $episode->getSeason()->title; ?>"
<?php endif; ?>
<span class=" MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY ">
<a title="<?php echo $episode->getSeason()->title; ?>"
href="/season/<?php echo $episode->getSeason()->id; ?>"
role="link"
class=" Link-link-2XYrU Link-default-32xSO">S<?php echo $episode->getSeason()->number; ?></a><span
class="DashSeparator-separator-2a3yn">·</span><a
title="<?php echo $episode->title; ?>"
href="/movie/<?php echo $episode->id; ?>"
class=" Link-link-2XYrU Link-default-32xSO">
<?php echo 1 == $episode->count ? 'S' : 'Saison'; ?>
<?php echo $episode->getSeason()->number; ?>
</a>
<?php if(1 == $episode->count) : ?>
<span class="DashSeparator-separator-2a3yn">·</span>
<a title="<?php echo $episode->title; ?>"
href="/episode/<?php echo $episode->id; ?>"
role="link"
class=" Link-link-2XYrU Link-default-32xSO">E<?php echo $episode->number; ?></a></span>
class=" Link-link-2XYrU Link-default-32xSO">E<?php echo $episode->number; ?>
</a>
<?php endif; ?>
</span>
</div>
</div>
<?php endforeach; ?>
@ -118,9 +134,10 @@
<div class="HubCell-hubCell-3Ys17" data-qa-id="movies"
style="visibility: visible;">
<div class="HubCellHeader-hubCellHeader-2pvYN">
<div class="HubCellTitle-hubCellTitle-2abIn"><a
href="#"
role="link" class="Link-link-2XYrU Link-default-32xSO">RECENTLY ADDED MOVIES</a></div>
<div class="HubCellTitle-hubCellTitle-2abIn">
<a href="#" role="link" class="Link-link-2XYrU Link-default-32xSO">RECENTLY ADDED MOVIES</a>
<span class="PrePlayStatusButton-statusButton-28XJ7 Button-button--JvPI Button-small-3Zwli"><?php echo count($movies); ?></span>
</div>
<div class="HubCell-hubActions-28w1- movies-hubcell">
<button role="button" data-hubcell-action="previous"
class="HubCell-hubScrollButton-2Y7ri Link-link-2XYrU Link-default-32xSO isDisabled"
@ -215,10 +232,15 @@
</div>
</div>
<script type="text/javascript">
$(function () {
$(window).on('load', function() {
/** LAUNCH PLAYER **/
$(document).on('click', '.MetadataPosterCardOverlay-playButton-1fjhk.PlayButton-playButton-3WX8X', function (event) {
event.stopPropagation();
var movie_id = $(this).data('id');
if(movie_id === '')
return;
event.stopPropagation();
$.ajax({
url: '/rest/movie/stream',
method: 'GET',
@ -230,12 +252,12 @@ $(function () {
console.error(data);
});
});
/** LOADING PICTURE **/
$('.PosterCardImg-imageContainer-1Ar4M[data-movie-id]').each(function (index, element) {
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='+ 126 +'&height='+189+'")');
}, (index + 1) * 100);
var movie_id = $(element).data('movie-id');
$('[data-movie-id="' + movie_id + '"] > div').css('background-image', 'url("/cover/movie?movie_id='+ movie_id +'&width='+ 158 +'&height='+ 233 +'")');
});
/** SCROLL LIST TV SHOWS AND MOVIES **/
$('.HubCell-hubActions-28w1- button').on('click', function(){
var parent = $(this).closest('div[data-qa-id]');
var select = $(parent).data('qa-id');
@ -261,11 +283,13 @@ $(function () {
$(previous).removeClass('isDisabled');
}
console.log($('#' + select + '_list').scrollLeft());
if($('#' + select + '_list').scrollLeft() >= (150 * 19)) {
$(next).addClass('isDisabled');
}
if($('#' + select + '_list').scrollLeft() === 0) {
$(next).addClass('isDisabled');
}
}, 500);
}
});

@ -42,7 +42,7 @@
<li class="divider"></li>
<li class="signed-in-item switch-user-item"><a class="switch-user-btn" href="#">Switch User...</a></li>
<?php endif; ?>
<li class="signed-in-item full-user-item"><a class="sign-out-btn" href="#">Sign Out</a></li>
<li class="signed-in-item full-user-item"><a class="sign-out-btn" href="/logout">Sign Out</a></li>
</ul>
</li>
</ul>

@ -31,7 +31,7 @@
<div class="SidebarLink-icon-3AlP8">
<i class="plex-icon-movies-560"
aria-hidden="true"></i></div>
<div class="SidebarLink-title-7WfGt">List movies</div>
<div class="SidebarLink-title-7WfGt">All movies</div>
</div>
</a>
</div>

@ -0,0 +1,258 @@
<div class="PageHeader-pageHeader-18RSw">
<div class="PageHeaderLeft-pageHeaderLeft-2TxSo">
<button aria-haspopup="true" data-qa-id="typeDropdownButton" id="id-13" role="button"
class="PageHeaderBreadcrumbButton-button-1uaPj DisclosureArrowButton-disclosureArrowButton-3tbYZ DisclosureArrowButton-medium-3-Y37 Link-link-2XYrU Link-default-32xSO"
type="button">Tous
<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-haspopup="true" data-qa-id="typeDropdownButton" id="id-15" role="button"
class="PageHeaderBreadcrumbButton-button-1uaPj DisclosureArrowButton-disclosureArrowButton-3tbYZ DisclosureArrowButton-medium-3-Y37 Link-link-2XYrU Link-default-32xSO"
type="button">Films
<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-haspopup="true" data-qa-id="typeDropdownButton" id="id-14" role="button"
class="PageHeaderBreadcrumbButton-button-1uaPj DisclosureArrowButton-disclosureArrowButton-3tbYZ DisclosureArrowButton-medium-3-Y37 Link-link-2XYrU Link-default-32xSO"
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>
</div>
<div class="PageHeaderRight-pageHeaderRight-2CT0g">
<div class="pageHeaderToolbar-toolbarContainer-2N-IJ Measure-container-2XznZ">
<div class="pageHeaderToolbar-toolbar-1lW-M">
<button id="id-22" aria-label="Tout lire" data-qa-id="toolbarPlay" role="button"
class="ToolbarButton-toolbarButton-3xzHJ Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-toolbar-play-560"
aria-hidden="true"></i></button>
<button id="id-23" aria-label="Ordre aléatoire." data-qa-id="toolbarShuffle" role="button"
class="ToolbarButton-toolbarButton-3xzHJ Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-toolbar-shuffle-560"
aria-hidden="true"></i></button>
<button id="id-26" aria-label="Ajouter à la liste de lecture" data-qa-id="toolbarPlaylist"
role="button"
class="ToolbarButton-toolbarButton-3xzHJ Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-toolbar-add-to-playlist-560"
aria-hidden="true"></i></button>
<button id="id-21" aria-label="Plus..." aria-haspopup="true" data-qa-id="toolbarMore" role="button"
class="ToolbarButton-toolbarButton-3xzHJ Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-toolbar-more-560"
aria-hidden="true"></i></button>
</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>
</div>
<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 foreach ($movies as $movie) : ?>
<div class=" virtualized-cell-3KPHx " data-qa-id="cellItem"
style="display: inline-block; margin-left: 25px; margin-top: 15px;">
<div class="MetadataPosterCard-cardContainer-2gRcQ"
data-qa-id="metadataPosterCard--/library/metadata/1">
<div class="MetadataPosterCard-card-3bztR " style="width: 126px; height: 189px;">
<div class="MetadataPosterCardFace-face--dz_D MetadataPosterCardFace-poster-L2P6r MetadataPosterCardFace-faceFront-1bxHG ">
<div class="PosterCardImg-imageContainer-1Ar4M"
<?php if(get_class($movie) === Model_Movie::class) : ?>
data-movie-id="<?php echo $movie->id; ?>"
<?php elseif(get_class($movie) === Model_Tvshow::class) : ?>
data-tvshow-id="<?php echo $movie->id; ?>"
<?php endif; ?>
>
<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;"
class=""></div>
</div>
<div class=" MetadataPosterCardOverlay-overlay-1uMpL">
<div class="MetadataPosterCardOverlay-background-2EwyB"></div>
<div class="MetadataPosterCardOverlay-unwatchedTagContainer-1lcEn"
data-qa-id="metadataPosterUnwatchedBadge">
<div class="MetadataPosterCardOverlay-unwatchedTag-Fqazx MetadataPosterCardOverlay-unwatchedBadge-Qn1fv MetadataPosterCardOverlay-badge-1FU-p"></div>
</div>
<?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; ?>
role="link"
class="MetadataPosterCardOverlay-link-1Swhl Link-link-2XYrU Link-default-32xSO"></a>
<button tabindex="-1" data-id="<?php echo $movie->id; ?>"
role="button"
class="MetadataPosterCardOverlay-playButton-1fjhk PlayButton-playButton-3WX8X MetadataPosterCardOverlay-button-M43H- Link-link-2XYrU Link-default-32xSO"
type="button">
<div class="MetadataPosterCardOverlay-playCircle-M67q6 PlayButton-playCircle-3Evfd MetadataPosterCardOverlay-centerCircle-1Mg-s">
<i class="plex-icon-play-560 PlayButton-playIcon-dt3sk"
aria-hidden="true"></i></div>
</button>
<button data-qa-id="metadataPosterMoreButton" id="id-28" tabindex="-1"
aria-label="Plus d'actions" aria-haspopup="true" role="button"
class="MetadataPosterCardOverlay-moreButton-3FK-K MetadataPosterCardOverlay-button-M43H- Link-link-2XYrU Link-default-32xSO"
type="button"><i class="plex-icon-more-560" aria-hidden="true"></i>
</button>
<button aria-label="Sélectionner 13 Hours" id="id-27" tabindex="-1" role="button"
class="MetadataPosterCardOverlay-selectButton-3rwSV SelectButton-selectButton-3Kbjm MetadataPosterCardOverlay-button-M43H- Link-link-2XYrU Link-default-32xSO"
type="button">
<div class="MetadataPosterCardOverlay-selectCircle-3ql8S SelectButton-selectCircle-3tdvG"
data-qa-id="multipleSelectButton"><i
class="plex-icon-selected-560 SelectButton-selectedIcon-3-SAL"
aria-hidden="true"></i></div>
</button>
</div>
</div>
</div>
</div>
<div class="MetadataPosterCell-titleContainer-24DI6">
<?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; ?>
role="link" style="width: 130px;"
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 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 endif; ?>
</span>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="Menu-filter-movies"
style="position: absolute; top: 60px; left: 160px; display: none;" >
<div data-reactroot="" id="id-1865">
<div role="menu" class="MenuContainer-menu-3Gtlw MenuContainer-medium-2XOYJ">
<div class="Menu-menuScroller-E0NwY Scroller-vertical-1bgGS Scroller-scroller-d5-b- Scroller-vertical-1bgGS Scroller-auto-3t4gM"
style="max-height: 591px;"><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=titleSort%3Adesc&amp;save=1"
class=" SelectedMenuItem-isSelected-3zuEi MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Titre</div>
<div class="SelectedMenuItem-selectedIcon-3S2cy"><i class="plex-icon-sort-ascending-560"
aria-hidden="false"
aria-label="Croissant"></i></div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=year%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Année</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=originallyAvailableAt%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Date de sortie</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=rating%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Note Critique</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=userRating%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Évaluation</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=contentRating%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Évaluation du contenu</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=duration%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Durée</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=viewOffset%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">En cours</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=viewCount%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Lectures</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=addedAt%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Date d'ajout</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=lastViewedAt%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Date du visionnage</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=mediaHeight&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Résolution</div>
</div>
</a><a data-qa-id="dropdownItem" role="menuitem"
href="#!/server/df1de861fbaba243c18ed9275fd42e3248d19336?key=%2Flibrary%2Fsections%2F1&amp;typeKey=%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1&amp;limit=&amp;sort=mediaBitrate%3Adesc&amp;save=1"
class=" MenuItem-menuItem-25266 MenuItem-default-tX5Cl Link-link-2XYrU Link-default-32xSO">
<div class="SelectedMenuItem-menuItemContainer-7SpJZ">
<div class="SelectedMenuItem-menuLabel-1tKeW">Débit</div>
</div>
</a></div>
</div>
</div>
</div>
<script type="text/javascript">
$(window).on('load', function() {
$(document).on('click', '#id-14', function (event) {
event.stopPropagation();
$(this).find('.DisclosureArrow-disclosureArrow-1sBFv').toggleClass('DisclosureArrowButton-down-bd2wx DisclosureArrowButton-up-2fzdj');
$('.Menu-filter-movies').toggle();
});
$(document).on('click', 'body', function (event) {
event.stopPropagation();
if($('.Menu-filter-movies').css('display') !== 'none')
$('#id-14').click();
});
/** LAUNCH PLAYER */
$(document).on('click', '.MetadataPosterCardOverlay-playButton-1fjhk.PlayButton-playButton-3WX8X', function (event) {
event.stopPropagation();
var movie_id = $(this).data('id');
$.ajax({
url: '/rest/movie/stream',
method: 'GET',
data: { movie_id : movie_id },
dataType: 'html'
}).done(function(view) {
launchPlayer(view);
}).fail(function(data) {
console.error(data);
});
});
/** LOAD IMAGES **/
$('.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='+ 160 +'&height='+ 236 +'")');
});
$('.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='+ 160 +'&height='+ 236 +'")');
});
});
</script>

@ -66,7 +66,7 @@
</button>
</div>
<button type="submit" role="button"
class="_1SYIVj _1I3Olm _1A8EcL _2kT68l _2n0yJn _3S9UdJ _1A8EcL _2kT68l _2n0yJn _2kT68l _2n0yJn _3fwLzo _3S9UdJ _2n0yJn _2XA2bN ">
class="_1SYIVj _1I3Olm _1A8EcL _2kT68l _2n0yJn _3S9UdJ _1A8EcL _2kT68l _2n0yJn _2kT68l _2n0yJn _3fwLzo _3S9UdJ _2n0yJn _2XA2bN">
<span class="_1NdZWc"><div class="_1TgDPI Niere7 _2kLwt_ _3PStHE Niere7 _2kLwt_"
aria-label="Loading"></div></span><span class="qxG01S">Sign in</span>
</button>

@ -57,13 +57,7 @@
data-qa-id="metadataPosterCard--/library/metadata/1">
<div class="MetadataPosterCard-card-3bztR " style="width: 126px; height: 189px;">
<div class="MetadataPosterCardFace-face--dz_D MetadataPosterCardFace-poster-L2P6r MetadataPosterCardFace-faceFront-1bxHG ">
<div class="PosterCardImg-imageContainer-1Ar4M"
<?php if(get_class($movie) === Model_Movie::class) : ?>
data-movie-id="<?php echo $movie->id; ?>"
<?php elseif(get_class($movie) === Model_Tvshow::class) : ?>
data-tvshow-id="<?php echo $movie->id; ?>"
<?php endif; ?>
>
<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;"
class=""></div>
</div>
@ -73,12 +67,7 @@
data-qa-id="metadataPosterUnwatchedBadge">
<div class="MetadataPosterCardOverlay-unwatchedTag-Fqazx MetadataPosterCardOverlay-unwatchedBadge-Qn1fv MetadataPosterCardOverlay-badge-1FU-p"></div>
</div>
<?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; ?>
role="link"
<a href="/movie/<?php echo $movie->id; ?>" role="link"
class="MetadataPosterCardOverlay-link-1Swhl Link-link-2XYrU Link-default-32xSO"></a>
<button tabindex="-1" data-id="<?php echo $movie->id; ?>"
role="button"
@ -112,11 +101,7 @@
<?php echo $movie->title; ?>
</a>
<span class=" MetadataPosterTitle-singleLineTitle-24_DN MetadataPosterTitle-title-3tU5F MetadataPosterTitle-isSecondary-2VUxY ">
<?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 endif; ?>
<?php echo $movie->year; ?>
</span>
</div>
</div>
@ -317,7 +302,7 @@
</div>
</div>
<script type="text/javascript">
$(function () {
$(window).on('load', function() {
$(document).on('click', '#id-14', function (event) {
event.stopPropagation();
$(this).find('.DisclosureArrow-disclosureArrow-1sBFv').toggleClass('DisclosureArrowButton-down-bd2wx DisclosureArrowButton-up-2fzdj');
@ -328,6 +313,7 @@
if($('.Menu-filter-movies').css('display') !== 'none')
$('#id-14').click();
});
/** LAUNCH PLAYER */
$(document).on('click', '.MetadataPosterCardOverlay-playButton-1fjhk.PlayButton-playButton-3WX8X', function (event) {
event.stopPropagation();
var movie_id = $(this).data('id');
@ -342,17 +328,10 @@
console.error(data);
});
});
/** LOAD IMAGES **/
$('.PosterCardImg-imageContainer-1Ar4M[data-movie-id]').each(function (index, element) {
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='+ 126 +'&height='+189+'")');
}, (index + 1) * Math.random() * (100 - 50) + 50);
});
$('.PosterCardImg-imageContainer-1Ar4M[data-tvshow-id]').each(function (index, element) {
setTimeout(function () {
var tvshow_id = $(element).data('tvshow-id');
$('[data-tvshow-id="' + tvshow_id + '"] > div').css('background-image', 'url("/cover/tvshow?tvshow_id='+ tvshow_id +'&width='+ 126 +'&height='+189+'")');
}, (index + 1) * Math.random() * (100 - 50) + 50);
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 +'")');
});
});
</script>

@ -7,7 +7,7 @@
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width,initial-scale=1">
<?php
echo \Asset::css(['normalize_login.css', 'plex_login.css']);
echo \Asset::css(['normalize_login.css', 'normalize.css', 'plex_login.css']);
?>
<style type="text/css">
.progress {
@ -57,8 +57,8 @@
<?php echo $start_js; ?>
</head>
<body>
<div id="plex" class="application">
<div data-reactroot="" class="hcfliu">
<div id="plex">
<div>
<div class="_1uBGxd">
<div class="_1uBGxd"
style="background-image: url('//assets.plex.tv/deploys/service-auth/env-648be0c1b2073a057d6c7eec3633dee2/3.34.0-9beaaa2/common/img/backgrounds/preset-dark.64cc1c942221cd2c153244bd8ecfb67a.png'); background-size: 100% 100%;"></div>
@ -74,29 +74,29 @@
</div>
<div class="_2zl_7T">
<form method="post" action="" class="_19Nqmf">
<div class="_192KBC _15o1H4"><label class="_3XRky5 _1sr1fk " for="email">
<div class="_192KBC Gtcqpe"><label class="_3XRky5 _2aLJ9b" for="email">
Email address</label><input
autocomplete="email" id="email" name="email" value=""
class="_3fC-K0 _34u_B5 _2ol6Bk _3XjFhj _1cY_kb " type="text"></div>
<div class="_192KBC _15o1H4"><label class="_3XRky5 _1sr1fk " for="username">
class="_3fC-K0 _1VMuma _1P2Vi4 _2sz70T _3wNGTy" type="text"></div>
<div class="_192KBC Gtcqpe"><label class="_3XRky5 _1sr1fk " for="username">
Username </label><input
autocomplete="username" id="username" name="username" value=""
class="_3fC-K0 _34u_B5 _2ol6Bk _3XjFhj _1cY_kb " type="text"></div>
<div class="_1jIT2S _192KBC _15o1H4" style="display: block"><label class="_2EAOvR _3XRky5 _1sr1fk " for="password">
class="_3fC-K0 _1VMuma _1P2Vi4 _2sz70T _3wNGTy" type="text"></div>
<div class="_1jIT2S Gtcqpe" style="display: block"><label class="_2EAOvR _3XRky5 _2aLJ9b " for="password">
Create password</label><input
autocomplete="new-password" id="password" name="password" value=""
placeholder="8 characters minimum"
class="_2rbSul _3fC-K0 _34u_B5 _2ol6Bk _3XjFhj _1cY_kb " type="password"></div>
<div class="_1jIT2S _192KBC _15o1H4"><label class="_2EAOvR _3XRky5 _1sr1fk "
class="_2rbSul _3fC-K0 _1VMuma _1P2Vi4 _2sz70T _3wNGTy" type="password"></div>
<div class="_1jIT2S Gtcqpe"><label class="_2EAOvR _3XRky5 _2aLJ9b"
for="confirm_password">
Confirm password</label><input
autocomplete="new-password" id="confirm_password" name="confirm_password"
value=""
placeholder="8 characters minimum"
class="_2rbSul _3fC-K0 _34u_B5 _2ol6Bk _3XjFhj _1cY_kb " type="password"></div>
class="_2rbSul _3fC-K0 _1VMuma _1P2Vi4 _2sz70T _3wNGTy" type="password"></div>
<button type="submit" role="button"
class="_1SYIVj _1I3Olm _3WowHb -JvPIU _2XYrUh _15Al1k _3WowHb -JvPIU _2XYrUh -JvPIU _2XYrUh _2LQVwf _15Al1k _2XYrUh _32xSOV ">
<span class="_2OI9vT"><div class="_2SDDZK _290-oo _2Ou6VM _2WAWjh _290-oo _2Ou6VM"
class="_1SYIVj _1I3Olm _1A8EcL _2kT68l _2n0yJn _3S9UdJ _1A8EcL _2kT68l _2n0yJn _2kT68l _2n0yJn _3fwLzo _3S9UdJ _2n0yJn _2XA2bN">
<span class="_1NdZWc"><div class="_1TgDPI Niere7 _2kLwt_ _3PStHE Niere7 _2kLwt_"
aria-label="Loading"></div></span><span class="_1Rv20d">Create an account</span>
</button>
</form>

@ -6,127 +6,30 @@
<ul class="settings-nav nav nav-cards">
<li><a class="card btn-gray selected" href="#general-web-group">General</a></li>
<li><a class="card btn-gray" href="#quality-web-group">Sub Account</a></li>
<li class="advanced-setting"><a class="card btn-gray" href="#debug-web-group">Débogage</a></li>
<li><a class="card btn-gray" href="#player-web-group">Lecteur</a></li>
<li><a class="card btn-gray" href="#player-web-group">Player</a></li>
</ul>
</div>
<div class="col-sm-8 col-md-9">
<form id="web-settings-form">
<div id="general-web-group" class="settings-group active"><h4 class="version-title"> Version
3.41.1 </h4>
<div id="general-web-group" class="settings-group active">
<h4 class="version-title"> Version 0.1A </h4>
<div class="form-group">
<label for="language">Langue</label>
<label for="language">Language</label>
<select id="language">
<option value="en"> English</option>
<option value="fr" selected=""> Français</option>
<option value="en" selected=""> English</option>
<option value="fr"> Français</option>
</select>
<p class="help-block">Aidez-nous à traduire cette application dans votre langue <a
href="https://transifex.com/plex-1/plex-web" target="_blank">ici</a>.</p>
<p class="help-block">
Aidez-nous à traduire cette application dans votre langue <a href="https://transifex.com/plex-1/plex-web" target="_blank">ici</a>.
</p>
</div>
<div class="form-group"><label class="control-label"> <input id="playThemeMusic"
type="checkbox"> Jouer les
thèmes musicaux </label>
<p class="help-block">Joue automatiquement les fonds musicaux quand disponibles (par ex.
le générique d'une série quand vous explorez celle-ci).</p></div>
<div class="form-group advanced-setting"><label class="control-label"> <input id="companion"
checked=""
type="checkbox">
Publier en tant que Lecteur </label>
<p class="help-block">Permettre aux autres applications Plex de lancer le contenu sur ce
périphérique et de le contrôler à distance.</p></div>
<div class="form-group advanced-setting"><label for="allowHttpFallback">Autoriser le retour
aux connexions non sécurisées</label> <select id="allowHttpFallback">
<option value="never" selected="">Jamais</option>
<option value="samenetwork">Sur le même réseau que le serveur</option>
<option value="always">Toujours</option>
</select>
<p class="help-block">Autoriser ce navigateur à effectuer des connexions non sécurisées
à Plex Media Server si les connexions sécurisées échouent.</p></div>
<div class="form-group"><label for="timeFormat">Format de l'heure</label> <select
id="timeFormat">
<option value="h:mma" selected="">12 heures</option>
<option value="HH:mm">24 heures</option>
</select></div>
</div>
<div id="quality-web-group" class="settings-group">
<div class="form-group"><label class="control-label"> <input id="autoAdjustQuality"
type="checkbox"> Ajustement
automatique de la qualité (Bêta) </label>
<p class="help-block">Plex will increase or decrease quality based on connection speed.
Requires latest Plex Media Server.</p></div>
<h4 class="settings-header">Diffusion via Internet</h4>
<div class="form-group"><label for="remoteQuality">Qualité vidéo</label> <select
id="remoteQuality" data-type="int">
<option value="-1">Maximale</option>
<option value="12"> 20 Mbps, 1080p</option>
<option value="11"> 12 Mbps, 1080p</option>
<option value="10"> 10 Mbps, 1080p</option>
<option value="9"> 8 Mbps, 1080p</option>
<option value="8"> 4 Mbps, 720p</option>
<option value="7"> 3 Mbps, 720p</option>
<option value="6" selected=""> 2 Mbps, 720p</option>
<option value="5"> 1.5 Mbps, 480p</option>
<option value="4"> 0.7 Mbps</option>
<option value="3"> 0.3 Mbps</option>
<option value="2"> 0.2 Mbps</option>
</select>
<p class="help-block">Définir la qualité par défaut à utiliser pour le streaming vidéo à
travers Internet. Si ce réglage est trop haut, les vidéos pourraient se lancer
lentement et se figer fréquemment.</p></div>
<div class="form-group"><label class="control-label"> <input
id="remoteSmallVideoAtOriginalQuality" checked="" type="checkbox"> Lire les
vidéos plus petites en qualité originale </label>
<p class="help-block"> Lorqu'un fichier vidéo est plus petit que la qualité ci-dessus,
essayer de lire la vidéo originale sans conversion. Cela lui préserve toute sa
qualité, mais la lecture peut s'interrompre fréquemment. "L'ajustement automatique
de la qualité" sera désactivé pour ces vidéos. </p></div>
<h4 class="settings-header">Diffusion via réseau local</h4>
<div class="form-group"><label class="control-label"> <input
id="useHomeStreamingRecommendedSettings" checked="" type="checkbox">
Utiliser les paramètres recommandés </label>
<p class="help-block recommended-home-streaming-settings">Toutes les vidéos compatibles
seront jouées en qualité originale. Les vidéos incompatibles seront converties en
qualité maximale.</p></div>
<div class="form-group custom-home-streaming-settings hidden"><label for="localQuality">Qualité
vidéo</label> <select id="localQuality" data-type="int">
<option value="-1">Maximale</option>
<option value="12"> 20 Mbps, 1080p</option>
<option value="11"> 12 Mbps, 1080p</option>
<option value="10"> 10 Mbps, 1080p</option>
<option value="9"> 8 Mbps, 1080p</option>
<option value="8"> 4 Mbps, 720p</option>
<option value="7"> 3 Mbps, 720p</option>
<option value="6"> 2 Mbps, 720p</option>
<option value="5"> 1.5 Mbps, 480p</option>
<option value="4"> 0.7 Mbps</option>
<option value="3"> 0.3 Mbps</option>
<option value="2"> 0.2 Mbps</option>
</select>
<p class="help-block">Choisir la qualité vidéo par défaut à utiliser pour le streaming
Wi-Fi sur le réseau local. Si ce réglage est trop haut, les vidéos pourraient se
lancer lentement et se mettre ne pause fréquemment.</p></div>
</div>
<div id="debug-web-group" class="settings-group">
<div class="form-group"><label for="debugLevel">Niveau de débogage</label> <select
id="debugLevel" data-type="int">
<option value="0" selected="">Désactivé</option>
<option value="1">Activé</option>
<option value="2">Détaillé</option>
</select>
<p class="help-block">Vous pouvez voir le journal de débogage <a href="#!/logs">ici</a>.
</p></div>
<div class="form-group"><label class="control-label"> <input id="directPlay" checked=""
type="checkbox"> Lecture
directe </label>
<p class="help-block"> Autorise le lecteur à lire les médias compatibles sans aucune
conversion. La plupart des navigateurs supportent les vidéos MP4 avec codec H264 et
audio AAC. Les vidéos avec sous-titres ne peuvent pas être lues directement. </p>
<div class="form-group">
<label class="control-label" for="input_FriendlyName_c">
Second refresh
</label>
<input id="input_FriendlyName_c" class="form-control" name="refresh" value="" placeholder="ex: 800" type="text">
<p class="help-block">Number in second, you want to check new content on server.</p>
</div>
<div class="form-group"><label class="control-label"> <input id="directStream" checked=""
type="checkbox"> Diffusion
directe </label>
<p class="help-block">Permet au serveur de copier les flux audio et vidéo compatibles
sans les convertir.</p></div>
</div>
<div id="player-web-group" class="settings-group"><h4 class="settings-header-first ">Audio &amp;
sous-titres</h4>

@ -1,8 +1,26 @@
<div class="settings-container">
<div class="filter-bar">
<button class="toggle-advanced-btn btn btn-sm Button-primary-2LQVw pull-left add-libraries"
data-placement="top" data-toggle="tooltip" data-original-title="Add library"><i class="glyphicon circle-plus"></i></button>
<button class="toggle-advanced-btn btn btn-sm btn-default pull-right refresh">Refresh Libraries &nbsp;<i class="glyphicon refresh"></i></button>
<div class="filter-bar-right">
<button class="toggle-advanced-btn btn btn-sm btn-default refresh">Refresh Libraries &nbsp;<i class="glyphicon refresh"></i></button>
</div>
<span id="primary-server-dropdown" class="dropdown">
<a class="dropdown-toggle" href="#primary-server-dropdown" data-toggle="dropdown">
<span class="dropdown-friendly-name">HF-Server</span> <i class="caret-icon"></i>
</a>
<ul class="dropdown-menu">
<li>
<a data-id="df1de861fbaba243c18ed9275fd42e3248d19336" href="#">
<span class="dropdown-truncated-label">Chewbaka</span>
</a>
</li>
<li>
<a data-id="11f086036e179128e7b077495e238d1c922d605c" href="#">
<span class="dropdown-truncated-label">HF-Server</span>
<i class="dropdown-selected-icon glyphicon ok-2"></i>
</a>
</li>
</ul>
</span>
</div>
<div class="devices-container row">
<div class="device-list-container col-sm-12 col-md-12">
@ -10,26 +28,40 @@
<?php if($libraries) : ?>
<?php foreach ($libraries as $library) : ?>
<li class="card-tile-list-item card-3-col-item">
<div class="card card-device">
<div class="card card-device <?php echo $library->disable ? 'disabled' : ''; ?>">
<div class="card-actions">
<button class="edit-device-btn card-action-btn btn-info"
data-placement="top" data-toggle="tooltip" data-original-title="Refresh">
<a href="/settings/libraries/premissions/<?php echo $library->id; ?>">
<button class="permissions-library-btn card-action-btn" data-library-id="<?php echo $library->id; ?>"
data-toggle="tooltip" data-original-title="Permissions">
<i class="glyphicon unlock"></i>
</button>
</a>
<button class="refresh-library-btn card-action-btn btn-info" data-library-id="<?php echo $library->id; ?>"
data-toggle="tooltip" data-original-title="Refresh">
<i class="glyphicon refresh"></i>
</button>
<button class="edit-device-btn card-action-btn"
data-placement="top" data-toggle="tooltip" data-original-title="Edit">
<i class="glyphicon pencil"></i>
<?php if($library->disable) : ?>
<button class="enable-library-btn card-action-btn btn-success" data-library-id="<?php echo $library->id; ?>"
data-toggle="tooltip" data-original-title="Enable">
<i class="glyphicon ok-2"></i>
</button>
<button class="edit-device-btn card-action-btn btn-danger"
data-placement="top" data-toggle="tooltip" data-original-title="Disable">
<?php else: ?>
<button class="disable-library-btn card-action-btn btn-danger" data-library-id="<?php echo $library->id; ?>"
data-toggle="tooltip" data-original-title="Disable">
<i class="glyphicon ban"></i>
</button>
<button class="remove-libraries-btn card-action-btn btn-danger"
data-placement="top" data-toggle="tooltip" data-original-title="Delete">
<?php endif; ?>
<?php if($user->admin) : ?>
<button class="remove-library-btn card-action-btn btn-danger" data-library-id="<?php echo $library->id; ?>"
data-toggle="tooltip" data-original-title="Delete">
<i class="glyphicon remove-2"></i>
</button>
<?php endif; ?>
</div>
<h4 class="name"><?php echo $library->name; ?> <span class="glyphicon ok-2 text-success"></span></h4>
<h4 class="name">
<?php echo $library->name; ?>
<span class="glyphicon <?php echo $library->disable ? 'ban text-danger' : 'ok-2 text-success'; ?>" data-toggle="tooltip" data-original-title="<?php echo $library->disable ? 'Disabled' : 'Enabled'; ?>"></span>
</h4>
<div class="card-details">
<div class="pull-right">
<div class="last-seen text-muted"><i class="plex-icon-watch-later-560"></i> <?php echo $library->getLastUpdate(); ?></div>
@ -55,4 +87,88 @@
</ul>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(function() {
$('.filter-bar .add').on('click', function () {
$.ajax({
method: 'get',
url: '/rest/settings/add_server.json'
}).done(function (data) {
$('body').append(data);
setTimeout(function(){
$('.media-server-modal').removeClass('out').addClass('in');
},100);
});
});
$(document).on('click', '.media-server-modal button.close', function () {
$('.media-server-modal').removeClass('in').addClass('out').delay(500).queue(function(){ $(this).remove()});
});
$(document).on('click', '#add-plex button', function () {
var url = $('#add-plex #url').val();
var port = $('#add-plex #port').val();
var token = $('#add-plex #token').val();
$.ajax({
method: 'post',
url: '/rest/settings/server.json',
data: {url: url, port: port, token: token}
}).done(function (data) {
show_alert('success', 'Server save succesfully!');
$('.media-server-modal button.close').click();
}).fail(function (data) {
data = JSON.parse(data.responseText);
show_alert('error', data.message);
setTimeout(function(){location.reload()}, 200);
});
});
// LIBRARY BUTTON ACTION
$('button.refresh-library-btn').on('click', function () {
var library_id = $(this).data('library-id');
ajax += 1;
checkAjax();
$.ajax({
method: 'get',
url: '/rest/browse/library.json',
data: {library_id: library_id}
}).done(function (library) {
var server = {};
server.id = library.server_id;
server.name = library.server_name;
updateLibrary(server, library);
ajax -= 1;
alert.toggleClass('transition-out');
alert_status.html('Start browsing your library');
});
});
$('button.disable-library-btn').on('click', function () {
var button = this;
var library_id = $(this).data('library-id');
$.ajax({
method: 'delete',
url: '/rest/settings/library.json',
data: {library_id: library_id}
}).done(function (data) {
show_alert('success', 'Library disable succesfully!');
$(button).closest('.card.card-device').addClass('disabled');
}).fail(function (data) {
data = JSON.parse(data.responseText);
show_alert('error', data.message);
});
});
// REFRESH ALL LIBRARIES
$('.filter-bar .refresh').on('click', function () {
ajax += 1;
checkAjax();
$.ajax({
method: 'get',
url: '/rest/browse/my_servers.json'
}).done(function (data) {
updateServers(data);
ajax -= 1;
alert.toggleClass('transition-out');
alert_status.html('Browse all your server is GOOD!');
});
});
});
</script>

@ -64,7 +64,7 @@
$('.filter-bar .add').on('click', function () {
$.ajax({
method: 'get',
url: '/rest/settings/add_server.json'
url: '/rest/settings/modal_server.json'
}).done(function (data) {
$('body').append(data);
setTimeout(function(){
@ -75,14 +75,16 @@
$(document).on('click', '.media-server-modal button.close', function () {
$('.media-server-modal').removeClass('in').addClass('out').delay(500).queue(function(){ $(this).remove()});
});
// ADD OR EDIT SERVER
$(document).on('click', '#add-plex button', function () {
var server_id = $('#add-plex #server_id').val();
var url = $('#add-plex #url').val();
var port = $('#add-plex #port').val();
var token = $('#add-plex #token').val();
$.ajax({
method: 'post',
url: '/rest/settings/server.json',
data: {url: url, port: port, token: token}
data: {server_id: server_id, url: url, port: port, token: token}
}).done(function (data) {
show_alert('success', 'Server save succesfully!');
$('.media-server-modal button.close').click();
@ -92,6 +94,7 @@
setTimeout(function(){location.reload()}, 200);
});
});
// SERVER BUTTON ACTION
$('button.refresh-server-btn').on('click', function () {
var server_id = $(this).data('server-id');
ajax += 1;
@ -111,7 +114,7 @@
var server_id = $(this).data('server-id');
$.ajax({
method: 'get',
url: '/rest/settings/add_server.json'
url: '/rest/settings/modal_server.json'
}).done(function (modal) {
$.ajax({
method: 'get',
@ -129,7 +132,7 @@
});
});
});
$(document).on('click', 'button.disable-server-btn', function () {
$('button.disable-server-btn').on('click', function () {
var button = this;
var server_id = $(this).data('server-id');
$.ajax({
@ -144,18 +147,14 @@
show_alert('error', data.message);
});
});
});
// UPDATE ALL DATA SERVER AND BROWSING IT
var ajax = 0;
var alert = $('.alert.alert-status');
var alert_status = $('.alert.alert-status .status');
$(function() {
// REFRESH ALL SERVER
$('.filter-bar .refresh').on('click', function () {
ajax += 1;
checkAjax();
$.ajax({
method: 'get',
url: '/rest/browse/servers.json'
url: '/rest/browse/my_servers.json'
}).done(function (data) {
updateServers(data);
ajax -= 1;
@ -164,109 +163,4 @@
});
});
});
function updateServers(servers) {
$(servers).each(function (index,server) {
ajax += 1;
setTimeout(function () {
alert_status.html('Browsing server ' + server.name);
$.ajax({
method: 'put',
url: '/rest/browse/server.json',
data: {server_id: server.id}
}).done(function (data) {
updateLibraries(server);
ajax -= 1;
});
}, (index + 1) * 1000);
});
}
function updateLibraries(server) {
ajax += 1;
alert_status.html('Getting all libraries on server ' + server.name);
$.ajax({
method: 'get',
url: '/rest/browse/libraries.json',
data: {server_id: server.id}
}).done(function (data) {
updateContentLibraries(server, data.libraries);
ajax -= 1;
});
}
function updateContentLibraries(server, libaries) {
$(libaries).each(function (index,library) {
ajax += 1;
setTimeout(function () {
alert_status.html('Browsing library ' + library.name + ' on server ' + server.name);
$.ajax({
method: 'get',
url: '/rest/browse/subcontent.json',
data: {server_id: server.id, library_id: library.id}
}).done(function (data) {
if(data.movies !== undefined) {
updateMovies(server, data.movies, library, null);
}
if(data.tvshows !== undefined) {
updateTvShows(server, data.tvshows);
}
ajax -= 1;
});
}, (index + 1) * 1000);
});
}
function updateTvShows(server, tvshows) {
$(tvshows).each(function (index,tvshow) {
ajax += 1;
setTimeout(function () {
alert_status.html('Browsing TV Show ' + tvshow.name + ' on server ' + server.name);
$.ajax({
method: 'get',
url: '/rest/browse/seasons.json',
data: {server_id: server.id, tvshow_id: tvshow.id}
}).done(function (data) {
updateSeasons(server, tvshow, data.seasons);
ajax -= 1;
});
}, (index + 1) * 1000);
});
}
function updateSeasons(server, tvshow, seasons) {
$(seasons).each(function (index,season) {
ajax += 1;
setTimeout(function () {
alert_status.html('Browsing ' + season.name + ' ' + tvshow.name + ' on server ' + server.name);
$.ajax({
method: 'get',
url: '/rest/browse/movies.json',
data: {server_id: server.id, season_id: season.id}
}).done(function (data) {
updateMovies(server, data.movies, null, season);
ajax -= 1;
});
}, (index + 1) * 1000);
});
}
function updateMovies(server, movies, library, season) {
/*$(movies).each(function (index,movie) {
setTimeout(function () {
alert_status.html('Browsing movie ' + movie.name + ' on server ' + server.name);
$.ajax({
method: 'get',
url: '/rest/browse/movies.json',
data: {server_id: server.id, season_id: season.id}
}).done(function (data) {
updateMovies(server, data.movies, null, season);
ajax -= 1;
});
}, (index + 1) * 1000);
});*/
}
function checkAjax() {
var interval = setInterval(function () {
if(ajax === 0) {
clearInterval(interval);
alert_status.html('Browsing servers is finished!');
alert.delay(1000).toggleClass('transition-out');
}
}, 1000);
}
</script>
Loading…
Cancel
Save