mirror of
https://github.com/YGGverse/btracker.git
synced 2026-03-31 17:15:31 +00:00
implement scrape frontend, optimize css, init static svg assets
This commit is contained in:
parent
4d5e0f5b79
commit
70c0174fbc
7 changed files with 104 additions and 39 deletions
11
src/main.rs
11
src/main.rs
|
|
@ -39,12 +39,20 @@ fn index(
|
|||
use plurify::Plurify;
|
||||
#[derive(Serialize)]
|
||||
#[serde(crate = "rocket::serde")]
|
||||
struct Scrape {
|
||||
leechers: usize,
|
||||
peers: usize,
|
||||
seeders: usize,
|
||||
}
|
||||
#[derive(Serialize)]
|
||||
#[serde(crate = "rocket::serde")]
|
||||
struct Row {
|
||||
created: Option<String>,
|
||||
files: String,
|
||||
indexed: String,
|
||||
magnet: String,
|
||||
scrape: Option<Scrape>,
|
||||
size: String,
|
||||
files: String,
|
||||
torrent: Torrent,
|
||||
}
|
||||
let (total, torrents) = storage
|
||||
|
|
@ -69,6 +77,7 @@ fn index(
|
|||
.map(|t| t.format(&meta.format_time).to_string()),
|
||||
indexed: torrent.time.format(&meta.format_time).to_string(),
|
||||
magnet: format::magnet(&torrent.info_hash, meta.trackers.as_ref()),
|
||||
scrape: None, // @TODO
|
||||
size: format::bytes(torrent.size),
|
||||
files: torrent.files.as_ref().map_or("1 file".into(), |f| {
|
||||
let l = f.len();
|
||||
|
|
|
|||
|
|
@ -15,9 +15,17 @@
|
|||
transition: opacity .2s ease-in-out;
|
||||
}
|
||||
|
||||
:root {
|
||||
--accent: #96d9a1;
|
||||
--background: #282b3c;
|
||||
--default: #ccc;
|
||||
--item: #34384f;
|
||||
}
|
||||
|
||||
|
||||
body {
|
||||
background: #282b3c;
|
||||
color: #ccc;
|
||||
background: var(--background);
|
||||
color: var(--default);
|
||||
font-family: Sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
|
@ -25,7 +33,7 @@ body {
|
|||
a,
|
||||
a:visited,
|
||||
a:active {
|
||||
color: #96d9a1;
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
opacity: .9;
|
||||
}
|
||||
|
|
@ -40,7 +48,7 @@ h1 {
|
|||
}
|
||||
|
||||
h2 {
|
||||
color: #ccc;
|
||||
color: var(--default);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
|
|
@ -59,12 +67,12 @@ header > a,
|
|||
header > a:active,
|
||||
header > a:hover,
|
||||
header > a:visited {
|
||||
color: #ccc;
|
||||
color: var(--default);
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
header::first-letter {
|
||||
color: #96d9a1;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
header > div {
|
||||
|
|
@ -82,7 +90,7 @@ main {
|
|||
|
||||
/* pagination */
|
||||
main > a {
|
||||
background: #34384f;
|
||||
background: var(--item);
|
||||
border-radius: 3px;
|
||||
float: right;
|
||||
margin-left: 8px;
|
||||
|
|
@ -92,7 +100,7 @@ main > a {
|
|||
|
||||
/* item row */
|
||||
main > div {
|
||||
background-color: #34384f;
|
||||
background-color: var(--item);
|
||||
border-radius: 3px;
|
||||
margin: 8px 0;
|
||||
padding: 24px;
|
||||
|
|
@ -122,6 +130,7 @@ main > div > div > ul > li {
|
|||
|
||||
main > div > div > ul > li > span {
|
||||
color: white;
|
||||
display: inline-block;
|
||||
font-size: smaller;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
|
@ -135,9 +144,42 @@ main > div > div > ul > li:not(:last-child)::after {
|
|||
margin: 0 6px;
|
||||
}
|
||||
|
||||
main > div > div > a > svg {
|
||||
main > div > div > ul > li > span.leechers {
|
||||
background-image: url('leechers.svg');
|
||||
background-position: left center;
|
||||
background-repeat: no-repeat;
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
main > div > div > ul > li > span.peers {
|
||||
background-image: url('peers.svg');
|
||||
background-position: left center;
|
||||
background-repeat: no-repeat;
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
main > div > div > ul > li > span.seeders {
|
||||
background-image: url('seeders.svg');
|
||||
background-position: left center;
|
||||
background-repeat: no-repeat;
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
/* control actions */
|
||||
main > div > div > div {
|
||||
float: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
main > div > div > div > a {
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
main > div > div > div > a.magnet {
|
||||
background-image: url('magnet.svg');
|
||||
}
|
||||
|
||||
/* pagination info */
|
||||
|
|
@ -147,6 +189,6 @@ main > span {
|
|||
}
|
||||
|
||||
footer {
|
||||
margin: 16px auto 24px;
|
||||
margin: 16px auto 36px;
|
||||
text-align: center;
|
||||
}
|
||||
4
static/theme/leechers.svg
Normal file
4
static/theme/leechers.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="white" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M.5 6a.5.5 0 0 0-.488.608l1.652 7.434A2.5 2.5 0 0 0 4.104 16h5.792a2.5 2.5 0 0 0 2.44-1.958l.131-.59a3 3 0 0 0 1.3-5.854l.221-.99A.5.5 0 0 0 13.5 6H.5ZM13 12.5a2.01 2.01 0 0 1-.316-.025l.867-3.898A2.001 2.001 0 0 1 13 12.5ZM2.64 13.825 1.123 7h11.754l-1.517 6.825A1.5 1.5 0 0 1 9.896 15H4.104a1.5 1.5 0 0 1-1.464-1.175Z"/>
|
||||
<path d="m4.4.8-.003.004-.014.019a4.167 4.167 0 0 0-.204.31 2.327 2.327 0 0 0-.141.267c-.026.06-.034.092-.037.103v.004a.593.593 0 0 0 .091.248c.075.133.178.272.308.445l.01.012c.118.158.26.347.37.543.112.2.22.455.22.745 0 .188-.065.368-.119.494a3.31 3.31 0 0 1-.202.388 5.444 5.444 0 0 1-.253.382l-.018.025-.005.008-.002.002A.5.5 0 0 1 3.6 4.2l.003-.004.014-.019a4.149 4.149 0 0 0 .204-.31 2.06 2.06 0 0 0 .141-.267c.026-.06.034-.092.037-.103a.593.593 0 0 0-.09-.252A4.334 4.334 0 0 0 3.6 2.8l-.01-.012a5.099 5.099 0 0 1-.37-.543A1.53 1.53 0 0 1 3 1.5c0-.188.065-.368.119-.494.059-.138.134-.274.202-.388a5.446 5.446 0 0 1 .253-.382l.025-.035A.5.5 0 0 1 4.4.8Zm3 0-.003.004-.014.019a4.167 4.167 0 0 0-.204.31 2.327 2.327 0 0 0-.141.267c-.026.06-.034.092-.037.103v.004a.593.593 0 0 0 .091.248c.075.133.178.272.308.445l.01.012c.118.158.26.347.37.543.112.2.22.455.22.745 0 .188-.065.368-.119.494a3.31 3.31 0 0 1-.202.388 5.444 5.444 0 0 1-.253.382l-.018.025-.005.008-.002.002A.5.5 0 0 1 6.6 4.2l.003-.004.014-.019a4.149 4.149 0 0 0 .204-.31 2.06 2.06 0 0 0 .141-.267c.026-.06.034-.092.037-.103a.593.593 0 0 0-.09-.252A4.334 4.334 0 0 0 6.6 2.8l-.01-.012a5.099 5.099 0 0 1-.37-.543A1.53 1.53 0 0 1 6 1.5c0-.188.065-.368.119-.494.059-.138.134-.274.202-.388a5.446 5.446 0 0 1 .253-.382l.025-.035A.5.5 0 0 1 7.4.8Zm3 0-.003.004-.014.019a4.077 4.077 0 0 0-.204.31 2.337 2.337 0 0 0-.141.267c-.026.06-.034.092-.037.103v.004a.593.593 0 0 0 .091.248c.075.133.178.272.308.445l.01.012c.118.158.26.347.37.543.112.2.22.455.22.745 0 .188-.065.368-.119.494a3.198 3.198 0 0 1-.202.388 5.385 5.385 0 0 1-.252.382l-.019.025-.005.008-.002.002A.5.5 0 0 1 9.6 4.2l.003-.004.014-.019a4.149 4.149 0 0 0 .204-.31 2.06 2.06 0 0 0 .141-.267c.026-.06.034-.092.037-.103a.593.593 0 0 0-.09-.252A4.334 4.334 0 0 0 9.6 2.8l-.01-.012a5.099 5.099 0 0 1-.37-.543A1.53 1.53 0 0 1 9 1.5c0-.188.065-.368.119-.494.059-.138.134-.274.202-.388a5.446 5.446 0 0 1 .253-.382l.025-.035A.5.5 0 0 1 10.4.8Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
3
static/theme/magnet.svg
Normal file
3
static/theme/magnet.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="#96d9a1" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v5.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V4.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 335 B |
3
static/theme/peers.svg
Normal file
3
static/theme/peers.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="white" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M8 1a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L7.5 13.293V1.5A.5.5 0 0 1 8 1z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 279 B |
3
static/theme/seeders.svg
Normal file
3
static/theme/seeders.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="white" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M8 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L7.5 2.707V14.5a.5.5 0 0 0 .5.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 281 B |
|
|
@ -1,6 +1,6 @@
|
|||
{% extends "layout/default" %}
|
||||
{% block content %}
|
||||
{% if rows %}
|
||||
{% if rows %}
|
||||
{% for row in rows %}
|
||||
<div>
|
||||
<a name="{{ row.torrent.info_hash }}"></a>
|
||||
|
|
@ -12,21 +12,22 @@
|
|||
{% if row.created %}<li><span title="Created">({{ row.created }})</span></li>{% endif %}
|
||||
{% if row.size %}<li><span title="Size">{{ row.size }}</span></li>{% endif %}
|
||||
<li><span title="Files">{{ row.files }}</span></li>
|
||||
{% if row.scrape %}
|
||||
<li><span title="Seeders" class="seeders">{{ row.scrape.seeders }}</span></li>
|
||||
<li><span title="Peers" class="peers">{{ row.scrape.seeders }}</span></li>
|
||||
<li><span title="Leechers" class="leechers">{{ row.scrape.seeders }}</span></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
<a rel="nofollow" href="{{ row.magnet }}" title="Magnet">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 16 16">
|
||||
<path d="M15 12h-4v3h4v-3ZM5 12H1v3h4v-3ZM0 8a8 8 0 1 1 16 0v8h-6V8a2 2 0 1 0-4 0v8H0V8Z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<div>
|
||||
<a rel="nofollow" href="{{ row.magnet }}" title="Get magnet" class="action magnet"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<div>
|
||||
Nothing.
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if next %}<a href="{{ next }}">Next</a>{% endif %}
|
||||
{% if back %}<a href="{{ back }}">Back</a>{% endif %}
|
||||
<span>{{ pagination_totals }}</span>
|
||||
{% else %}
|
||||
<div>Nothing.</div>
|
||||
{% endif %}
|
||||
{% if next %}<a href="{{ next }}">Next</a>{% endif %}
|
||||
{% if back %}<a href="{{ back }}">Back</a>{% endif %}
|
||||
<span>{{ pagination_totals }}</span>
|
||||
{% endblock content %}
|
||||
Loading…
Add table
Add a link
Reference in a new issue