2019-04-05 23:02:12 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2019-04-06 16:09:02 +00:00
|
|
|
"log"
|
2019-04-05 23:02:12 +00:00
|
|
|
"os"
|
|
|
|
"strings"
|
2019-04-06 16:09:02 +00:00
|
|
|
"./trans"
|
|
|
|
"github.com/deanishe/awgo"
|
|
|
|
"regexp"
|
2019-12-24 21:40:10 +00:00
|
|
|
"fmt"
|
2019-04-05 23:02:12 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func main() {
|
2019-12-24 21:20:41 +00:00
|
|
|
translations := translateProgramArgs()
|
|
|
|
|
2019-12-24 21:40:10 +00:00
|
|
|
if !runningInAlfred() {
|
|
|
|
runAsCliTool(translations)
|
|
|
|
} else {
|
|
|
|
runAsAlfredWorkflow(translations)
|
|
|
|
}
|
2019-04-06 16:09:02 +00:00
|
|
|
}
|
|
|
|
|
2019-12-24 21:20:41 +00:00
|
|
|
func translateProgramArgs() []string {
|
2019-04-06 16:09:02 +00:00
|
|
|
word, fromLang, toLang := parseProgramArgs(os.Args)
|
2019-10-11 22:33:16 +00:00
|
|
|
if fromLang == "" && toLang == "" {
|
|
|
|
fromLang, toLang = decideWhatLanguagesToUse(word)
|
|
|
|
}
|
2019-04-06 16:09:02 +00:00
|
|
|
|
2019-10-13 16:11:29 +00:00
|
|
|
t := trans.New(word)
|
|
|
|
t.Language = fromLang
|
|
|
|
translations := t.Translate(toLang)
|
2019-12-24 21:20:41 +00:00
|
|
|
return translations
|
2019-04-06 16:09:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func parseProgramArgs(args []string) (string, string, string) {
|
|
|
|
if len(args) < 2 {
|
|
|
|
log.Fatal("Not enough arguments!")
|
|
|
|
}
|
|
|
|
word := strings.Join(args[1:], " ")
|
|
|
|
fromLang, toLang := "", ""
|
|
|
|
|
|
|
|
if len(args) > 2 {
|
|
|
|
if isTransLanguageSpecifier(args[1]) {
|
|
|
|
languages := strings.Split(os.Args[1], ":")
|
|
|
|
fromLang, toLang = languages[0], languages[1]
|
|
|
|
word = strings.Join(os.Args[2:], " ")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return word, fromLang, toLang
|
|
|
|
}
|
|
|
|
|
|
|
|
func isTransLanguageSpecifier(arg string) bool {
|
|
|
|
ok, _ := regexp.MatchString("(\\w{2})?:(\\w{2})?", os.Args[1])
|
|
|
|
return ok
|
2019-04-05 23:02:12 +00:00
|
|
|
}
|
2019-10-11 22:33:16 +00:00
|
|
|
|
|
|
|
func decideWhatLanguagesToUse(word string) (string, string) {
|
2019-10-13 16:11:29 +00:00
|
|
|
fromLang := trans.New(word).Identify()
|
2019-10-11 22:33:16 +00:00
|
|
|
toLang := map[string]string{
|
|
|
|
"en": "hu",
|
|
|
|
"hu": "en",
|
|
|
|
}[fromLang]
|
|
|
|
if toLang == "" {
|
|
|
|
toLang = "en"
|
|
|
|
}
|
|
|
|
return fromLang, toLang
|
|
|
|
}
|
2019-12-24 21:40:10 +00:00
|
|
|
|
|
|
|
func runningInAlfred() bool {
|
|
|
|
envVarsSetByAlfred := []string {
|
|
|
|
"alfred_version",
|
|
|
|
"alfred_workflow_uid",
|
|
|
|
"alfred_workflow_data",
|
|
|
|
}
|
|
|
|
for _, envVar := range envVarsSetByAlfred {
|
|
|
|
if _, ok := os.LookupEnv(envVar); !ok {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func runAsCliTool(translations []string) {
|
|
|
|
for _, translation := range translations {
|
|
|
|
fmt.Println(translation)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func runAsAlfredWorkflow(translations []string) {
|
|
|
|
wf := aw.New()
|
|
|
|
wf.Run(func() {
|
|
|
|
for _, translation := range translations {
|
|
|
|
wf.NewItem(translation).Arg(translation).Valid(true)
|
|
|
|
}
|
|
|
|
wf.WarnEmpty("No results", "Try a different query?")
|
|
|
|
wf.SendFeedback()
|
|
|
|
})
|
|
|
|
}
|