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

use cyfs_base::*;

#[derive(Clone, Debug)]
pub struct ChunkDownloadConfig {
    pub prefer_source: DeviceId, 
    pub force_stream: bool, 
    pub second_source: Option<DeviceId>, 
    pub more_source: Vec<DeviceId>, 
    pub referer: Option<String>
}

impl ChunkDownloadConfig {
    pub fn force_stream(source: DeviceId) -> Self {
        Self {
            prefer_source: source, 
            force_stream: true, 
            second_source: None, 
            more_source: vec![],
	        referer: None
        }
    }

    pub fn from(source: Vec<DeviceId>) -> Self {
        let prefer_source = source[0].clone();
        let second_source = if source.len() == 2 {
            let src = source[1].clone();
            if src.eq(&prefer_source) {
                None
            } else {
                Some(src)
            }
        } else {
            None
        };
        let more_source = if source.len() > 2 {
            Vec::from(&source[1..])
        } else {
            vec![]
        };
        let force_stream = {
            if second_source.is_some() || more_source.len() > 0 {
                false
            } else {
                true
            }
        };

        ChunkDownloadConfig {
            prefer_source,
            force_stream,
            second_source,
            more_source,
            referer: None,
        }
    }
}