factor out file size display code
This commit is contained in:
parent
920b28f5f5
commit
d80180956f
|
@ -19,7 +19,7 @@ use bytesize::ByteSize;
|
||||||
use log::{error, warn};
|
use log::{error, warn};
|
||||||
use password_hash::PasswordHashString;
|
use password_hash::PasswordHashString;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use state::StateDb;
|
use state::{StateDb, prelude::SizedFile};
|
||||||
use store::{StoredFile, StoredFiles};
|
use store::{StoredFile, StoredFiles};
|
||||||
use tokio::fs::File;
|
use tokio::fs::File;
|
||||||
|
|
||||||
|
|
17
src/state.rs
17
src/state.rs
|
@ -1,6 +1,6 @@
|
||||||
use jsondb::JsonDb;
|
use jsondb::JsonDb;
|
||||||
|
|
||||||
mod prelude {
|
pub mod prelude {
|
||||||
pub use std::collections::HashMap;
|
pub use std::collections::HashMap;
|
||||||
|
|
||||||
pub use jsondb::Schema;
|
pub use jsondb::Schema;
|
||||||
|
@ -8,8 +8,17 @@ mod prelude {
|
||||||
pub use serde_with::serde_as;
|
pub use serde_with::serde_as;
|
||||||
pub use serde_with::skip_serializing_none;
|
pub use serde_with::skip_serializing_none;
|
||||||
pub use time::OffsetDateTime;
|
pub use time::OffsetDateTime;
|
||||||
|
|
||||||
|
pub trait SizedFile {
|
||||||
|
fn size(&self) -> u64;
|
||||||
|
|
||||||
|
fn formatted_size(&self) -> String {
|
||||||
|
bytesize::to_string(self.size(), false).replace(" ", "")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
mod v0;
|
mod v0;
|
||||||
|
|
||||||
pub mod v1 {
|
pub mod v1 {
|
||||||
|
@ -42,6 +51,9 @@ pub mod v1 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl SizedFile for UploadedFile {
|
||||||
|
fn size(&self) -> u64 { self.size }
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||||
pub struct FileSet {
|
pub struct FileSet {
|
||||||
|
@ -70,6 +82,9 @@ pub mod v1 {
|
||||||
pub expiry: OffsetDateTime,
|
pub expiry: OffsetDateTime,
|
||||||
pub contents: Option<FileSet>,
|
pub contents: Option<FileSet>,
|
||||||
}
|
}
|
||||||
|
impl SizedFile for StoredFile {
|
||||||
|
fn size(&self) -> u64 { self.size }
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||||
pub struct StoredFileWithPassword {
|
pub struct StoredFileWithPassword {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
{% block og_title %}{{ info.file.name }}{% endblock %}
|
{% block og_title %}{{ info.file.name }}{% endblock %}
|
||||||
{% block og_description -%}
|
{% block og_description -%}
|
||||||
{% let formatted_total_size = bytesize::to_string(info.file.size.clone(), false).replace(" ", "") -%}
|
{% let formatted_total_size = info.file.formatted_size() -%}
|
||||||
{% match info.file.contents -%}
|
{% match info.file.contents -%}
|
||||||
{% when Some with (files) -%}
|
{% when Some with (files) -%}
|
||||||
{{ files.files.len() }} files, {{ formatted_total_size }} total
|
{{ files.files.len() }} files, {{ formatted_total_size }} total
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div id="download_toplevel" class="section">
|
<div id="download_toplevel" class="section">
|
||||||
<div class="file_name">{{ info.file.name }}</div>
|
<div class="file_name">{{ info.file.name }}</div>
|
||||||
<div class="file_size">{{ bytesize::to_string(info.file.size.clone(), false).replace(" ", "") }}</div>
|
<div class="file_size">{{ info.file.formatted_size() }}</div>
|
||||||
<div class="file_download"><a class="download_button" href="download?code={{ info.code }}&download=all"></a></div>
|
<div class="file_download"><a class="download_button" href="download?code={{ info.code }}&download=all"></a></div>
|
||||||
<div class="file_expiry">Expires {{ info.file.expiry.format(DATE_DISPLAY_FORMAT).unwrap() }}</div>
|
<div class="file_expiry">Expires {{ info.file.expiry.format(DATE_DISPLAY_FORMAT).unwrap() }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
{% let offsets = info.offsets.as_ref().unwrap() %}
|
{% let offsets = info.offsets.as_ref().unwrap() %}
|
||||||
{% for f in files.files %}
|
{% for f in files.files %}
|
||||||
<tr class="{% if offsets.get(loop.index0.clone()).unwrap().clone() > info.available %}unavailable{% endif %}">
|
<tr class="{% if offsets.get(loop.index0.clone()).unwrap().clone() > info.available %}unavailable{% endif %}">
|
||||||
<td class="file_size">{{ bytesize::to_string(f.size.clone(), false).replace(" ", "") }}</td>
|
<td class="file_size">{{ f.formatted_size() }}</td>
|
||||||
<td class="file_name">{{ f.name }}</td>
|
<td class="file_name">{{ f.name }}</td>
|
||||||
<td class="file_download"><a class="download_button" href="download?code={{ info.code }}&download={{ loop.index0 }}"></a></td>
|
<td class="file_download"><a class="download_button" href="download?code={{ info.code }}&download={{ loop.index0 }}"></a></td>
|
||||||
<td class="file_unavailable"></td>
|
<td class="file_unavailable"></td>
|
||||||
|
|
Loading…
Reference in a new issue