From 4b0953c11380e2ef1c6859d42d05179cfa382f91 Mon Sep 17 00:00:00 2001 From: Ayane Satomi Date: Sat, 2 Jul 2022 18:05:49 +0800 Subject: [PATCH] no need to make file writes, just insert using table.insert --- starfallex/starfall_tts_gimpy.lua | 60 ++++++++++++------------------- 1 file changed, 23 insertions(+), 37 deletions(-) diff --git a/starfallex/starfall_tts_gimpy.lua b/starfallex/starfall_tts_gimpy.lua index d81ca10..f42af1b 100644 --- a/starfallex/starfall_tts_gimpy.lua +++ b/starfallex/starfall_tts_gimpy.lua @@ -1,10 +1,10 @@ --@name Starfall-TTSv2 ---@author Minori +--@author Minori, Henke, Empy, et al. --@client local remoteLanguageIndex = "https://raw.githubusercontent.com/sr229/metastruct-experiments/master/starfall_metadata/allowed_google_voices.json" local localLanguageIndex = "./tts_index.json" -local languageIndex +local languageIndex = {} local errorLookup = { [2] = "Invalid language" } local DEFAULT_LANGUAGE = "en-gb" @@ -14,45 +14,31 @@ if not owner() then return end -- Check if client has permission if not hasPermission("bass.loadURL", "https://translate.google.com/translate_tts") then return end -if not hasPermission("file.read", localLanguageIndedx) then return end +if not hasPermission("file.read", localLanguageIndex) then return end local function getRemoteLanguageIndex() + print("Building language index. Please be patient.") http.get(remoteLanguageIndex, function(body, len, hdrs, code) if len > 0 then - file.write(localLanguageIndex, body) + local rawData = json.decode(body) + + if rawData then + for i, v in pairs(rawData.voices) do + table.insert(languageIndex, i, v) + end + else + print("Error: Could not decode JSON") + end + + print("TTS is now ready! Available voices are: ") + printTable(languageIndex) + print("Type ':' to switch to that language") + print("Type ';' to use the TTS!") + print("Have fun :)") end end) end - -local function parseLanguageIndex() - print("Building language index, please be patient...") - getRemoteLanguageIndex() - local rawFile = file.read(localLanguageIndex) - - while rawFile == nil do - -- do nothing while we wait for data - return - end - - if not file.exists(localLanguageIndex) then - print("Parsing index failed.") - end - - local rawTable = json.decode(rawFile) - languageIndex = rawTable.voices - - if languageIndex ~= nil then - print("Index built successfully. You're now ready to use TTS.") - print("Available languages: ") - printTable(languageIndex) - - -- Remove the local language index. - file.delete(localLanguageIndex) - -- print("DEBUG: languageIndex val: " .. tostring(languageIndex)) - end -end - local function RequestTTS(txt, l, callback) bass.loadURL("https://translate.google.com/translate_tts?ie=UTF-8&q=" .. txt .. "&tl=" .. l .. "&client=tw-ob", "3d", callback) end @@ -73,9 +59,9 @@ local function DoTTS(sound) end -- check if the value exists in a table -local function hasval(table, value) - for _, v in pairs(table) do - if v == value then +local function hasval(tab, val) + for _, v in pairs(tab) do + if v == val then return true end end @@ -83,7 +69,7 @@ local function hasval(table, value) end -parseLanguageIndex() +getRemoteLanguageIndex() hook.add("playerchat", "tts", function(ply, txt) if ply ~= owner() then return end