gitlab_tracker_notify/
lib.rs1#[cfg(feature = "desktop")]
14fn show_with_url(notification: notify_rust::Notification, url: String) {
15 if let Ok(handle) = notification.show() {
16 std::thread::spawn(move || {
17 handle.wait_for_action(|action| {
18 if action == "default" {
19 let _ = open::that(&url);
20 }
21 });
22 });
23 }
24}
25
26#[cfg(feature = "desktop")]
30pub fn mr_on_new_branch(mr_id: &str, title: &str, branch: &str, web_url: &str) {
31 let notification = notify_rust::Notification::new()
32 .summary("GitLab MR Tracker")
33 .body(&format!(
34 "MR !{} ({}) is now present on branch '{}'!",
35 mr_id, title, branch
36 ))
37 .icon("dialog-information")
38 .action("default", "Open MR")
39 .finalize();
40 show_with_url(notification, web_url.to_owned());
41}
42
43#[cfg(feature = "desktop")]
45pub fn mr_updated(mr_id: &str, title: &str, updated_at: Option<&str>, web_url: &str) {
46 let notification = notify_rust::Notification::new()
47 .summary(&format!("MR !{} updated", mr_id))
48 .body(&format!(
49 "{}\n{}",
50 title,
51 updated_at.unwrap_or("unknown date")
52 ))
53 .icon("dialog-information")
54 .action("default", "Open MR")
55 .finalize();
56 show_with_url(notification, web_url.to_owned());
57}
58
59#[cfg(feature = "desktop")]
62pub fn mr_mergeability_changed(mr_id: &str, title: &str, old: &str, new: &str, web_url: &str) {
63 let notification = notify_rust::Notification::new()
64 .summary(&format!("MR !{} — mergeability changed", mr_id))
65 .body(&format!("{}\n{} → {}", title, old, new))
66 .icon("dialog-warning")
67 .action("default", "Open MR")
68 .finalize();
69 show_with_url(notification, web_url.to_owned());
70}
71
72#[cfg(feature = "desktop")]
78pub fn mr_complexity_changed(mr_id: &str, title: &str, old: &str, new: &str, web_url: &str) {
79 let notification = notify_rust::Notification::new()
80 .summary(&format!("MR !{} — complexity changed", mr_id))
81 .body(&format!("{}\n{} → {}", title, old, new))
82 .icon("dialog-warning")
83 .action("default", "Open MR")
84 .finalize();
85 show_with_url(notification, web_url.to_owned());
86}
87
88#[cfg(feature = "desktop")]
90pub fn mr_milestone_changed(mr_id: &str, title: &str, old: &str, new: &str, web_url: &str) {
91 let notification = notify_rust::Notification::new()
92 .summary(&format!("MR !{} — milestone changed", mr_id))
93 .body(&format!("{}\n{} → {}", title, old, new))
94 .icon("dialog-information")
95 .action("default", "Open MR")
96 .finalize();
97 show_with_url(notification, web_url.to_owned());
98}
99
100#[cfg(feature = "desktop")]
115pub fn ticket_field_changed(
116 ticket_id: &str,
117 mr_title: &str,
118 field: &str,
119 old: &str,
120 new: &str,
121 ticket_url: &str,
122) {
123 let icon = if field == "priority" || field == "effort" {
124 "dialog-warning"
125 } else {
126 "dialog-information"
127 };
128 let notification = notify_rust::Notification::new()
129 .summary(&format!("Ticket #{} — {} changed", ticket_id, field))
130 .body(&format!("{}\n{} → {}", mr_title, old, new))
131 .icon(icon)
132 .action("default", "Open ticket")
133 .finalize();
134 show_with_url(notification, ticket_url.to_owned());
135}
136
137#[cfg(not(feature = "desktop"))]
140#[inline(always)]
141pub fn mr_on_new_branch(_mr_id: &str, _title: &str, _branch: &str, _web_url: &str) {}
142
143#[cfg(not(feature = "desktop"))]
144#[inline(always)]
145pub fn mr_updated(_mr_id: &str, _title: &str, _updated_at: Option<&str>, _web_url: &str) {}
146
147#[cfg(not(feature = "desktop"))]
148#[inline(always)]
149pub fn mr_mergeability_changed(_mr_id: &str, _title: &str, _old: &str, _new: &str, _web_url: &str) {
150}
151
152#[cfg(not(feature = "desktop"))]
153#[inline(always)]
154pub fn mr_complexity_changed(_mr_id: &str, _title: &str, _old: &str, _new: &str, _web_url: &str) {}
155
156#[cfg(not(feature = "desktop"))]
157#[inline(always)]
158pub fn mr_milestone_changed(_mr_id: &str, _title: &str, _old: &str, _new: &str, _web_url: &str) {}
159
160#[cfg(not(feature = "desktop"))]
161#[inline(always)]
162pub fn ticket_field_changed(
163 _ticket_id: &str,
164 _mr_title: &str,
165 _field: &str,
166 _old: &str,
167 _new: &str,
168 _ticket_url: &str,
169) {
170}