From 932bcefbd7ea8f01928e404ad63bccb6e9e18c08 Mon Sep 17 00:00:00 2001 From: itsneufox <156133096+itsneufox@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:51:22 +0000 Subject: [PATCH 1/2] add server offline status handling and update translations --- src/containers/MainBody/ServerList/Item.tsx | 4 +- src/locales/translations/en.ts | 1 + src/locales/translations/pt.ts | 3 +- src/utils/helpers.ts | 41 ++++++++++++--------- src/utils/query.ts | 40 +++++++++++++++++--- src/utils/types.ts | 3 +- 6 files changed, 67 insertions(+), 25 deletions(-) diff --git a/src/containers/MainBody/ServerList/Item.tsx b/src/containers/MainBody/ServerList/Item.tsx index f82845d5..17d20a0a 100644 --- a/src/containers/MainBody/ServerList/Item.tsx +++ b/src/containers/MainBody/ServerList/Item.tsx @@ -150,7 +150,9 @@ const ServerItem = memo((props: IProps) => { { paddingLeft: server.usingOmp ? 0 : sc(10) }, ]} > - + {server.hostname} diff --git a/src/locales/translations/en.ts b/src/locales/translations/en.ts index d1688149..43a3ca7c 100644 --- a/src/locales/translations/en.ts +++ b/src/locales/translations/en.ts @@ -101,4 +101,5 @@ export default { reconnect: "Reconnect", settings_advanced_discord_status_requires_restart: "(Requires restarting the game to take action)", + server_status: "Offline", }; diff --git a/src/locales/translations/pt.ts b/src/locales/translations/pt.ts index 13350abf..d07d515b 100644 --- a/src/locales/translations/pt.ts +++ b/src/locales/translations/pt.ts @@ -85,5 +85,6 @@ export default { from_gtasa_folder: "Da pasta do GTASA", gta_path_modal_cant_find_samp_description_2: "Escolha outra versão ou instale o SA-MP manualmente.", add_or_play_external_server: "Adicionar aos favoritos ou jogar", - reconnect: "Reconectar" + reconnect: "Reconectar", + server_status: "Desligado", }; \ No newline at end of file diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index f7027855..95bccc0f 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -218,11 +218,14 @@ export const sortAndSearchInServerList = ( languages, } = searchData; let list = servers.filter((server) => { + const nonEmptyCheck = nonEmpty ? + (server.playerCount > 0 && !server.isOffline) : true; + const ompCheck = ompOnly ? server.usingOmp === true : true; + const partnershipCheck = checkForPartnership ? server.partner === true : true; - const nonEmptyCheck = nonEmpty ? server.playerCount > 0 : true; const unpasswordedCheck = unpassworded ? server.hasPassword === false : true; @@ -254,6 +257,10 @@ export const sortAndSearchInServerList = ( if (sortPing !== "none") { list = list.sort((a, b) => { + + if (a.ping === 9999 && b.ping !== 9999) return 1; + if (a.ping !== 9999 && b.ping === 9999) return -1; + if (sortPing === "descending") { return a.ping - b.ping; } else { @@ -321,32 +328,32 @@ const addLanguageFilter = (name: string, keywords: string[]) => { export const generateLanguageFilters = () => { addLanguageFilter("English", ["English", "EN", "Eng"]); - addLanguageFilter("Arabic", ["Arabic", "العربية"]); - addLanguageFilter("Czech", ["Czech", "CZ", "Čeština"]); - addLanguageFilter("Chinese", ["Chinese", "CN", "ZH", "中文"]); - addLanguageFilter("Bulgarian", ["Bulgarian", "BG", "Български"]); + addLanguageFilter("Arabic", ["Arabic", "???????"]); + addLanguageFilter("Czech", ["Czech", "CZ", "?etina"]); + addLanguageFilter("Chinese", ["Chinese", "CN", "ZH", "??"]); + addLanguageFilter("Bulgarian", ["Bulgarian", "BG", "?????????"]); addLanguageFilter("Dutch", ["Dutch", "NL"]); - addLanguageFilter("French", ["French", "FR", "Français"]); - addLanguageFilter("Georgian", ["Georgian", "KA", "ქართული"]); + addLanguageFilter("French", ["French", "FR", "Franais"]); + addLanguageFilter("Georgian", ["Georgian", "KA", "???????"]); addLanguageFilter("German", ["German", "DE", "GER", "Deutsch"]); - addLanguageFilter("Greek", ["Greek", "EL", "Ελληνικά"]); + addLanguageFilter("Greek", ["Greek", "EL", "????????"]); addLanguageFilter("Hungarian", ["Hungarian", "HU", "Magyar"]); addLanguageFilter("Indonesian", ["Indonesian", "ID", "Bahasa Indonesia "]); addLanguageFilter("Italian", ["Italian", "IT", "Italiano"]); - addLanguageFilter("Lithuanian", ["Lithuanian", "LT", "Lietuvių"]); + addLanguageFilter("Lithuanian", ["Lithuanian", "LT", "Lietuvi?"]); addLanguageFilter("Polish", ["Polish", "PL", "Polski"]); - addLanguageFilter("Portuguese", ["Portuguese", "PT", "Português"]); - addLanguageFilter("Romanian", ["Romanian", "RO", "Română"]); - addLanguageFilter("Russian", ["Russian", "RU", "RUS", "Русский"]); - addLanguageFilter("Spanish", ["Spanish", "ES", "Español"]); + addLanguageFilter("Portuguese", ["Portuguese", "PT", "Portugus"]); + addLanguageFilter("Romanian", ["Romanian", "RO", "Romn?"]); + addLanguageFilter("Russian", ["Russian", "RU", "RUS", "???????"]); + addLanguageFilter("Spanish", ["Spanish", "ES", "Espaol"]); addLanguageFilter("Swedish", ["Swedish", "SV", "Svenska"]); - addLanguageFilter("Turkish", ["Turkish", "TR", "Türkçe"]); - addLanguageFilter("Ukrainian", ["Ukrainian", "UK", "Українська"]); + addLanguageFilter("Turkish", ["Turkish", "TR", "Trke"]); + addLanguageFilter("Ukrainian", ["Ukrainian", "UK", "??????????"]); addLanguageFilter("Vietnamese", [ "Vietnamese", "VI", "Viet Nam", - "Tiếng Việt", + "Ti?ng Vi?t", ]); }; @@ -416,4 +423,4 @@ export const getSampVersionFromName = (name: string): SAMPDLLVersions => { } }); return ret; -}; +}; \ No newline at end of file diff --git a/src/utils/query.ts b/src/utils/query.ts index 38d82295..09bdba0e 100644 --- a/src/utils/query.ts +++ b/src/utils/query.ts @@ -1,3 +1,4 @@ +import { t } from "i18next"; import { invoke_rpc } from "../api/rpc"; import { usePersistentServers, useServers } from "../states/servers"; import { Log } from "./logger"; @@ -42,14 +43,28 @@ const getServerInfo = async (ip: string, port: number, listType: ListType) => { ip: ip, port: port, }); - if (serverInfo === "no_data" || serverInfo == "timed out") { + let server = getServerFromList(ip, port, listType); + if (server && !server.isOffline) { + + server = { + ...server, + ping: 9999, + playerCount: 0, + maxPlayers: 0, + gameMode: "-", + hostname: `(${t("server_status")}) ${server.hostname}`, + language: "-", + isOffline: true + }; + updateServerEveryWhere(server); + } return Log.debug( "[query.ts: getServerInfo]", "There was a problem getting server main info" ); } - + let queryObj = JSON.parse(serverInfo); const data = { hasPassword: queryObj.password, @@ -58,15 +73,30 @@ const getServerInfo = async (ip: string, port: number, listType: ListType) => { hostname: queryObj.hostname, gameMode: queryObj.gamemode, language: queryObj.language, + isOffline: false }; - let server = getServerFromList(ip, port, listType); if (server) { server = { ...server, ...data }; updateServerEveryWhere(server); } } catch (e) { - Log.debug("[query.ts: getServerInfo]", e); + let server = getServerFromList(ip, port, listType); + if (server && !server.isOffline) { + + server = { + ...server, + ping: 9999, + playerCount: 0, + maxPlayers: 0, + gameMode: "-", + hostname: `(${t("server_status")}) ${server.hostname}`, + language: "-", + isOffline: true + }; + updateServerEveryWhere(server); + Log.debug("[query.ts: getServerInfo]", e); + } } }; @@ -267,4 +297,4 @@ const updateServerEveryWhere = (server: Server) => { setSelected(server); } } -}; +}; \ No newline at end of file diff --git a/src/utils/types.ts b/src/utils/types.ts index 64063e08..9bcb5a66 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -25,6 +25,7 @@ export interface Server { ping: number; players: Player[]; password: string; + isOffline: boolean; omp?: { bannerLight?: string; bannerDark?: string; @@ -93,4 +94,4 @@ export interface PerServerSettings { ipPort: string; nickname?: string; sampVersion?: SAMPDLLVersions; -} +} \ No newline at end of file From db5718de796f4956a7bcfc7469411ab2259bea31 Mon Sep 17 00:00:00 2001 From: itsneufox <156133096+itsneufox@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:57:25 +0000 Subject: [PATCH 2/2] Fix broken encoding --- src/utils/helpers.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 95bccc0f..6fb09a49 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -328,32 +328,32 @@ const addLanguageFilter = (name: string, keywords: string[]) => { export const generateLanguageFilters = () => { addLanguageFilter("English", ["English", "EN", "Eng"]); - addLanguageFilter("Arabic", ["Arabic", "???????"]); - addLanguageFilter("Czech", ["Czech", "CZ", "?etina"]); - addLanguageFilter("Chinese", ["Chinese", "CN", "ZH", "??"]); - addLanguageFilter("Bulgarian", ["Bulgarian", "BG", "?????????"]); + addLanguageFilter("Arabic", ["Arabic", "العربية"]); + addLanguageFilter("Czech", ["Czech", "CZ", "Čeština"]); + addLanguageFilter("Chinese", ["Chinese", "CN", "ZH", "中文"]); + addLanguageFilter("Bulgarian", ["Bulgarian", "BG", "Български"]); addLanguageFilter("Dutch", ["Dutch", "NL"]); - addLanguageFilter("French", ["French", "FR", "Franais"]); - addLanguageFilter("Georgian", ["Georgian", "KA", "???????"]); + addLanguageFilter("French", ["French", "FR", "Français"]); + addLanguageFilter("Georgian", ["Georgian", "KA", "ქართული"]); addLanguageFilter("German", ["German", "DE", "GER", "Deutsch"]); - addLanguageFilter("Greek", ["Greek", "EL", "????????"]); + addLanguageFilter("Greek", ["Greek", "EL", "Ελληνικά"]); addLanguageFilter("Hungarian", ["Hungarian", "HU", "Magyar"]); addLanguageFilter("Indonesian", ["Indonesian", "ID", "Bahasa Indonesia "]); addLanguageFilter("Italian", ["Italian", "IT", "Italiano"]); - addLanguageFilter("Lithuanian", ["Lithuanian", "LT", "Lietuvi?"]); + addLanguageFilter("Lithuanian", ["Lithuanian", "LT", "Lietuvių"]); addLanguageFilter("Polish", ["Polish", "PL", "Polski"]); - addLanguageFilter("Portuguese", ["Portuguese", "PT", "Portugus"]); - addLanguageFilter("Romanian", ["Romanian", "RO", "Romn?"]); - addLanguageFilter("Russian", ["Russian", "RU", "RUS", "???????"]); - addLanguageFilter("Spanish", ["Spanish", "ES", "Espaol"]); + addLanguageFilter("Portuguese", ["Portuguese", "PT", "Português"]); + addLanguageFilter("Romanian", ["Romanian", "RO", "Română"]); + addLanguageFilter("Russian", ["Russian", "RU", "RUS", "Русский"]); + addLanguageFilter("Spanish", ["Spanish", "ES", "Español"]); addLanguageFilter("Swedish", ["Swedish", "SV", "Svenska"]); - addLanguageFilter("Turkish", ["Turkish", "TR", "Trke"]); - addLanguageFilter("Ukrainian", ["Ukrainian", "UK", "??????????"]); + addLanguageFilter("Turkish", ["Turkish", "TR", "Türkçe"]); + addLanguageFilter("Ukrainian", ["Ukrainian", "UK", "Українська"]); addLanguageFilter("Vietnamese", [ "Vietnamese", "VI", "Viet Nam", - "Ti?ng Vi?t", + "Tiếng Việt", ]); };