138 lines
4.6 KiB
HTML
138 lines
4.6 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% macro torrent_entry(torrent) %}
|
|
{% set state_label,badge_type = status_map[torrent.state] or (torrent.state,'light') %}
|
|
|
|
<li class="list-group-item">
|
|
<a href="{{url_for('qbittorrent.details',infohash=torrent.hash)}}">{{torrent.name|truncate(75)}}</a>
|
|
(DL: {{torrent.dlspeed|filesizeformat(binary=true)}}/s, UL: {{torrent.upspeed|filesizeformat(binary=true)}}/s)
|
|
<span class="badge badge-{{badge_type}}">{{state_label}}</span>
|
|
{% if torrent.category %}
|
|
<span class="badge badge-light">{{torrent.category}}</span>
|
|
{% endif %}
|
|
<div style="margin-top: 5px"></div>
|
|
<div class="progress" style="width: 100%;">
|
|
<div class="progress-bar progress-bar-striped progress-bar-animated"
|
|
style="width: {{(torrent.progress*100)|round(2)}}%;" role="progressbar"
|
|
aria-valuenow="{{(torrent.progress*100)|round(2)}}" aria-valuemin="0" aria-valuemax="100">
|
|
</div>
|
|
<div class="progress-bar progress-bar-striped progress-bar-animated bg-primary"
|
|
style="width: {{((([torrent.availability,1]|min)-torrent.progress)*100)|round(2)}}%;" role="progressbar"
|
|
aria-valuenow="{{((([torrent.availability,1]|min)-torrent.progress)*100)|round(2)}}" aria-valuemin="0" aria-valuemax="100">
|
|
</div>
|
|
<small class="justify-content-center d-flex position-absolute w-100">{{(torrent.progress*100)|round(2)}} % (ETA: {{[torrent.eta,torrent.eta_act]|min|round(0)|timedelta(clamp=true)}})</small>
|
|
</div>
|
|
</li>
|
|
{% endmacro %}
|
|
|
|
{% block app_content %}
|
|
|
|
<h1>
|
|
<a href="{{config.APP_CONFIG.qbt_url}}">QBittorrent</a>
|
|
{{qbt.version}}
|
|
(DL: {{qbt.server_state.dl_info_speed|filesizeformat(binary=True)}}/s,
|
|
UL: {{qbt.server_state.up_info_speed|filesizeformat(binary=True)}}/s)
|
|
</h1>
|
|
|
|
<div class="row">
|
|
<div class="col">
|
|
Total Uploaded
|
|
</div>
|
|
<div class="col">
|
|
{{qbt.server_state.alltime_ul|filesizeformat(binary=True)}}
|
|
</div>
|
|
<div class="col">
|
|
Total Downloaded
|
|
</div>
|
|
<div class="col">
|
|
{{qbt.server_state.alltime_dl|filesizeformat(binary=True)}}
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
<div class="col">
|
|
Session Uploaded
|
|
</div>
|
|
<div class="col">
|
|
{{qbt.server_state.up_info_data|filesizeformat(binary=True)}}
|
|
</div>
|
|
<div class="col">
|
|
Session Downloaded
|
|
</div>
|
|
<div class="col">
|
|
{{qbt.server_state.dl_info_data|filesizeformat(binary=True)}}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col">
|
|
Torrents
|
|
</div>
|
|
<div class="col">
|
|
{{qbt.torrents|length}}
|
|
</div>
|
|
<div class="col">
|
|
Total Queue Size
|
|
</div>
|
|
<div class="col">
|
|
{{qbt.torrents.values()|map(attribute='size')|sum|filesizeformat(binary=true)}}
|
|
</div>
|
|
</div>
|
|
<hr />
|
|
|
|
|
|
<div class="row">
|
|
<div class="col">
|
|
<form method="GET">
|
|
<select class="form-control" name="sort" onchange="this.parentElement.submit()">
|
|
<option value="">Sort by</option>
|
|
{% for key,value in sort_by_choices.items() %}
|
|
<option value="{{key}}">{{value}}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
{% for state,torrents in qbt.torrents.values()|sort(attribute='state')|groupby('state') %}
|
|
{% set state_label,badge_type = status_map[state] or (state,'light') %}
|
|
<div class="row">
|
|
<div class="col">
|
|
<a href={{url_for("qbittorrent.index",state=state)}} >{{state_label}}</a>
|
|
</div>
|
|
<div class="col">
|
|
{{torrents|length}}
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
|
|
{% if state_filter %}
|
|
<div class="row">
|
|
<div class="col">
|
|
<a href={{url_for("qbittorrent.index")}}>[Clear filter]</a>
|
|
</div>
|
|
<div class="col">
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<hr />
|
|
|
|
<div class="row">
|
|
<div class="col">
|
|
<ul style="padding-bottom: 10px;" class="list-group">
|
|
{% for torrent in qbt.torrents.values()|sort(attribute=sort_by,reverse=True) %}
|
|
{% set state_label,badge_type = status_map[torrent.state] or (torrent.state,'light') %}
|
|
{% if state_filter %}
|
|
{% if torrent.state==state_filter %}
|
|
{{torrent_entry(torrent)}}
|
|
{% endif %}
|
|
{% else %}
|
|
{{torrent_entry(torrent)}}
|
|
{% endif %}
|
|
{% endfor %}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|