Skip to content

Commit 0b4f160

Browse files
committed
Minor improvements
1 parent 8f9c9d4 commit 0b4f160

File tree

2 files changed

+100
-91
lines changed

2 files changed

+100
-91
lines changed

backlightd/src/main.rs

Lines changed: 87 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ use std::{
88
},
99
process::exit,
1010
sync::mpsc::{channel, Sender},
11-
thread,
11+
thread::{self, sleep},
12+
time::Duration,
1213
};
1314

14-
use anyhow::bail;
15+
use anyhow::{anyhow, bail};
1516
use auto::auto_adjust;
1617
use backlight_ipc::{BacklightCommand, BacklightInfo, BacklightMode, DEFAULT_UNIX_SOCKET_PATH};
1718
use monitors::auto_refresh_monitors_list;
@@ -22,6 +23,90 @@ mod ddc;
2223
mod location;
2324
mod monitors;
2425

26+
fn main() {
27+
pretty_env_logger::formatted_builder()
28+
.filter_level(log::LevelFilter::Info)
29+
.parse_env("BACKLIGHTD_LOG_LEVEL")
30+
.filter_module("ureq", log::LevelFilter::Warn)
31+
.init();
32+
33+
let args: Vec<String> = env::args().collect();
34+
35+
if args.len() != 1 && args.len() != 3 {
36+
eprintln!(
37+
"Usage: {} (optional: --unix-socket-path {DEFAULT_UNIX_SOCKET_PATH})",
38+
args[0]
39+
);
40+
exit(1);
41+
}
42+
43+
let unix_socket_path = if args.len() == 3 {
44+
args[2].as_str()
45+
} else {
46+
DEFAULT_UNIX_SOCKET_PATH
47+
};
48+
49+
let listener = match create_unix_socket(unix_socket_path) {
50+
Ok(listener) => listener,
51+
Err(err) => {
52+
log::error!("{unix_socket_path}: {err}");
53+
exit(1);
54+
}
55+
};
56+
57+
let (auto_sender, auto_receiver) = channel();
58+
59+
let auto_refresh_monitors_thread = thread::spawn(move || auto_refresh_monitors_list());
60+
let auto_adjust_thread = thread::spawn(move || auto_adjust(auto_receiver));
61+
let handle_clients_thread = thread::spawn(move || handle_clients_thread(listener, auto_sender));
62+
63+
loop {
64+
if auto_refresh_monitors_thread.is_finished() {
65+
panic!("auto refresh monitors thread is gone");
66+
}
67+
68+
if auto_adjust_thread.is_finished() {
69+
panic!("auto adjust thread is gone");
70+
}
71+
72+
if handle_clients_thread.is_finished() {
73+
panic!("handle_clients_thread thread is gone");
74+
}
75+
76+
sleep(Duration::from_secs(5));
77+
}
78+
}
79+
80+
fn handle_clients_thread(listener: UnixListener, auto_adjust_sender: Sender<BacklightMode>) {
81+
for stream in listener.incoming() {
82+
let client = match stream {
83+
Ok(client) => client,
84+
Err(err) => {
85+
log::error!("Failed to accept incoming client: {err}");
86+
continue;
87+
}
88+
};
89+
90+
if let Err(err) = handle_client(client, auto_adjust_sender.clone()) {
91+
log::error!("{err}");
92+
continue;
93+
}
94+
}
95+
}
96+
97+
fn create_unix_socket(unix_socket_path: &str) -> anyhow::Result<UnixListener> {
98+
if let Err(err) = remove_file(unix_socket_path) {
99+
if !matches!(err.kind(), io::ErrorKind::NotFound) {
100+
return Err(anyhow!(err));
101+
}
102+
}
103+
104+
let listener = UnixListener::bind(unix_socket_path)?;
105+
fs::set_permissions(unix_socket_path, fs::Permissions::from_mode(0o777))?;
106+
107+
Ok(listener)
108+
}
109+
25110
fn handle_client(
26111
client: UnixStream,
27112
auto_adjust_sender: Sender<BacklightMode>,
@@ -85,77 +170,3 @@ fn handle_client(
85170

86171
Ok(())
87172
}
88-
89-
fn main() {
90-
pretty_env_logger::formatted_builder()
91-
.filter_level(log::LevelFilter::Info)
92-
.parse_env("BACKLIGHTD_LOG_LEVEL")
93-
.filter_module("ureq", log::LevelFilter::Warn)
94-
.init();
95-
96-
let args: Vec<String> = env::args().collect();
97-
98-
if args.len() != 1 && args.len() != 3 {
99-
eprintln!(
100-
"Usage: {} (optional: --unix-socket-path {DEFAULT_UNIX_SOCKET_PATH})",
101-
args[0]
102-
);
103-
exit(1);
104-
}
105-
106-
let unix_socket_path = if args.len() == 3 {
107-
args[2].as_str()
108-
} else {
109-
DEFAULT_UNIX_SOCKET_PATH
110-
};
111-
112-
if let Err(err) = remove_file(unix_socket_path) {
113-
if !matches!(err.kind(), io::ErrorKind::NotFound) {
114-
log::error!("{unix_socket_path}: {err}");
115-
exit(1);
116-
}
117-
}
118-
119-
let listener = match UnixListener::bind(unix_socket_path) {
120-
Ok(listener) => listener,
121-
Err(err) => {
122-
log::error!("{unix_socket_path}: {err}");
123-
exit(1);
124-
}
125-
};
126-
127-
if let Err(err) = fs::set_permissions(unix_socket_path, fs::Permissions::from_mode(0o777)) {
128-
log::error!("{unix_socket_path}: {err}");
129-
exit(1);
130-
}
131-
132-
let (auto_sender, auto_receiver) = channel();
133-
134-
let auto_refresh_monitors_thread = thread::spawn(move || auto_refresh_monitors_list());
135-
let auto_adjust_thread = thread::spawn(move || auto_adjust(auto_receiver));
136-
137-
for stream in listener.incoming() {
138-
if auto_refresh_monitors_thread.is_finished() {
139-
panic!("auto refresh monitors thread is gone");
140-
}
141-
142-
if auto_adjust_thread.is_finished() {
143-
panic!("auto adjust thread is gone");
144-
}
145-
146-
let client = match stream {
147-
Ok(client) => client,
148-
Err(err) => {
149-
log::error!("Failed to accept incoming client: {err}");
150-
continue;
151-
}
152-
};
153-
154-
if let Err(err) = handle_client(client, auto_sender.clone()) {
155-
log::error!("{err}");
156-
continue;
157-
}
158-
}
159-
160-
unreachable!()
161-
}

backlightd/src/monitors.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ use std::{
55
time::{Duration, Instant},
66
};
77

8-
use log::{error, info};
9-
108
use crate::acpi::{BacklightAcpiDevice, ACPI_DEVICES_PATH};
119
use crate::ddc::BacklightDdcDevice;
1210

@@ -54,7 +52,7 @@ pub(crate) fn refresh_monitors_list() {
5452
for ddc_device in ddc_hi::Display::enumerate() {
5553
match BacklightDdcDevice::new(ddc_device) {
5654
Ok(monitor) => new_monitors.push(Box::new(monitor)),
57-
Err(err) => error!("Failed to retrieve DDC backlight monitor: {err}"),
55+
Err(err) => log::error!("Failed to retrieve DDC backlight monitor: {err}"),
5856
}
5957
}
6058

@@ -64,16 +62,16 @@ pub(crate) fn refresh_monitors_list() {
6462
match entry {
6563
Ok(file) => match BacklightAcpiDevice::new(file.path()) {
6664
Ok(monitor) => new_monitors.push(Box::new(monitor)),
67-
Err(err) => error!("Failed to retrieve ACPI backlight monitor: {err}"),
65+
Err(err) => log::error!("Failed to retrieve ACPI backlight monitor: {err}"),
6866
},
6967
Err(err) => {
70-
error!("Unable to read entry from {ACPI_DEVICES_PATH}: {err}");
68+
log::error!("Unable to read entry from {ACPI_DEVICES_PATH}: {err}");
7169
}
7270
}
7371
}
7472
}
7573
Err(err) => {
76-
error!("{ACPI_DEVICES_PATH}: {err}");
74+
log::error!("{ACPI_DEVICES_PATH}: {err}");
7775
// fallthrough
7876
}
7977
}
@@ -94,17 +92,17 @@ pub(crate) fn set_brightness_percent(percent: u8) -> anyhow::Result<()> {
9492
let res = monitor.set_brightness(percent);
9593

9694
if let Err(err) = res {
97-
error!("Unable to set brightness of {}", monitor.name());
95+
log::error!("Unable to set brightness of {}", monitor.name());
9896
last_error = Some(err);
9997
}
10098
}
10199

