source: code/trunk/web/main.go@ 17

Last change on this file since 17 was 17, checked in by manerakai, 22 months ago

Added tts

File size: 3.9 KB
RevLine 
[9]1package main
2
3import (
[17]4 "bytes"
5 "net/http"
6 "net/url"
7
[9]8 "codeberg.org/SimpleWeb/SimplyTranslate/engines"
[15]9 "github.com/gofiber/fiber/v2"
[16]10 "github.com/gofiber/template/html/v2"
[9]11)
12
[15]13func main() {
[16]14 engine := html.New("./views", ".html")
15 app := fiber.New(fiber.Config{
16 Views: engine,
17 })
[9]18
[15]19 app.All("/api/translate", func(c *fiber.Ctx) error {
20 from := ""
21 to := ""
22 engine := ""
23 text := ""
24 if c.Method() == "GET" {
25 engine = c.Query("engine")
26 text = c.Query("text")
27 from = c.Query("from")
28 to = c.Query("to")
29 } else if c.Method() == "POST" {
30 engine = c.FormValue("engine")
31 text = c.FormValue("text")
32 from = c.FormValue("from")
33 to = c.FormValue("to")
34 } else {
35 return c.SendStatus(400)
36 }
[16]37 if _, ok := engines.Engines[engine]; !ok || engine == "" {
[15]38 engine = "google"
39 }
40 if to == "" {
41 return c.SendStatus(400)
42 }
43 if result, err := engines.Engines[engine].Translate(text, from, to); err != nil {
44 return c.SendStatus(500)
45 } else {
46 return c.JSON(result)
47 }
48 })
49
[16]50 app.Get("/api/source_languages", func(c *fiber.Ctx) error {
51 engine := c.Query("engine")
52 if _, ok := engines.Engines[engine]; !ok || engine == "" {
53 engine = "google"
54 }
55 if result, err := engines.Engines[engine].SourceLanguages(); err != nil {
56 return c.SendStatus(500)
57 } else {
58 return c.JSON(result)
59 }
60 })
61
62 app.Get("/api/target_languages", func(c *fiber.Ctx) error {
63 engine := c.Query("engine")
64 if _, ok := engines.Engines[engine]; !ok || engine == "" {
65 engine = "google"
66 }
67 if result, err := engines.Engines[engine].TargetLanguages(); err != nil {
68 return c.SendStatus(500)
69 } else {
70 return c.JSON(result)
71 }
72 })
73
74 app.All("/", func(c *fiber.Ctx) error {
75 engine := c.Query("engine")
76 if _, ok := engines.Engines[engine]; !ok || engine == "" {
77 engine = "google"
78 }
79 targetLanguages, err := engines.Engines[engine].TargetLanguages()
80 if err != nil {
81 return c.SendStatus(500)
82 }
83 sourceLanguages, err := engines.Engines[engine].SourceLanguages()
84 if err != nil {
85 return c.SendStatus(500)
86 }
87 originalText := ""
88 translatedText := ""
89 from := ""
90 to := ""
[17]91 ttsFrom := ""
92 ttsTo := ""
[16]93
94 if c.Method() == "POST" {
95 from =
96 c.FormValue("from")
97 to = c.FormValue("to")
98 originalText = c.FormValue("text")
99 if result, err := engines.Engines[engine].Translate(originalText, from, to); err != nil {
100 return c.SendStatus(500)
101 } else {
102 translatedText = result.TranslatedText
103 }
[17]104
105 ttsFromURL, _ := url.Parse("api/tts")
106
107 fromQuery := url.Values{}
108 fromQuery.Add("lang", from)
109 fromQuery.Add("text", originalText)
110 ttsFromURL.RawQuery = fromQuery.Encode()
111 ttsFrom = ttsFromURL.String()
112
113 ttsToURL, _ := url.Parse("api/tts")
114
115 toQuery := url.Values{}
116 toQuery.Add("lang", to)
117 toQuery.Add("text", translatedText)
118 ttsToURL.RawQuery = toQuery.Encode()
119 ttsTo = ttsToURL.String()
120
[16]121 }
122 return c.Render("index", fiber.Map{
123 "Engine": engine,
124 "SourceLanguages": targetLanguages,
125 "TargetLanguages": sourceLanguages,
126 "OriginalText": originalText,
127 "TranslatedText": translatedText,
128 "From": from,
129 "To": to,
[17]130 "TtsFrom": ttsFrom,
131 "TtsTo": ttsTo,
[16]132 })
133 })
134
135 app.Static("/static", "./static")
136
[17]137 app.Get("/api/tts", func(c *fiber.Ctx) error {
138 engine := c.Query("engine")
139 if _, ok := engines.Engines[engine]; !ok || engine == "" {
140 engine = "google"
141 }
142
143 text := c.Query("text")
144 if text == "" {
145 return c.SendStatus(400)
146 }
147
148 lang := c.Query("lang")
149 if lang == "" {
150 lang = "en"
151 }
152
153 if url, err := engines.Engines[engine].Tts(text, lang); err != nil {
154 return c.SendStatus(500)
155 } else {
156 if response, err := http.Get(url); err != nil {
157 return c.SendStatus(500)
158 } else {
159 defer response.Body.Close()
160 var buf bytes.Buffer
161 response.Write(&buf)
162 c.Context().SetContentType("audio/mpeg")
163 return c.Send(buf.Bytes())
164 }
165 }
166 })
167
[15]168 app.Listen(":3000")
[9]169}
Note: See TracBrowser for help on using the repository browser.