aboutsummaryrefslogtreecommitdiff
path: root/common/src/config.rs
blob: 399e96ac0b40f152233f3e561ddda3fe8882edb1 (plain)
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
/*
    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 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(),
            },
        ]
    }
}