func selectFormat(data *WizardData) { auth := phraseapp.AuthCredentials{Token: data.AccessToken} phraseapp.RegisterAuthCredentials(&auth, nil) formats, err := phraseapp.FormatsList(1, 25) if err != nil { panic(err.Error()) } for counter, format := range formats { fmt.Printf("%2d. %s - %s, File-Extension: %s\n", counter+1, format.ApiName, format.Name, format.Extension) } var id string mainFormatDefault := "" if data.MainFormat != "" { mainFormatDefault = fmt.Sprintf(" [Press enter for default: %s]", data.MainFormat) } fmt.Printf("Select the format you want to use for language files you download from PhraseApp%s: ", mainFormatDefault) fmt.Scanln(&id) if id == "" && data.MainFormat != "" { data.Format = data.MainFormat DisplayWizard(data, next(data), "") return } number, err := strconv.Atoi(id) if err != nil || number < 1 || number > len(formats)+1 { DisplayWizard(data, "selectFormat", fmt.Sprintf("Argument Error: Please select a format from the list by specifying its position in the list.")) return } data.Format = formats[number-1].ApiName DisplayWizard(data, next(data), "") }
func Authenticate(cmd *phraseapp.AuthCredentials) error { defaultCredentials, err := ConfigDefaultCredentials() if err != nil { return err } phraseapp.RegisterAuthCredentials(cmd, defaultCredentials) return nil }
func selectProjectStep(data *WizardData) { auth := phraseapp.AuthCredentials{Token: data.AccessToken, Host: data.Host} fmt.Println("Please select your project:") phraseapp.RegisterAuthCredentials(&auth, nil) var wg sync.WaitGroup out := make(chan []phraseapp.Project, 1) wg.Add(1) var err error channelEnd := ChannelEnd{} getProjects := func(channelEnd *ChannelEnd) { var projects []*phraseapp.Project // time.Sleep(500 * time.Millisecond) projects, err = phraseapp.ProjectsList(1, 25) var array []phraseapp.Project for _, res := range projects { array = append(array, *res) } out <- array channelEnd.closed = true return } go getProjects(&channelEnd) go func(channelEnd *ChannelEnd, wg *sync.WaitGroup) { spinner("Loading projects... ", 0, channelEnd, wg) }(&channelEnd, &wg) var projects []phraseapp.Project projects = <-out clean() wg.Wait() close(out) if err != nil { success, match_err := regexp.MatchString("401", err.Error()) if match_err != nil { fmt.Println(err.Error()) panic(match_err.Error()) } if success { errorMsg := fmt.Sprintf("Argument Error: AccessToken '%s' is invalid. It may be revoked. Please create a new Access Token.", data.AccessToken) data.AccessToken = "" DisplayWizard(data, "", errorMsg) } else { panic(err.Error()) } } if len(projects) == 1 { data.ProjectId = projects[0].Id data.MainFormat = projects[0].MainFormat fmt.Printf("You've got one project, \"%s\". Answer \"y\" to select this or \"n\" to create a new project: ", projects[0].Name) var answer string fmt.Scanln(&answer) if answer == "y" { DisplayWizard(data, next(data), "") return } else { data.ProjectId = "" data.MainFormat = "" DisplayWizard(data, "newProject", "") return } } for counter, project := range projects { fmt.Printf("%2d. %s (Id: %s)\n", counter+1, project.Name, project.Id) } fmt.Printf("%2d. Create new project\n", len(projects)+1) fmt.Print("Select project: ") var id string fmt.Scanln(&id) number, err := strconv.Atoi(id) if err != nil || number < 1 || number > len(projects)+1 { DisplayWizard(data, "selectProject", fmt.Sprintf("Argument Error: Please select a project from the list by specifying its position in the list, e.g. 2 for the second project.")) return } if number == len(projects)+1 { DisplayWizard(data, "newProject", "") return } selectedProject := projects[number-1] data.ProjectId = selectedProject.Id data.MainFormat = selectedProject.MainFormat DisplayWizard(data, next(data), "") }