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
100
101
102
103
104
105
106
107
108
use std::process::Command;
use enquote;
use std::error::Error;
use clokwerk::{Scheduler, TimeUnits};
use std::thread;
use std::time::Duration;
use toml;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct Config {
pub times : Vec<String>,
pub walls : Vec<String>,
pub fixed : bool,
}
pub fn get_wallpaper() -> Result<String, Box<dyn Error>>{
let op = Command::new("dconf")
.arg("read")
.arg("/org/cinnamon/desktop/background/picture-uri")
.output()?;
return Ok(enquote::unquote(String::from_utf8(op.stdout)?.trim().into())?)
}
pub fn get_envt() -> Result<String, Box<dyn Error>> {
Ok(std::env::var("XDG_CURRENT_DESKTOP")?)
}
pub fn set_paper (path : &str) -> Result<(), &'static str> {
let path = enquote::enquote('"', &format!("{}", path));
match Command::new("dconf")
.args(&["write", "/org/cinnamon/desktop/background/picture-uri",&path])
.output() {
Ok(_) => Ok(()),
Err(_) => Err("Error changing paper"),
}
}
pub fn set_times () {
let config = get_config("/home/vineet/Desktop/Dev/awstools/times.toml");
let walls = config.walls;
let times = config.times;
let mut scheduler = Scheduler::new();
for (i, time) in times.into_iter().enumerate() {
let wall = walls[i].clone();
scheduler.every(1.day()).at(&time).run(move|| set_paper(&wall).unwrap());
}
loop {
scheduler.run_pending();
thread::sleep(Duration::from_millis(600000));
}
}
pub fn get_config(path : &str) -> Config {
let toml_file = std::fs::read_to_string(path).unwrap();
let toml_data : Config = toml::from_str(&toml_file).unwrap();
toml_data
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_envt() {
assert!(get_envt().is_ok());
}
#[test]
fn test_get_wallpaper() {
assert!(get_wallpaper().is_ok());
}
#[test]
fn test_set_wallpaper() {
let path = "file:///home/vineet/Desktop/69561.jpg";
assert!(set_paper(path).is_ok());
}
}