1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/*
This file is part of jellything (https://codeberg.org/metamuffin/jellything)
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
use crate::{jhls::EncodingProfile, user::PermissionSet};
use serde::{Deserialize, Serialize};
use std::{collections::HashMap, path::PathBuf};
#[rustfmt::skip]
#[derive(Debug, Deserialize, Serialize, Default)]
pub struct GlobalConfig {
pub hostname: String,
pub brand: String,
pub slogan: String,
#[serde(default = "default::asset_path")] pub asset_path: PathBuf,
#[serde(default = "default::database_path")] pub database_path: PathBuf,
#[serde(default = "default::library_path")] pub library_path: PathBuf,
#[serde(default = "default::temp_path")] pub temp_path: PathBuf,
#[serde(default = "default::cache_path")] pub cache_path: PathBuf,
#[serde(default = "default::admin_username")] pub admin_username: String,
#[serde(default = "default::transcoding_profiles")] pub transcoding_profiles: Vec<EncodingProfile>,
#[serde(default = "default::max_in_memory_cache_size")] pub max_in_memory_cache_size: usize,
pub admin_password: String,
#[serde(default)] pub cookie_key: Option<String>,
#[serde(default)] pub session_key: Option<String>,
#[serde(default = "default::login_expire")] pub login_expire: i64,
#[serde(default)] pub remote_credentials: HashMap<String, (String, String, bool)>,
#[serde(default)] pub default_permission_set: PermissionSet,
}
mod default {
use std::path::PathBuf;
use crate::jhls::EncodingProfile;
pub fn admin_username() -> String {
"admin".into()
}
pub fn login_expire() -> i64 {
60 * 60 * 24
}
pub fn asset_path() -> PathBuf {
"data/assets".into()
}
pub fn database_path() -> PathBuf {
"data/database".into()
}
pub fn library_path() -> PathBuf {
"data/library".into()
}
pub fn cache_path() -> PathBuf {
"data/cache".into()
}
pub fn temp_path() -> PathBuf {
"/tmp".into()
}
pub fn max_in_memory_cache_size() -> usize {
50_000_000
}
pub fn transcoding_profiles() -> Vec<EncodingProfile> {
vec![
EncodingProfile::Video {
codec: "libsvtav1".to_string(),
preset: Some(8),
bitrate: 2_000_000,
width: Some(1920),
},
EncodingProfile::Video {
codec: "libsvtav1".to_string(),
preset: Some(8),
bitrate: 1_200_000,
width: Some(1280),
},
EncodingProfile::Video {
codec: "libsvtav1".to_string(),
preset: Some(8),
bitrate: 300_000,
width: Some(640),
},
EncodingProfile::Audio {
codec: "libopus".to_string(),
bitrate: 128_000,
sample_rate: None,
channels: Some(2),
},
EncodingProfile::Audio {
codec: "libopus".to_string(),
bitrate: 64_000,
sample_rate: None,
channels: Some(2),
},
EncodingProfile::Subtitles {
codec: "webvtt".to_string(),
},
]
}
}
|