2023-02-16 22:19:19 +08:00

349 lines
11 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% import 'macro/svg.html' as SVG %}
{% import 'macro/oops.html' as OOPS %}
<div class="container-xl">
<!-- Page title -->
<div class="page-header d-print-none">
<div class="row align-items-center">
<div class="col">
<h2 class="page-title">
我的媒体库
</h2>
</div>
<div class="col-auto ms-auto d-print-none">
<div class="btn-list">
<a href="javascript:show_mediasync_modal()" class="btn btn-primary d-none d-sm-inline-block">
{{ SVG.refresh() }}
媒体库同步
</a>
<a href="javascript:show_mediasync_modal()" class="btn btn-primary d-sm-none btn-icon">
{{ SVG.refresh() }}
</a>
</div>
</div>
</div>
</div>
</div>
{% if ServerSucess %}
<div class="page-body">
<div class="container-xl">
<div class="row row-deck row-cards">
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">电影</div>
</div>
<div class="d-flex align-items-baseline">
<div class="h1 mb-0 me-2">{{ MediaCount.MovieCount }}</div>
</div>
</div>
<div id="chart-movie-bg" class="chart-sm"></div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">电视剧/动漫</div>
</div>
<div class="d-flex align-items-baseline">
<div class="h1 mb-3 me-2">{{ MediaCount.SeriesCount }}</div>
<div class="me-auto">
<span class="text-green d-inline-flex align-items-center lh-1">
{{ MediaCount.EpisodeCount }}
</span>
</div>
</div>
</div>
<div id="chart-tv-bg" class="chart-sm"></div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-stamp">
<div class="card-stamp-icon" style="background-color: transparent">
<img src="../static/img/music.png">
</div>
</div>
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">音乐</div>
</div>
<div class="d-flex align-items-baseline">
<div class="h1 mb-3 me-2">{{ MediaCount.SongCount }}</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="card">
<div class="card-stamp">
<div class="card-stamp-icon" style="background-color: transparent">
<img src="../static/img/users.png">
</div>
</div>
<div class="card-body">
<div class="d-flex align-items-center">
<div class="subheader">活跃用户</div>
</div>
<div class="d-flex align-items-baseline">
<div class="h1 mb-3 me-2">{{ UserCount }}</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12">
<div class="row row-cards">
<div class="col-12">
<div class="card">
<div class="card-body">
<p class="mb-3">存储空间共 <strong>{{ TotalSpace }}</strong></p>
<div class="progress progress-separated mb-3">
<div class="progress-bar bg-primary" role="progressbar" style="width: {{ UsedPercent }}%"></div>
</div>
<div class="row">
<div class="col-auto d-flex align-items-center pe-2">
<span class="legend me-2 bg-primary"></span>
<span>已使用</span>
<span class="d-none d-md-inline d-lg-none d-xxl-inline ms-2 text-muted">{{ UsedSapce }}</span>
</div>
<div class="col-auto d-flex align-items-center ps-2">
<span class="legend me-2"></span>
<span>空闲</span>
<span class="d-none d-md-inline d-lg-none d-xxl-inline ms-2 text-muted">{{ FreeSpace }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-12">
<div class="card" style="height: 27rem">
<div class="card-body card-body-scrollable card-body-scrollable-shadow">
<div class="divide-y">
{% for Activity in Activitys %}
<div>
<div class="row">
<div class="col-auto">
<span class="avatar">
{% if Activity.type == "LG" %}
{{ SVG.user() }}
{% else %}
{{ SVG.player_play() }}
{% endif %}
</span>
</div>
<div class="col">
<div class="text-truncate">
{{ Activity.event }}
</div>
<div class="text-muted">{{ Activity.date }}</div>
</div>
<div class="col-auto align-self-center">
<div class="bg-primary"></div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% else %}
{{ OOPS.systemerror('媒体服务器连接失败!', '当前无法连接媒体服务器获取数据请确认Emby/Jellyfin/Plex配置是否正确。') }}
{% endif %}
<div class="modal modal-blur fade" id="index-mediasync-modal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-md modal-dialog-centered" role="document">
<div class="modal-content">
<div class="card border-0">
<div class="card-body text-center">
<div class="mb-3">
<span class="avatar avatar-xl avatar-rounded"
style="background-image: url(../static/img/{{ MediaServerType }}.png)"></span>
</div>
<div class="card-title mb-1">{{ MediaServerType|title }}</div>
<div class="text-muted" id="mediasync_status"></div>
</div>
<div class="card-progress">
<div class="progress-bar bg-green" id="mediasync_process_bar" style="width: 0%" role="progressbar"
aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<a href="javascript:start_media_sync(true)" id="mediasync_btn" class="card-btn">开始同步</a>
</div>
</div>
</div>
</div>
<script type="text/javascript">
if ('{{ ServerSucess }}' != 'False') {
// 电影变化图
if (typeof (chart_movie) != 'undefined')
chart_movie.dispose();
chart_movie = echarts.init($('#chart-movie-bg')[0], null, {
height: 40.0
});
option_chart_movie = {
animation: true,
color: [
tabler.getColor('primary')
],
legend: {
show: false,
},
grid: {
left: 0,
top: 0,
right: 0,
bottom: 2,
containLabel: false
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
show: false,
data: {{ MovieChartLabels| safe }}
},
yAxis: {show: false,},
series: [{
name: '电影',
type: 'line',
large: true,
smooth: true,
symbol: 'none',
data: {{ MovieNums }}
}]
};
chart_movie.setOption(option_chart_movie);
// 电视剧变化图
if (typeof (chart_tv) != 'undefined')
chart_tv.dispose();
chart_tv = echarts.init($('#chart-tv-bg')[0], null, {
height: 40.0
});
option_chart_tv = {
animation: true,
color: [
tabler.getColor('primary'),
tabler.getColor('gray-600')
],
legend: {
show: false,
},
grid: {
left: 0,
top: 0,
right: 0,
bottom: 2,
containLabel: false
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
show: false,
data: {{ TvChartLabels| safe }}
},
yAxis: {show: false,},
series: [{
name: '电视剧',
type: 'line',
large: true,
smooth: true,
symbol: 'none',
data: {{ TvNums }}
}, {
name: '动漫',
type: 'line',
large: true,
smooth: true,
symbol: 'none',
lineStyle: {
width: 1.5,
type: 'dashed'
},
data: {{ AnimeNums }}
}]
};
chart_tv.setOption(option_chart_tv);
// 响应大小调整
window.onresize = function () {
chart_tv.resize();
chart_movie.resize();
};
}
</script>
<script type="text/javascript">
//显示媒体库同步框
function show_mediasync_modal() {
//获取同步状态
ajax_post("refresh_process", {type: "mediasync"}, function (ret) {
if (ret.code === 0 && ret.value < 100) {
//同步中
$("#index-mediasync-modal").modal('show');
start_media_sync(false);
} else {
//没有在同步,获取目前同步的数据情况
ajax_post("mediasync_state", {}, function (ret) {
if (ret.code === 0) {
$("#mediasync_status").text(ret.text);
}
$("#mediasync_btn").text("开始同步")
.attr("href", "javascript:start_media_sync(true)");
$("#index-mediasync-modal").modal('show');
}, true, false);
}
}, true, false);
}
//关闭媒体库同步框
function close_mediasync_modal() {
$("#index-mediasync-modal").modal('hide');
refresh_sync_process_flag = false;
}
//开始媒体库同步
function start_media_sync(flag) {
$("#mediasync_btn").text("关闭")
.attr("href", "javascript:close_mediasync_modal()");
if (flag) {
ajax_post("start_mediasync", {}, function (ret) {
refresh_sync_process_flag = true;
refresh_sync_process();
}, true, false);
} else {
refresh_sync_process_flag = true;
refresh_sync_process();
}
}
//刷新进度及文件
var refresh_sync_process_flag = false;
function refresh_sync_process() {
if (!refresh_sync_process_flag) {
return;
}
ajax_post("refresh_process", {type: "mediasync"}, function (ret) {
if (ret.code === 0) {
$("#mediasync_process_bar").attr("style", "width: " + ret.value + "%")
.attr("aria-valuenow", ret.value);
$("#mediasync_status").text(ret.text);
}
if (ret.value < 100) {
setTimeout("refresh_sync_process()", 200);
}
}, true, false);
}
</script>