- Timestamp:
- Aug 30, 2023, 3:41:40 PM (22 months ago)
- Location:
- trunk/web
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/web/main.go
r16 r17 2 2 3 3 import ( 4 "bytes" 5 "net/http" 6 "net/url" 7 4 8 "codeberg.org/SimpleWeb/SimplyTranslate/engines" 5 9 "github.com/gofiber/fiber/v2" … … 85 89 from := "" 86 90 to := "" 91 ttsFrom := "" 92 ttsTo := "" 87 93 88 94 if c.Method() == "POST" { … … 96 102 translatedText = result.TranslatedText 97 103 } 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 98 121 } 99 122 return c.Render("index", fiber.Map{ … … 105 128 "From": from, 106 129 "To": to, 130 "TtsFrom": ttsFrom, 131 "TtsTo": ttsTo, 107 132 }) 108 133 }) … … 110 135 app.Static("/static", "./static") 111 136 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 112 168 app.Listen(":3000") 113 169 } -
trunk/web/views/index.html
r16 r17 49 49 <textarea autofocus class="item" id="input" name="text" dir="auto" 50 50 placeholder="Enter Text Here">{{ .OriginalText }}</textarea> 51 <div class="center"> 52 <audio controls> 53 <source type="audio/mpeg" src="{{ .TtsFrom }}"> 54 </audio> 55 </div> 51 56 </div> 52 57 … … 54 59 <textarea id="output" class="translation item" dir="auto" placeholder="Translation" 55 60 readonly>{{.TranslatedText}}</textarea> 61 <audio controls> 62 <source type="audio/mpeg" src="{{ .TtsTo }}"> 63 </audio> 56 64 </div> 57 65 </div>
Note:
See TracChangeset
for help on using the changeset viewer.