mirror of
https://github.com/MeexReay/bRAC.git
synced 2025-05-06 05:28:02 +03:00
notifications
This commit is contained in:
parent
18dabe1146
commit
f08f97f267
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
/target
|
/target
|
||||||
/result
|
/result
|
||||||
/build
|
/build
|
||||||
/config.yml
|
/config.yml
|
||||||
|
/bRAC
|
5
Makefile
5
Makefile
@ -16,12 +16,17 @@ build/windows-x86_64:
|
|||||||
mv $@/bin/* $@/
|
mv $@/bin/* $@/
|
||||||
cp target/x86_64-pc-windows-gnu/release/bRAC.exe $@
|
cp target/x86_64-pc-windows-gnu/release/bRAC.exe $@
|
||||||
rm -r $@/bin
|
rm -r $@/bin
|
||||||
|
# TODO: disable console
|
||||||
|
# TODO: set icon
|
||||||
|
|
||||||
build/linux-x86_64:
|
build/linux-x86_64:
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
mkdir -p $@
|
mkdir -p $@
|
||||||
cargo build -r --target x86_64-unknown-linux-gnu
|
cargo build -r --target x86_64-unknown-linux-gnu
|
||||||
|
# patchbin target/x86_64-unknown-linux-gnu/release/bRAC
|
||||||
cp target/x86_64-unknown-linux-gnu/release/bRAC $@
|
cp target/x86_64-unknown-linux-gnu/release/bRAC $@
|
||||||
|
cp bRAC.png $@
|
||||||
|
cp bRAC.desktop $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -r build
|
rm -r build
|
12
bRAC.desktop
Normal file
12
bRAC.desktop
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=bRAC
|
||||||
|
Version=0.1.4
|
||||||
|
Type=Application
|
||||||
|
Comment=better RAC client
|
||||||
|
Icon=bRAC.png
|
||||||
|
Exec=bRAC
|
||||||
|
Categories=Network;
|
||||||
|
StartupNotify=true
|
||||||
|
DBusActivatable=true
|
||||||
|
Terminal=false
|
||||||
|
X-GNOME-UsesNotifications=true
|
@ -5,7 +5,7 @@ use std::thread;
|
|||||||
|
|
||||||
use chrono::Local;
|
use chrono::Local;
|
||||||
|
|
||||||
use gtk4::{self as gtk, glib::timeout_add_once};
|
use gtk4::{self as gtk, gio::Notification, glib::timeout_add_once};
|
||||||
|
|
||||||
use gtk::prelude::*;
|
use gtk::prelude::*;
|
||||||
use gtk::gdk::{Cursor, Display, Texture};
|
use gtk::gdk::{Cursor, Display, Texture};
|
||||||
@ -30,7 +30,8 @@ ctx::Context, on_send_message, parse_message, print_message, recv_tick, sanitize
|
|||||||
|
|
||||||
struct UiModel {
|
struct UiModel {
|
||||||
chat_box: GtkBox,
|
chat_box: GtkBox,
|
||||||
chat_scrolled: ScrolledWindow
|
chat_scrolled: ScrolledWindow,
|
||||||
|
app: Application
|
||||||
}
|
}
|
||||||
|
|
||||||
thread_local!(
|
thread_local!(
|
||||||
@ -583,11 +584,12 @@ fn build_ui(ctx: Arc<Context>, app: &Application) -> UiModel {
|
|||||||
|
|
||||||
UiModel {
|
UiModel {
|
||||||
chat_scrolled,
|
chat_scrolled,
|
||||||
chat_box
|
chat_box,
|
||||||
|
app: app.clone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(ctx: Arc<Context>, ui: UiModel) {
|
fn setup(app: &Application, ctx: Arc<Context>, ui: UiModel) {
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
|
|
||||||
*ctx.sender.write().unwrap() = Some(Arc::new(sender));
|
*ctx.sender.write().unwrap() = Some(Arc::new(sender));
|
||||||
@ -652,6 +654,8 @@ fn load_css() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
||||||
|
let app = ui.app.clone();
|
||||||
|
|
||||||
let Some(message) = sanitize_message(message) else { return; };
|
let Some(message) = sanitize_message(message) else { return; };
|
||||||
|
|
||||||
if message.is_empty() {
|
if message.is_empty() {
|
||||||
@ -663,8 +667,8 @@ fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
|||||||
if let Some((date, ip, content, nick)) = parse_message(message.clone()) {
|
if let Some((date, ip, content, nick)) = parse_message(message.clone()) {
|
||||||
if let Some(ip) = ip {
|
if let Some(ip) = ip {
|
||||||
if ctx.config(|o| o.show_other_ip) {
|
if ctx.config(|o| o.show_other_ip) {
|
||||||
let ip = Label::builder()
|
let ip_label = Label::builder()
|
||||||
.label(ip)
|
.label(&ip)
|
||||||
.margin_end(10)
|
.margin_end(10)
|
||||||
.halign(Align::Start)
|
.halign(Align::Start)
|
||||||
.valign(Align::Start)
|
.valign(Align::Start)
|
||||||
@ -672,11 +676,11 @@ fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
|||||||
.selectable(true)
|
.selectable(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
hbox.append(&ip);
|
hbox.append(&ip_label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let date = Label::builder()
|
let date_label = Label::builder()
|
||||||
.label(format!("[{date}]"))
|
.label(format!("[{date}]"))
|
||||||
.halign(Align::Start)
|
.halign(Align::Start)
|
||||||
.valign(Align::Start)
|
.valign(Align::Start)
|
||||||
@ -684,10 +688,10 @@ fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
|||||||
.selectable(true)
|
.selectable(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
hbox.append(&date);
|
hbox.append(&date_label);
|
||||||
|
|
||||||
if let Some((name, color)) = nick {
|
if let Some((name, color)) = nick {
|
||||||
let name = Label::builder()
|
let name_label = Label::builder()
|
||||||
.label(format!("<{name}>"))
|
.label(format!("<{name}>"))
|
||||||
.halign(Align::Start)
|
.halign(Align::Start)
|
||||||
.valign(Align::Start)
|
.valign(Align::Start)
|
||||||
@ -695,11 +699,27 @@ fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
|||||||
.selectable(true)
|
.selectable(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
hbox.append(&name);
|
hbox.append(&name_label);
|
||||||
|
|
||||||
|
if !app.windows()[0].is_active() {
|
||||||
|
if ctx.config(|o| o.chunked_enabled) {
|
||||||
|
let notif = Notification::new(&format!("{}'s Message", &name));
|
||||||
|
notif.set_body(Some(&content));
|
||||||
|
app.send_notification(Some("user-message"), ¬if);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if !app.windows()[0].is_active() {
|
||||||
|
if ctx.config(|o| o.chunked_enabled) {
|
||||||
|
let notif = Notification::new("System Message");
|
||||||
|
notif.set_body(Some(&content));
|
||||||
|
app.send_notification(Some("system-message"), ¬if);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let content = Label::builder()
|
let content_label = Label::builder()
|
||||||
.label(content)
|
.label(&content)
|
||||||
.halign(Align::Start)
|
.halign(Align::Start)
|
||||||
.valign(Align::Start)
|
.valign(Align::Start)
|
||||||
.css_classes(["message-content"])
|
.css_classes(["message-content"])
|
||||||
@ -708,10 +728,11 @@ fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
|||||||
.wrap_mode(WrapMode::Char)
|
.wrap_mode(WrapMode::Char)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
hbox.append(&content);
|
hbox.append(&content_label);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
let content = Label::builder()
|
let content_label = Label::builder()
|
||||||
.label(message)
|
.label(&message)
|
||||||
.halign(Align::Start)
|
.halign(Align::Start)
|
||||||
.valign(Align::Start)
|
.valign(Align::Start)
|
||||||
.css_classes(["message-content"])
|
.css_classes(["message-content"])
|
||||||
@ -720,7 +741,15 @@ fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String) {
|
|||||||
.wrap_mode(WrapMode::Char)
|
.wrap_mode(WrapMode::Char)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
hbox.append(&content);
|
hbox.append(&content_label);
|
||||||
|
|
||||||
|
if !app.windows()[0].is_active() {
|
||||||
|
if ctx.config(|o| o.chunked_enabled) {
|
||||||
|
let notif = Notification::new("Chat Message");
|
||||||
|
notif.set_body(Some(&message));
|
||||||
|
app.send_notification(Some("chat-message"), ¬if);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.chat_box.append(&hbox);
|
ui.chat_box.append(&hbox);
|
||||||
@ -757,7 +786,7 @@ pub fn run_main_loop(ctx: Arc<Context>) {
|
|||||||
|
|
||||||
move |app| {
|
move |app| {
|
||||||
let ui = build_ui(ctx.clone(), app);
|
let ui = build_ui(ctx.clone(), app);
|
||||||
setup(ctx.clone(), ui);
|
setup(app, ctx.clone(), ui);
|
||||||
load_css();
|
load_css();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user