Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
AmyrAhmady authored Nov 15, 2023
2 parents 26d7b81 + 68de3a9 commit 186d94b
Show file tree
Hide file tree
Showing 21 changed files with 1,462 additions and 197 deletions.
645 changes: 641 additions & 4 deletions src-tauri/Cargo.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ runas = "1.1.0"
sysinfo = "0.29.10"
simple-logging = "2.0.2"
log = "0.4.20"
charset-normalizer-rs = "1.0.6"

[target.'cfg(target_os = "windows")'.dependencies]
dll-syringe = "0.15.2"
Expand Down
48 changes: 34 additions & 14 deletions src-tauri/src/helpers.rs
Original file line number Diff line number Diff line change
@@ -1,30 +1,50 @@
use chardet::{charset2encoding, detect};
use charset_normalizer_rs::from_bytes;
use encoding::label::encoding_from_whatwg_label;
use encoding::DecoderTrap;

pub fn decode_buffer(buf: Vec<u8>) -> String {
let result = detect(&buf);
let mut str_encoding = charset2encoding(&result.0);
// let's just say it's cp1251 if encoding is not detected
// FIXME: find a way to actually detect cp1251 and cp1252 from together
pub fn decode_buffer(buf: Vec<u8>) -> (String, String, String) {
let buff_output: String;
let first_encoding: String;
let second_encoding: String;
let mut str_encoding: String;

if result.0 == "MacCyrillic"
|| (result.0 == "KOI8-R" && result.1 < 0.7 && result.2 == "Russian")
// chardet
first_encoding = charset2encoding(&detect(&buf).0).to_string();

// charset_normalizer_rs
second_encoding = match from_bytes(&buf, None).get_best() {
Some(cd) => cd.encoding().to_string(),
None => "not_found".to_string(),
};

str_encoding = first_encoding.clone();

if first_encoding == "KOI8-R"
|| first_encoding == "MacCyrillic"
|| first_encoding == "x-mac-cyrillic"
{
str_encoding = "cp1251";
str_encoding = "cp1251".to_string();
}

if str_encoding.len() < 1 {
str_encoding = "cp1251";
if second_encoding == "koi8-r" || second_encoding == "macintosh" || second_encoding == "ibm866"
{
str_encoding = "cp1251".to_string();
}

let coder = encoding_from_whatwg_label(str_encoding);
// if str_encoding.len() < 1 {
// str_encoding = "cp1251".to_string();
// }

let coder = encoding_from_whatwg_label(str_encoding.as_str());
if coder.is_some() {
coder
buff_output = coder
.unwrap()
.decode(&buf, DecoderTrap::Ignore)
.expect("Error")
.expect("Error");
} else {
String::from_utf8_lossy(buf.as_slice()).to_string()
buff_output = String::from_utf8_lossy(buf.as_slice()).to_string();
}

(buff_output, first_encoding, second_encoding)
}
4 changes: 2 additions & 2 deletions src-tauri/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@ async fn ping_server(ip: &str, port: i32) -> Result<u32, String> {
let before = Instant::now();
match q.recv().await {
Ok(_p) => Ok(before.elapsed().as_millis() as u32),
Err(_) => Ok(0),
Err(_) => Ok(9999),
}
}
Err(_) => Ok(0),
Err(_) => Ok(9999),
}
}

