Compact Libreddit Posts on Mobile
This commit is contained in:
parent
f819ad2bc6
commit
df89c5076e
51
src/utils.rs
51
src/utils.rs
@ -124,11 +124,11 @@ pub fn param(path: &str, value: &str) -> String {
|
|||||||
|
|
||||||
// Direct urls to proxy if proxy is enabled
|
// Direct urls to proxy if proxy is enabled
|
||||||
pub fn format_url(url: String) -> String {
|
pub fn format_url(url: String) -> String {
|
||||||
if url.is_empty() {
|
if url.is_empty() || url == "self" || url == "default" {
|
||||||
return String::new();
|
String::new()
|
||||||
};
|
} else {
|
||||||
|
format!("/proxy/{}", encode(url).as_str())
|
||||||
format!("/proxy/{}", encode(url).as_str())
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rewrite Reddit links to Libreddit in body of text
|
// Rewrite Reddit links to Libreddit in body of text
|
||||||
@ -185,12 +185,9 @@ pub async fn fetch_posts(path: &str, fallback_title: String) -> Result<(Vec<Post
|
|||||||
|
|
||||||
let mut posts: Vec<Post> = Vec::new();
|
let mut posts: Vec<Post> = Vec::new();
|
||||||
|
|
||||||
|
// For each post from posts list
|
||||||
for post in post_list {
|
for post in post_list {
|
||||||
let img = if val(post, "thumbnail").starts_with("https:/") {
|
let img = format_url(val(post, "thumbnail"));
|
||||||
format_url(val(post, "thumbnail"))
|
|
||||||
} else {
|
|
||||||
String::new()
|
|
||||||
};
|
|
||||||
let unix_time: i64 = post["data"]["created_utc"].as_f64().unwrap_or_default().round() as i64;
|
let unix_time: i64 = post["data"]["created_utc"].as_f64().unwrap_or_default().round() as i64;
|
||||||
let score = post["data"]["score"].as_i64().unwrap_or_default();
|
let score = post["data"]["score"].as_i64().unwrap_or_default();
|
||||||
let ratio: f64 = post["data"]["upvote_ratio"].as_f64().unwrap_or(1.0) * 100.0;
|
let ratio: f64 = post["data"]["upvote_ratio"].as_f64().unwrap_or(1.0) * 100.0;
|
||||||
@ -221,23 +218,22 @@ pub async fn fetch_posts(path: &str, fallback_title: String) -> Result<(Vec<Post
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
flags: Flags {
|
flags: Flags {
|
||||||
nsfw: post["data"]["over_18"].as_bool().unwrap_or(false),
|
nsfw: post["data"]["over_18"].as_bool().unwrap_or_default(),
|
||||||
stickied: post["data"]["stickied"].as_bool().unwrap_or(false),
|
stickied: post["data"]["stickied"].as_bool().unwrap_or_default(),
|
||||||
},
|
},
|
||||||
permalink: val(post, "permalink"),
|
permalink: val(post, "permalink"),
|
||||||
time: Utc.timestamp(unix_time, 0).format("%b %e '%y").to_string(),
|
time: Utc.timestamp(unix_time, 0).format("%b %e '%y").to_string(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok((posts, res["data"]["after"].as_str().unwrap_or("").to_string()))
|
Ok((posts, res["data"]["after"].as_str().unwrap_or_default().to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// NETWORKING
|
// NETWORKING
|
||||||
//
|
//
|
||||||
|
|
||||||
pub async fn error(message: String) -> HttpResponse {
|
pub async fn error(msg: String) -> HttpResponse {
|
||||||
let msg = if message.is_empty() { "Page not found".to_string() } else { message };
|
|
||||||
let body = ErrorTemplate { message: msg }.render().unwrap_or_default();
|
let body = ErrorTemplate { message: msg }.render().unwrap_or_default();
|
||||||
HttpResponse::NotFound().content_type("text/html").body(body)
|
HttpResponse::NotFound().content_type("text/html").body(body)
|
||||||
}
|
}
|
||||||
@ -246,26 +242,7 @@ pub async fn error(message: String) -> HttpResponse {
|
|||||||
pub async fn request(path: &str) -> Result<serde_json::Value, &'static str> {
|
pub async fn request(path: &str) -> Result<serde_json::Value, &'static str> {
|
||||||
let url = format!("https://www.reddit.com/{}", path);
|
let url = format!("https://www.reddit.com/{}", path);
|
||||||
|
|
||||||
// --- actix-web::client ---
|
// Send request using reqwest
|
||||||
// let client = actix_web::client::Client::default();
|
|
||||||
// let res = client
|
|
||||||
// .get(url)
|
|
||||||
// .send()
|
|
||||||
// .await?
|
|
||||||
// .body()
|
|
||||||
// .limit(1000000)
|
|
||||||
// .await?;
|
|
||||||
|
|
||||||
// let body = std::str::from_utf8(res.as_ref())?; // .as_ref converts Bytes to [u8]
|
|
||||||
|
|
||||||
// --- surf ---
|
|
||||||
// let req = get(&url).header("User-Agent", "libreddit");
|
|
||||||
// let client = client().with(Redirect::new(5));
|
|
||||||
// let mut res = client.send(req).await.unwrap();
|
|
||||||
// let success = res.status().is_success();
|
|
||||||
// let body = res.body_string().await.unwrap();
|
|
||||||
|
|
||||||
// --- reqwest ---
|
|
||||||
match reqwest::get(&url).await {
|
match reqwest::get(&url).await {
|
||||||
Ok(res) => {
|
Ok(res) => {
|
||||||
// Read the status from the response
|
// Read the status from the response
|
||||||
@ -281,13 +258,15 @@ pub async fn request(path: &str) -> Result<serde_json::Value, &'static str> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// If Reddit returns error, tell user Page Not Found
|
||||||
false => {
|
false => {
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
dbg!(format!("{} - Page not found", url));
|
dbg!(format!("{} - Page not found", url));
|
||||||
Err("Page not found")
|
Err("Page not found")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
// If can't send request to Reddit, return this to user
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
dbg!(format!("{} - {}", url, e));
|
dbg!(format!("{} - {}", url, e));
|
||||||
|
@ -97,6 +97,11 @@ aside {
|
|||||||
border: 1px solid var(--highlighted);
|
border: 1px solid var(--highlighted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dot {
|
||||||
|
font-size: 12px;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
/* User & Subreddit */
|
/* User & Subreddit */
|
||||||
|
|
||||||
#user, #subreddit, #sidebar {
|
#user, #subreddit, #sidebar {
|
||||||
@ -304,6 +309,10 @@ input[type="submit"]:hover { color: var(--accent); }
|
|||||||
margin: 20px 0;
|
margin: 20px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.post.highlighted > .post_right {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
.post:hover {
|
.post:hover {
|
||||||
background: var(--foreground);
|
background: var(--foreground);
|
||||||
}
|
}
|
||||||
@ -314,7 +323,6 @@ input[type="submit"]:hover { color: var(--accent); }
|
|||||||
|
|
||||||
.post_left, .post_right {
|
.post_left, .post_right {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -322,13 +330,13 @@ input[type="submit"]:hover { color: var(--accent); }
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
background: var(--foreground);
|
background: var(--foreground);
|
||||||
border-radius: 5px 0 0 5px;
|
border-radius: 5px 0 0 5px;
|
||||||
|
flex-direction: column;
|
||||||
min-width: 50px;
|
min-width: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post_score {
|
.post_score {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
font-size: 16px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#post_footer {
|
#post_footer {
|
||||||
@ -356,12 +364,19 @@ input[type="submit"]:hover { color: var(--accent); }
|
|||||||
.post_title {
|
.post_title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post_text {
|
||||||
|
padding: 15px 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post_right {
|
.post_right {
|
||||||
padding: 15px 20px;
|
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post_right > * {
|
.post_right > * {
|
||||||
@ -381,13 +396,13 @@ input[type="submit"]:hover { color: var(--accent); }
|
|||||||
|
|
||||||
#post_url {
|
#post_url {
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post_thumbnail {
|
.post_thumbnail {
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
width: auto;
|
width: auto;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
margin: 10px;
|
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
border: 1px solid var(--foreground);
|
border: 1px solid var(--foreground);
|
||||||
max-width: 20%;
|
max-width: 20%;
|
||||||
@ -477,7 +492,7 @@ input[type="submit"]:hover { color: var(--accent); }
|
|||||||
}
|
}
|
||||||
|
|
||||||
.comment_data > * {
|
.comment_data > * {
|
||||||
margin: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.comment_image {
|
.comment_image {
|
||||||
@ -515,7 +530,7 @@ input[type="submit"]:hover { color: var(--accent); }
|
|||||||
}
|
}
|
||||||
|
|
||||||
.datetime {
|
.datetime {
|
||||||
opacity: 0.75;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.line {
|
.line {
|
||||||
@ -597,22 +612,18 @@ td, th {
|
|||||||
flex-direction: column-reverse;
|
flex-direction: column-reverse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.post_header {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
.post_left {
|
.post_left {
|
||||||
border-radius: 0 0 5px 5px;
|
border-radius: 0 0 5px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post_right {
|
|
||||||
padding: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.post_score {
|
.post_score {
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.post_thumbnail {
|
|
||||||
max-width: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
.replies > .comment {
|
.replies > .comment {
|
||||||
margin-left: -25px;
|
margin-left: -25px;
|
||||||
padding: 5px 0;
|
padding: 5px 0;
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
{% if item.flair.0 != "" %}
|
{% if item.flair.0 != "" %}
|
||||||
<small class="author_flair">{{ item.flair.0 }}</small>
|
<small class="author_flair">{{ item.flair.0 }}</small>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
• <span class="datetime">{{ item.time }}</span>
|
<span class="dot">•</span>
|
||||||
|
<span class="datetime">{{ item.time }}</span>
|
||||||
</summary>
|
</summary>
|
||||||
<p class="comment_body">{{ item.body }}</p>
|
<p class="comment_body">{{ item.body }}</p>
|
||||||
{%- endmacro %}
|
{%- endmacro %}
|
||||||
@ -45,35 +46,41 @@
|
|||||||
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="post_right">
|
<div class="post_right">
|
||||||
<p class="post_header">
|
<div class="post_text">
|
||||||
<b><a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a></b>
|
<p class="post_header">
|
||||||
•
|
<a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a>
|
||||||
<a class="post_author" href="/u/{{ post.author }}">u/{{ post.author }}</a>
|
<span class="dot">•</span>
|
||||||
{% if post.author_flair.0 != "" %}
|
<a class="post_author" href="/u/{{ post.author }}">u/{{ post.author }}</a>
|
||||||
<small class="author_flair">{{ post.author_flair.0 }}</small>
|
{% if post.author_flair.0 != "" %}
|
||||||
|
<small class="author_flair">{{ post.author_flair.0 }}</small>
|
||||||
|
{% endif %}
|
||||||
|
<span class="datetime">{{ post.time }}</span>
|
||||||
|
</p>
|
||||||
|
<a href="{{ post.permalink }}" class="post_title">
|
||||||
|
{{ post.title }}
|
||||||
|
{% if post.flair.0 != "" %}
|
||||||
|
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
||||||
|
{% endif %}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!-- POST MEDIA -->
|
||||||
|
{% if post.post_type == "image" %}
|
||||||
|
<img class="post_media" src="{{ post.media }}"/>
|
||||||
|
{% else if post.post_type == "video" %}
|
||||||
|
<video class="post_media" src="{{ post.media }}" controls autoplay loop>
|
||||||
|
{% else if post.post_type == "link" %}
|
||||||
|
<a id="post_url" href="{{ post.media }}">{{ post.media }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="datetime">{{ post.time }}</span>
|
|
||||||
</p>
|
<!-- POST BODY -->
|
||||||
<a href="{{ post.permalink }}" class="post_title">
|
<div class="post_body">{{ post.body }}</div>
|
||||||
{{ post.title }}
|
<div id="post_footer">
|
||||||
{% if post.flair.0 != "" %}
|
<ul id="post_links">
|
||||||
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
<li><a href="/{{ post.id }}">permalink</a></li>
|
||||||
{% endif %}
|
<li><a href="https://reddit.com/{{ post.id }}">reddit</a></li>
|
||||||
</a>
|
</ul>
|
||||||
{% if post.post_type == "image" %}
|
<p>{{ post.upvote_ratio }}% Upvoted</p>
|
||||||
<img class="post_media" src="{{ post.media }}"/>
|
</div>
|
||||||
{% else if post.post_type == "video" %}
|
|
||||||
<video class="post_media" src="{{ post.media }}" controls autoplay loop>
|
|
||||||
{% else if post.post_type == "link" %}
|
|
||||||
<a id="post_url" href="{{ post.media }}">{{ post.media }}</a>
|
|
||||||
{% endif %}
|
|
||||||
<div class="post_body">{{ post.body }}</div>
|
|
||||||
<div id="post_footer">
|
|
||||||
<ul id="post_links">
|
|
||||||
<li><a href="/{{ post.id }}">permalink</a></li>
|
|
||||||
<li><a href="https://reddit.com/{{ post.id }}">reddit</a></li>
|
|
||||||
</ul>
|
|
||||||
<p>{{ post.upvote_ratio }}% Upvoted</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -27,22 +27,25 @@
|
|||||||
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="post_right">
|
<div class="post_right">
|
||||||
<p class="post_header">
|
<div class="post_text">
|
||||||
<b><a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a></b>
|
<p class="post_header">
|
||||||
• <a class="post_author" href="/u/{{ post.author }}">u/{{ post.author }}</a>
|
<a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a>
|
||||||
{% if post.author_flair.0 != "" %}
|
<span class="dot">•</span>
|
||||||
<small class="author_flair">{{ post.author_flair.0 }}</small>
|
<a class="post_author" href="/u/{{ post.author }}">u/{{ post.author }}</a>
|
||||||
{% endif %}
|
{% if post.author_flair.0 != "" %}
|
||||||
<span class="datetime" style="float: right;">{{ post.time }}</span>
|
<small class="author_flair">{{ post.author_flair.0 }}</small>
|
||||||
</p>
|
{% endif %}
|
||||||
<p class="post_title">
|
<span class="datetime" style="float: right;">{{ post.time }}</span>
|
||||||
{% if post.flair.0 != "" %}
|
</p>
|
||||||
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
<p class="post_title">
|
||||||
{% endif %}
|
{% if post.flair.0 != "" %}
|
||||||
<a href="{{ post.permalink }}">{{ post.title }}</a>
|
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
||||||
</p>
|
{% endif %}
|
||||||
|
<a href="{{ post.permalink }}">{{ post.title }}</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<img class="post_thumbnail" src="{{ post.media }}">
|
||||||
</div>
|
</div>
|
||||||
<img class="post_thumbnail" src="{{ post.media }}">
|
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="comment">
|
<div class="comment">
|
||||||
|
@ -34,22 +34,22 @@
|
|||||||
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="post_right">
|
<div class="post_right">
|
||||||
<p class="post_header">
|
<div class="post_text">
|
||||||
<b><a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a></b>
|
<p class="post_header">
|
||||||
• <a class="post_author" href="/u/{{ post.author }}">u/{{ post.author }}</a>
|
<a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a>
|
||||||
{% if post.author_flair.0 != "" %}
|
<span class="dot">•</span>
|
||||||
<small class="author_flair">{{ post.author_flair.0 }}</small>
|
<a class="post_author" href="/u/{{ post.author }}">u/{{ post.author }}</a>
|
||||||
{% endif %}
|
<span class="datetime">{{ post.time }}</span>
|
||||||
<span class="datetime">{{ post.time }}</span>
|
</p>
|
||||||
</p>
|
<p class="post_title">
|
||||||
<p class="post_title">
|
{% if post.flair.0 != "" %}
|
||||||
{% if post.flair.0 != "" %}
|
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
||||||
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
{% endif %}
|
||||||
{% endif %}
|
<a href="{{ post.permalink }}">{{ post.title }}</a>
|
||||||
<a href="{{ post.permalink }}">{{ post.title }}</a>
|
</p>
|
||||||
</p>
|
</div>
|
||||||
|
<img class="post_thumbnail" src="{{ post.media }}">
|
||||||
</div>
|
</div>
|
||||||
<img class="post_thumbnail" src="{{ post.media }}">
|
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
@ -24,24 +24,25 @@
|
|||||||
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
{% if post.flags.nsfw %}<div class="nsfw">NSFW</div>{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="post_right">
|
<div class="post_right">
|
||||||
<p class="post_header">
|
<div class="post_text">
|
||||||
<b><a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a></b>
|
<p class="post_header">
|
||||||
• <a class="post_author" href="/u/{{ post.author }}">u/{{ post.author }}</a>
|
<a class="post_subreddit" href="/r/{{ post.community }}">r/{{ post.community }}</a>
|
||||||
{% if post.author_flair.0 != "" %}
|
{% if post.author_flair.0 != "" %}
|
||||||
<small class="author_flair">{{ post.author_flair.0 }}</small>
|
<small class="author_flair">{{ post.author_flair.0 }}</small>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="datetime" style="float: right;">{{ post.time }}</span>
|
<span class="datetime" style="float: right;">{{ post.time }}</span>
|
||||||
</p>
|
</p>
|
||||||
<p class="post_title">
|
<p class="post_title">
|
||||||
{% if post.flair.0 == "Comment" %}
|
{% if post.flair.0 == "Comment" %}
|
||||||
{% else if post.flair.0 == "" %}
|
{% else if post.flair.0 == "" %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
<small class="post_flair" style="color:{{ post.flair.2 }}; background:{{ post.flair.1 }}">{{ post.flair.0 }}</small>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="{{ post.permalink }}">{{ post.title }}</a>
|
<a href="{{ post.permalink }}">{{ post.title }}</a>
|
||||||
</p>
|
</p>
|
||||||
|
</div>
|
||||||
|
<img class="post_thumbnail" src="{{ post.media }}">
|
||||||
</div>
|
</div>
|
||||||
<img class="post_thumbnail" src="{{ post.media }}">
|
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="comment">
|
<div class="comment">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user