fix(vfs): Z-04 — implement webdav quota report
This commit is contained in:
@@ -349,6 +349,38 @@ impl Database {
|
||||
self.conn()
|
||||
}
|
||||
|
||||
/// Ermittelt den physischen Dateipfad des geöffneten Containers aus SQLite (sofern nicht in-memory).
|
||||
pub fn container_path(&self) -> Option<std::path::PathBuf> {
|
||||
let conn = self.conn();
|
||||
let path_str: String = conn
|
||||
.query_row("PRAGMA database_list;", [], |r| r.get(2))
|
||||
.ok()?;
|
||||
if path_str.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(std::path::PathBuf::from(path_str))
|
||||
}
|
||||
}
|
||||
|
||||
/// Ermittelt die physische Dateigröße des Containers über die SQLite-Page-Statistik (Z-04).
|
||||
pub fn get_container_file_size(&self) -> Result<u64> {
|
||||
let conn = self.conn();
|
||||
let page_count: i64 = conn.query_row("PRAGMA page_count;", [], |r| r.get(0))?;
|
||||
let page_size: i64 = conn.query_row("PRAGMA page_size;", [], |r| r.get(0))?;
|
||||
Ok((page_count.saturating_mul(page_size)).max(0) as u64)
|
||||
}
|
||||
|
||||
/// Ermittelt die kumulierte Dateigröße aller im Container gespeicherten Nutzdateien (Z-04).
|
||||
pub fn get_total_used_size(&self) -> Result<u64> {
|
||||
let conn = self.conn();
|
||||
let total: i64 = conn.query_row(
|
||||
"SELECT COALESCE(SUM(size), 0) FROM nodes WHERE is_dir = 0",
|
||||
[],
|
||||
|r| r.get(0),
|
||||
)?;
|
||||
Ok(total.max(0) as u64)
|
||||
}
|
||||
|
||||
/// Erzeugt eine geklonte Instanz mit einer isolierten aktiven Session (Slot & DEK).
|
||||
pub fn with_session(&self, slot_id: u32, dek: Zeroizing<[u8; 32]>) -> Self {
|
||||
Self {
|
||||
|
||||
Reference in New Issue
Block a user