Expand Down
12 changes: 6 additions & 6 deletions src-tauri/src/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,17 +158,17 @@ impl Query {
let hostname_len = packet.read_u32::<LittleEndian>().unwrap();
let mut hostname_buf = vec![0u8; hostname_len as usize];
packet.read_exact(&mut hostname_buf).unwrap();
data.hostname = helpers::decode_buffer(hostname_buf);
data.hostname = helpers::decode_buffer(hostname_buf).0;

let gamemode_len = packet.read_u32::<LittleEndian>().unwrap();
let mut gamemode_buf = vec![0u8; gamemode_len as usize];
packet.read_exact(&mut gamemode_buf).unwrap();
data.gamemode = helpers::decode_buffer(gamemode_buf);
data.gamemode = helpers::decode_buffer(gamemode_buf).0;

let language_len = packet.read_u32::<LittleEndian>().unwrap();
let mut language_buf = vec![0u8; language_len as usize];
packet.read_exact(&mut language_buf).unwrap();
data.language = helpers::decode_buffer(language_buf);
data.language = helpers::decode_buffer(language_buf).0;

Ok(serde_json::to_string(&data).unwrap())
}
Expand All @@ -184,7 +184,7 @@ impl Query {
let player_name_len = packet.read_u8().unwrap();
let mut player_name_buf = vec![0u8; player_name_len as usize];
packet.read_exact(&mut player_name_buf).unwrap();
player.name = helpers::decode_buffer(player_name_buf);
player.name = helpers::decode_buffer(player_name_buf).0;

player.score = packet.read_i32::<LittleEndian>().unwrap();
}
Expand All @@ -202,12 +202,12 @@ impl Query {
let rule_name_len = packet.read_u8().unwrap();
let mut rule_name_buf = vec![0u8; rule_name_len as usize];
packet.read_exact(&mut rule_name_buf).unwrap();
rule.push(helpers::decode_buffer(rule_name_buf));
rule.push(helpers::decode_buffer(rule_name_buf).0);

let rule_value_len = packet.read_u8().unwrap();
let mut rule_value_buf = vec![0u8; rule_value_len as usize];
packet.read_exact(&mut rule_value_buf).unwrap();
rule.push(helpers::decode_buffer(rule_value_buf));
rule.push(helpers::decode_buffer(rule_value_buf).0);

rules.push(rule);
}
Expand Down
8 changes: 4 additions & 4 deletions src-tauri/src/samp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,30 +120,30 @@ pub fn get_samp_favorite_list() -> String {
let ip_len = r.read_u32::<LittleEndian>().unwrap();
let mut pos: u32 = r.position().try_into().unwrap();
let server_ip = buffer[pos as usize..(pos + ip_len) as usize].to_vec();
server_info.ip = helpers::decode_buffer(server_ip);
server_info.ip = helpers::decode_buffer(server_ip).0;
r.set_position((pos + ip_len).try_into().unwrap());

server_info.port = r.read_u32::<LittleEndian>().unwrap();

let name_len = r.read_u32::<LittleEndian>().unwrap();
pos = r.position().try_into().unwrap();
let server_name = buffer[pos as usize..(pos + name_len) as usize].to_vec();
server_info.name = helpers::decode_buffer(server_name);
server_info.name = helpers::decode_buffer(server_name).0;
r.set_position((pos + name_len).try_into().unwrap());

let password_len = r.read_u32::<LittleEndian>().unwrap();
if password_len != 0 {
pos = r.position().try_into().unwrap();
let server_password = buffer[pos as usize..(pos + password_len) as usize].to_vec();
server_info.password = helpers::decode_buffer(server_password);
server_info.password = helpers::decode_buffer(server_password).0;
r.set_position((pos + password_len).try_into().unwrap());
}

let rcon_len = r.read_u32::<LittleEndian>().unwrap();
if rcon_len != 0 {
pos = r.position().try_into().unwrap();
let server_rcon = buffer[pos as usize..(pos + rcon_len) as usize].to_vec();
server_info.rcon = helpers::decode_buffer(server_rcon);
server_info.rcon = helpers::decode_buffer(server_rcon).0;
r.set_position((pos + rcon_len).try_into().unwrap());
}

Expand Down
22 changes: 3 additions & 19 deletions src/hooks/query.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { useEffect, useRef } from "react";
import { usePersistentServers, useServers } from "../states/servers";
import { useServers } from "../states/servers";
import { queryServer } from "../utils/query";
import { Server } from "../utils/types";

export const useQuery = () => {
const queryTimer = useRef<number | undefined>(undefined);

const { selected, updateServer, setSelected } = useServers();
const { updateInFavoritesList, updateInRecentlyJoinedList } =
usePersistentServers();
const { selected, setSelected } = useServers();
const selectedServer = useRef<Server | undefined>(selected);

useEffect(() => {
Expand Down Expand Up @@ -37,21 +35,7 @@ export const useQuery = () => {
};

const getServerInfo = (srv: Server) => {
queryServer(srv)
.then((server) => {
if (server && selectedServer.current) {
if (
server.ip == selectedServer.current.ip &&
server.port == selectedServer.current.port
) {
updateServer(server);
updateInFavoritesList(server);
updateInRecentlyJoinedList(server);
setSelected(server);
}
}
})
.catch((e) => console.log(e));
queryServer(srv);
};

return {
Expand Down
32 changes: 28 additions & 4 deletions src/locales/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,17 @@ import English from "./translations/en";
import Spanish from "./translations/es";
import Farsi from "./translations/fa";
import Filipino from "./translations/fil";
import France from "./translations/fr";
import French from "./translations/fr";
import Hindi from "./translations/hi";
import Italian from "./translations/it";
import Romanian from "./translations/ro";
import Hungarian from "./translations/hu";
import Portuguese from "./translations/pt";
import Arabic from "./translations/ar";
import Indonesian from "./translations/id";
import Polish from "./translations/pl";
import Bosnian from "./translations/bs";
import Russian from "./translations/ru";

i18n.use(initReactI18next).init({
// we init with resources
Expand All @@ -25,12 +31,15 @@ i18n.use(initReactI18next).init({
fil: {
translations: Filipino,
},
fr: {
translations: French,
},
hi: {
translations: Hindi,
},
it: {
translations: Italian,
},
fr: {
translations: France,
},
ro: {
translations: Romanian,
},
Expand All @@ -40,6 +49,21 @@ i18n.use(initReactI18next).init({
pt: {
translations: Portuguese,
},
ar: {
translations: Arabic,
},
id: {
translations: Indonesian,
},
pl: {
translations: Polish,
},
bs: {
translations: Bosnian,
},
ru: {
translations: Russian,
},
},
fallbackLng: "en",
debug: true,
Expand Down
79 changes: 79 additions & 0 deletions src/locales/translations/ar.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
export default {
favorites: "المفضلة",
internet: "إنترنت",
partners: "الشركاء",
recently_joined: "إنضم مؤخرًا",
nickname: "الاسم المستعار",
settings: "إعدادات",
minimize: "تصغير",
maximize: "تكبير",
close: "غلق",
add_server_modal_description_1: "أدخل الخادم المطلوب يدويًا.",
add_server_modal_description_2: "مثال: 127.0.0.1:7777",
add: "أضف",
server: "الخادم",
address: "عنوان",
players: "اللاعبين",
server_join_prompt_enter_password:
"هذا الخادم محمي، الرجاء إدخال كلمة المرور",
server_join_prompt_enter_password_input_placeholder: "أدخل كلمة المرور...",
server_join_prompt_nickname_input_placeholder: "أدخل الاسم المستعار...",
connect: "إتصال",
copy: "نسخ",
remove_from_favorites: "إزالة من المفضلة",
add_to_favorites: "أضف الى المفضلة",
filters: "المرشحات",
filter_only_omp_servers: "خوادم OpenMP فقط",
filter_non_empty_servers: "خوادم غير فارغة",
filter_unpassworded_servers: "خوادم بدون كلمات مرور",
rule: "القاعدة",
value: "القيمة",
player: "لاعب",
score: "نتيجة",
locked: "مقفل",
unlocked: "بدون قفل",
openmp_server: "خادم OpenMP",
name: "اسم",
ping: "بينغ",
mode: "مود",
filter_servers: "تصفية الخوادم",
search_for_server_hostname_mode: "البحث عن خوادم عن طريق الاسم أو المود",
clear_recently_joined_list: "امسح قائمة الخوادم المنظمة مؤخرًا",
refresh_servers: "تحديث السيرفرات",
play: "إلعب",
remove_selected_server_from_favorites:
"إزالة الخادم المحدد من المفضلة",
add_selected_server_to_favorites: "إضافة الخادم المحدد إلى المفضلة",
add_server: "أضف الخادم",
hide_player_and_rule_list: "إخفاء قائمة اللاعبين والقواعد",
show_player_and_rule_list: "عرض قائمة اللاعبين والقواعد",
copy_server_info: "نسخ معلومات الخادم",
settings_gta_path_input_label:
"͏مسار GTA: San Andreas (حيث تم تثبيت SA-MP أيضًا)",
browse: "تصفح",
settings_import_nickname_gta_path_from_samp:
"قم باستيراد الإسم المستعار ومسار gtasa من إعدادات SA-MP",
settings_import_samp_favorite_list: "استيراد قائمة المفضلة من بيانات SA-MP",
settings_reset_application_data:
"إعادة ضبط بيانات التطبيق (مسح الإعدادات والقوائم)",
settings_new_update_available: "⚠ تحديث جديد متاح. اضغط للتحميل! ⚠",
settings_credits_made_by: "صنعت بـ ❤️ بواسطة",
settings_credits_view_source_on_github: "عرض كود المصدر على GithHub",
update_modal_update_available_title: "تحديث جديد!",
update_modal_update_available_description:
'مشغل بإصدار بناء جديد متاح!\nإصدار بناء المشغل الخاص بك: {{ version }}\nإصدار بناء المشغل الحالي: {{ newVersion }}\nانقر على "تنزيل" لفتح صفحة الإصدار',
download: "تحميل",
update_modal_remind_me_next_time: "ليس الآن",
update_modal_skip_this_update: "تجاهل هذا الإصدار",
gta_path_modal_cant_find_game_title: "لعبة GTA San Andreas غير موجودة!",
gta_path_modal_cant_find_game_description:
'لا يمكن العثور على GTA San Andreas في هذا الدليل:\n - "{{ path }}"\nغير قادر على العثور على "gta_sa.exe" في المسار المحدد لديك.',
open_settings: "أفتح الإعدادات",
cancel: "إلغاء",
gta_path_modal_cant_find_samp_title: "لم يتم العثور على SA-MP!",
gta_path_modal_cant_find_samp_description:
'لا يمكن العثور على تثبيت SA-MP في هذا الدليل:\n - "{{ path }}"\nغير قادر على العثور على "samp.dll" في المسار المحدد لديك.\n\nإذا لم يكن برنامج SA-MP مثبتًا لديك، فيمكنك تنزيله من https://sa-mp.mp/ بالنقر فوق **تنزيل**.',
notification_add_to_favorites_title: "تمت إضافتها إلى المفضلة!",
notification_add_to_favorites_description:
"تمت إضافة الخادم {{ server }} إلى قائمة المفضلة لديك.",
};
Loading

0 comments on commit 186d94b

Please sign in to comment.