make mozhi not use 100 billion if statements + add TTS err handling

This commit is contained in:
2023-08-27 19:48:56 +05:30
parent 2efcf283b7
commit 67fb87d524
5 changed files with 116 additions and 149 deletions

View File

@@ -10,14 +10,6 @@ import (
"strings"
)
type LangOut struct {
Engine string `json:"engine"`
AutoDetect string `json:"detected"`
OutputText string `json:"translated-text"`
SourceLang string `json:"source_language"`
TargetLang string `json:"target_language"`
}
func TranslateGoogle(to string, from string, text string) (LangOut, error) {
ToOrig := to
FromOrig := from

View File

@@ -1,6 +1,89 @@
package utils
import (
"errors"
)
type List struct {
Name string
Id string
}
type LangOut struct {
Engine string `json:"engine"`
AutoDetect string `json:"detected"`
OutputText string `json:"translated-text"`
SourceLang string `json:"source_language"`
TargetLang string `json:"target_language"`
}
func LangList(engine string, listType string) ([]List, error) {
var data []List
if listType != "sl" && listType != "tl" {
return []List{}, errors.New("list type invalid: either give tl for target languages or sl for source languages.")
}
if engine == "google" {
data = LangListGoogle("sl")
} else if engine == "libre" {
data = LangListLibreTranslate("sl")
} else if engine == "reverso" {
data = LangListReverso("sl")
} else if engine == "deepl" {
data = LangListDeepl("sl")
} else if engine == "watson" {
data = LangListWatson("sl")
} else if engine == "yandex" {
data = LangListYandex("sl")
} else if engine == "mymemory" {
data = LangListMyMemory("sl")
} else if engine == "duckduckgo" {
data = LangListDuckDuckGo("sl")
} else {
return []List{} , errors.New("Engine does not exist.")
}
return data, nil
}
// General function to translate stuff so there is no need for a huge if-block everywhere
func Translate(engine string, to string, from string, text string) (LangOut, error) {
var err error
var data LangOut
if engine == "google" {
data, err = TranslateGoogle(to, from, text)
} else if engine == "libre" {
data, err = TranslateLibreTranslate(to, from, text)
} else if engine == "reverso" {
data, err = TranslateReverso(to, from, text)
} else if engine == "deepl" {
data, err = TranslateDeepl(to, from, text)
} else if engine == "watson" {
data, err = TranslateWatson(to, from, text)
} else if engine == "yandex" {
data, err = TranslateYandex(to, from, text)
} else if engine == "mymemory" {
data, err = TranslateMyMemory(to, from, text)
} else if engine == "duckduckgo" {
data, err = TranslateDuckDuckGo(to, from, text)
} else {
return LangOut{}, errors.New("Engine does not exist.")
}
if err != nil {
return LangOut{}, err
}
return data, nil
}
func TTS(engine string, lang string, text string) ([]byte, error) {
var err error
var data []byte
if engine == "google" {
data, err = TTSGoogle(lang, text)
} else if engine == "reverso" {
data, err = TTSReverso(lang, text)
} else {
return []byte(""), errors.New("Engine does not exist and/or doesn't support TTS.")
}
if err != nil {
return []byte(""), err
}
return data, nil
}

View File

@@ -13,7 +13,7 @@ type ReversoTTS struct {
Voice string
}
func TTSGoogle(lang string, text string) []byte {
func TTSGoogle(lang string, text string) ([]byte, error) {
type Options struct {
Lang string `url:"tl"`
Text string `url:"q"`
@@ -29,11 +29,12 @@ func TTSGoogle(lang string, text string) []byte {
ToString(&file).
Fetch(context.Background())
if err != nil {
file = ""
return []byte(""), err
}
return []byte(file)
return []byte(file), nil
}
func TTSReverso(lang string, text string) []byte {
func TTSReverso(lang string, text string) ([]byte, error) {
var TTSData = []ReversoTTS{
// http://voice.reverso.net/RestPronunciation.svc/v1/output=json/GetAvailableVoices with randomized deduplication
ReversoTTS{
@@ -147,7 +148,7 @@ func TTSReverso(lang string, text string) []byte {
UserAgent(UserAgent).
Fetch(context.Background())
if err != nil {
file = ""
return []byte(""), err
}
return []byte(file)
return []byte(file), nil
}