Skip to main content

cloudillo_file/
settings.rs

1//! File storage settings registration
2
3use crate::prelude::*;
4use cloudillo_core::settings::types::{
5	PermissionLevel, SettingDefinition, SettingScope, SettingValue, SettingsRegistry,
6};
7
8/// Register all file and storage settings
9pub fn register_settings(registry: &mut SettingsRegistry) -> ClResult<()> {
10	// Max file size
11	registry.register(
12		SettingDefinition::builder("file.max_file_size_mb")
13			.description("Maximum file upload size in megabytes")
14			.default(SettingValue::Int(100))
15			.scope(SettingScope::Global)
16			.permission(PermissionLevel::Admin)
17			.build()?,
18	)?;
19
20	// Maximum size variant to generate
21	registry.register(
22		SettingDefinition::builder("file.max_generate_variant")
23			.description("Maximum size variant to generate: tn, sd (720), md (1280), hd (1920), or xd (3840)")
24			.default(SettingValue::String("hd".into()))
25			.scope(SettingScope::Global)
26			.permission(PermissionLevel::Admin)
27			.build()?
28	)?;
29
30	// Maximum size variant to download for caching
31	registry.register(
32		SettingDefinition::builder("file.max_cache_variant")
33			.description("Maximum size variant to download when caching attachments: tn, sd (720), md (1280), hd (1920), or xd (3840)")
34			.default(SettingValue::String("md".into()))
35			.scope(SettingScope::Global)
36			.permission(PermissionLevel::Admin)
37			.build()?
38	)?;
39
40	// Per-class sync settings for action attachments
41	registry.register(
42		SettingDefinition::builder("file.sync_max_vis")
43			.description("Maximum visual variant to sync: tn, sd, md, hd, xd")
44			.default(SettingValue::String("md".into()))
45			.scope(SettingScope::Tenant)
46			.permission(PermissionLevel::User)
47			.build()?,
48	)?;
49
50	registry.register(
51		SettingDefinition::builder("file.sync_max_vid")
52			.description("Maximum video variant to sync: tn, sd, md, hd, xd")
53			.default(SettingValue::String("sd".into()))
54			.scope(SettingScope::Tenant)
55			.permission(PermissionLevel::User)
56			.build()?,
57	)?;
58
59	registry.register(
60		SettingDefinition::builder("file.sync_max_aud")
61			.description("Maximum audio variant to sync: sd, md, hd")
62			.default(SettingValue::String("md".into()))
63			.scope(SettingScope::Tenant)
64			.permission(PermissionLevel::User)
65			.build()?,
66	)?;
67
68	// Image format for thumbnails
69	registry.register(
70		SettingDefinition::builder("file.thumbnail_format")
71			.description("Image format for thumbnails: avif, webp, jpeg, or png")
72			.default(SettingValue::String("webp".into()))
73			.scope(SettingScope::Global)
74			.permission(PermissionLevel::Admin)
75			.build()?,
76	)?;
77
78	// Image format for larger variants
79	registry.register(
80		SettingDefinition::builder("file.image_format")
81			.description(
82				"Image format for larger variants (sd, md, hd, xd): avif, webp, jpeg, or png",
83			)
84			.default(SettingValue::String("webp".into()))
85			.scope(SettingScope::Global)
86			.permission(PermissionLevel::Admin)
87			.build()?,
88	)?;
89
90	// Storage quota
91	registry.register(
92		SettingDefinition::builder("limits.max_storage_gb")
93			.description("Maximum storage quota in gigabytes")
94			.default(SettingValue::Int(100))
95			.scope(SettingScope::Tenant)
96			.permission(PermissionLevel::Admin)
97			.build()?,
98	)?;
99
100	Ok(())
101}
102
103// vim: ts=4