102100
if let Some(err) = last_error {
103-
info!("Trying to refresh monitors list to fix the error...");
101+
log::info!("Trying to refresh monitors list to fix the error...");
104102
refresh_monitors_list();
105103
Err(err)
106104
} else {
107-
info!("Brightness of all monitors has been set to {percent}%");
105+
log::info!("Brightness of all monitors has been set to {percent}%");
108106
Ok(())
109107
}
110108
}
@@ -122,17 +120,17 @@ pub(crate) fn increase_brightness_percent(percent: u8) -> anyhow::Result<()> {
122120
let res = monitor.set_brightness(new_brightness);
123121

124122
if let Err(err) = res {
125-
error!("Unable to set brightness of {}", monitor.name());
123+
log::error!("Unable to set brightness of {}", monitor.name());
126124
last_error = Some(err);
127125
}
128126
}
129127

130128
if let Some(err) = last_error {
131-
info!("Trying to refresh monitors list to fix the error...");
129+
log::info!("Trying to refresh monitors list to fix the error...");
132130
refresh_monitors_list();
133131
Err(err)
134132
} else {
135-
info!("Brightness of all monitors has been set to {percent}%");
133+
log::info!("Brightness of all monitors has been set to {percent}%");
136134
Ok(())
137135
}
138136
}
@@ -151,17 +149,17 @@ pub(crate) fn decrease_brightness_percent(percent: u8) -> anyhow::Result<()> {
151149
let res = monitor.set_brightness(new_brightness as u8);
152150

153151
if let Err(err) = res {
154-
error!("Unable to set brightness of {}: {err}", monitor.name());
152+
log::error!("Unable to set brightness of {}: {err}", monitor.name());
155153
last_error = Some(err);
156154
}
157155
}
158156

159157
if let Some(err) = last_error {
160-
info!("Trying to refresh monitors list to fix the error...");
158+
log::info!("Trying to refresh monitors list to fix the error...");
161159
refresh_monitors_list();
162160
Err(err)
163161
} else {
164-
info!("Brightness of all monitors has been set to {percent}%");
162+
log::info!("Brightness of all monitors has been set to {percent}%");
165163
Ok(())
166164
}
167165
}

0 commit comments

Comments
 (0)