Compare commits

..

No commits in common. "a102d0d2600fab849ada593d6f1c9c6a0036be57" and "23d8ebffb537f524dc88879f04da7731f7406a41" have entirely different histories.

7 changed files with 40 additions and 837 deletions

769
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -17,7 +17,6 @@ chrono = "0.4.40"
serde_default = "0.2.0"
socks = "0.3.4"
libnotify = { version = "1.0.3", optional = true }
notify-rust = { version = "4.11.7", optional = true }
gdk-pixbuf = { version = "0.3.0", optional = true } # DO NOT UPDATE
winapi = { version = "0.3.9", optional = true, features = ["wincon", "winuser"] }
tungstenite = "0.27.0"
@ -25,7 +24,6 @@ tungstenite = "0.27.0"
[features]
default = []
libnotify = ["dep:libnotify", "dep:gdk-pixbuf"]
notify-rust = ["dep:notify-rust"]
winapi = ["dep:winapi"]
[build-dependencies]

View File

@ -13,12 +13,13 @@ better RAC client
- RACv1.99.x and RACv2.0 compatible
- WRAC compatible ([docs](docs/wrac.md))
- chat commands (type /help)
- no ip and date visible for anyone (almost)
- coloring usernames by their clients (CRAB, clRAC, Mefidroniy, etc.)
- many command-line options (see --help)
- rich configuration (--config-path to get file path)
- RACS/WRACS compatible (ex: wracs://meex.lol)
- reading messages chunked (less traffic usage)
- no ip and date visible for anyone
- uses TOR proxy server by default (meex.lol:11234)
- coloring usernames by their clients (CRAB, clRAC, Mefidroniy, etc)
- many command-line options (--help)
- rich configuration (--config-path to get file path and --configure to edit)
- RACS compatible (--enable-ssl or in --configure enable SSL)
- chunked reading messages
![screenshot](misc/image.png)
@ -89,7 +90,6 @@ messages starting with a slash are sent to chat only if the `--disable-commands`
- [User agents](docs/user_agents.md)
- [Authenticated mode](docs/auth_mode.md)
- [WRAC protocol (v2.0)](docs/wrac.md)
- [About RAC URL](docs/url.md)
- [FAQ](docs/faq.md)
## see also

View File

@ -4,16 +4,17 @@
1. Install [rustup](https://rustup.rs/)
2. Install [MSVC](https://visualstudio.microsoft.com/visual-cpp-build-tools/) and run `rustup default stable-msvc`
3. Extract [GTK4 from gvsbuild](https://github.com/wingtk/gvsbuild/releases/latest) to `C:\gtk`
3. Extract [GTK4 from gvsbuild](https://github.com/wingtk/gvsbuild/releases/tag/latest) to `C:\gtk`
4. Update environment variables:
- Go to Start, search for 'Advanced system settings' (or click on Properties of My Computer in the Explorer, then you'll find 'Advanced system settings')
- Go to Start
- Search for 'Advanced system settings'
- Click 'Environment Variables...'
- Add `C:\gtk\lib\pkgconfig` to the PKG_CONFIG_PATH variable (or create one if doesnt exist)
- Add `C:\gtk\bin` to the PATH variable (or create one if doesnt exist)
- Add `C:\gtk\lib` to the Lib variable (or create one if doesnt exist)
- Apply and close the window (maybe restart PC)
- Add `C:\gtk\lib\pkgconfig` to the PKG_CONFIG_PATH variable
- Add `C:\gtk\bin` to the PATH variable
- Add `C:\gtk\lib` to the Lib variable
- Save and exit
5. Open the repository directory in console (download it from github or with `git clone https://github.com/MeexReay/bRAC.git`)
6. Run `cargo build -r -F winapi,notify-rust`
6. Run `cargo build -r -F libnotify winapi`
7. Done! Your finished binary is in the `target/release` folder.
## Linux / MacOS
@ -25,36 +26,22 @@
# Troubleshooting
## Windows
## Windows / MacOS
### Black frame around the window
### Doesnt compile / doesnt work
Black frame appears on connecting to the server or when bRAC just freezes. Be patient.
## MacOS
### Notifications dont work
There are two solutions:
- Switch to `libnotify`:
Add the feature `libnotify` to cargo: `cargo build -r -F libnotify`
- Switch to `notify-rust`:
Add the feature `notify-rust` to cargo: `cargo build -r -F notify-rust`
Write a new issue here and dont google anything!!1
## Linux
### Notifications dont work
There are two solutions:
There are Two solutions:
- Switch to `libnotify`:
Just add the new feature to cargo: `cargo build -r -F libnotify` \
Libnotify sucks in many situations, but it always work
Libnotify sucks in many situations, but its cross-compiling and always work
- Make a desktop file:
@ -62,4 +49,4 @@ Enter the repository folder and run: `./misc/create-desktop.sh` \
You'll get a desktop file contents, just edit paths here and write it to a new file in the `~/.local/share/applications` or `/usr/share/applications`\
All of these, with adding icons and other, makes this command: `make install` (using `gnumake` package) \
But make sure, that you have `.local/bin` in the `PATH` variable, otherwise it won't work. \
Now, if you'll run with the desktop file, GNotifications will work perfectly.
Now, if you'll run with the desktop file, GNotifications will work perfectly.

View File

@ -1,16 +0,0 @@
# How does RAC URL work?
RAC URL is used in sRAC and bRAC as the default way of specifying host, running a RAC or WRAC server.
Format of RAC URL:
```
<protocol>://<address>[:<port>]
```
Protocol can be one of these:
| | **SSL** | **No SSL** |
| :--: | :--: | :--: |
| **WebSocket** | wracs:// | wrac:// |
| **No Websocket** | racs:// | rac:// |

View File

@ -22,7 +22,7 @@ pub fn default_konata_size() -> usize {
100
}
pub fn default_host() -> String {
"wracs://meex.lol".to_string()
"meex.lol:11234".to_string()
}
pub fn default_message_format() -> String {
MESSAGE_FORMAT.to_string()

View File

@ -41,7 +41,7 @@ struct UiModel {
window: ApplicationWindow,
#[cfg(feature = "libnotify")]
notifications: Arc<RwLock<Vec<libnotify::Notification>>>,
#[cfg(all(not(feature = "libnotify"), not(feature = "notify-rust")))]
#[cfg(not(feature = "libnotify"))]
notifications: Arc<RwLock<Vec<String>>>,
}
@ -777,7 +777,7 @@ fn build_ui(ctx: Arc<Context>, app: &Application) -> UiModel {
window: window.clone(),
#[cfg(feature = "libnotify")]
notifications: Arc::new(RwLock::new(Vec::<libnotify::Notification>::new())),
#[cfg(all(not(feature = "libnotify"), not(feature = "notify-rust")))]
#[cfg(not(feature = "libnotify"))]
notifications: Arc::new(RwLock::new(Vec::<String>::new())),
}
}
@ -805,7 +805,6 @@ fn setup(_: &Application, ctx: Arc<Context>, ui: UiModel) {
}
});
#[cfg(not(feature = "notify-rust"))]
GLOBAL.with(|global| {
if let Some(ui) = &*global.borrow() {
#[cfg(feature = "libnotify")]
@ -869,20 +868,6 @@ fn load_css(is_dark_theme: bool) {
);
}
#[cfg(feature = "notify-rust")]
fn send_notification(_: Arc<Context>, _: &UiModel, title: &str, message: &str) {
use notify_rust::{Notification, Timeout};
Notification::new()
.summary(title)
.body(message)
.auto_icon()
.appname("bRAC")
.timeout(Timeout::Default) // this however is
.show()
.expect("notify-rust send error");
}
#[cfg(feature = "libnotify")]
fn send_notification(_: Arc<Context>, ui: &UiModel, title: &str, message: &str) {
use libnotify::Notification;
@ -900,7 +885,7 @@ fn send_notification(_: Arc<Context>, ui: &UiModel, title: &str, message: &str)
ui.notifications.write().unwrap().push(notification);
}
#[cfg(all(not(feature = "libnotify"), not(feature = "notify-rust")))]
#[cfg(not(feature = "libnotify"))]
fn send_notification(_: Arc<Context>, ui: &UiModel, title: &str, message: &str) {
use std::{
hash::{DefaultHasher, Hasher},
@ -930,13 +915,7 @@ fn send_notification(_: Arc<Context>, ui: &UiModel, title: &str, message: &str)
}
fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String, notify: bool) {
let formatting_enabled = ctx.config(|c| c.formatting_enabled);
let Some(message) = (if formatting_enabled {
sanitize_message(message)
} else {
Some(message)
}) else {
let Some(message) = sanitize_message(message) else {
return;
};
@ -954,9 +933,7 @@ fn on_add_message(ctx: Arc<Context>, ui: &UiModel, message: String, notify: bool
let mut label = String::new();
if let (true, Some((date, ip, content, nick))) =
(formatting_enabled, parse_message(message.clone()))
{
if let Some((date, ip, content, nick)) = parse_message(message.clone()) {
if let Some(ip) = ip {
if ctx.config(|o| o.show_other_ip) {
label.push_str(&format!(