77 "strings"
88 "sync/atomic"
99 "time"
10+ "unicode"
1011
1112 "UWP-TCP-Con/internal/ping"
1213)
@@ -209,27 +210,46 @@ func (a *App) askBaseHost() (string, error) {
209210}
210211
211212func (a * App ) askSubdomainChoice () ([]string , error ) {
212- index , err := selectOption ("Subdomain" , []string {"Eigene Subdomain " , "Subdomain-Pool" })
213+ index , err := selectOption ("Subdomain" , []string {"Eigene Subdomains " , "Subdomain-Pool" , "Eigene + Pool" })
213214 if err != nil {
214215 return nil , err
215216 }
216217 if index == 1 {
217218 return subdomainPool , nil
218219 }
220+ if index == 2 {
221+ custom , err := a .askCustomSubdomains ()
222+ if err != nil {
223+ return nil , err
224+ }
225+ return append (custom , subdomainPool ... ), nil
226+ }
219227
228+ return a .askCustomSubdomains ()
229+ }
230+
231+ func (a * App ) askCustomSubdomains () ([]string , error ) {
220232 var errMsg string
221233 for {
222- value , err := promptInput ("Subdomain (optional)" , "z.B. play (leer lassen für keine)" , errMsg )
234+ value , err := promptInput ("Subdomains (optional, kommasepariert )" , "z.B. play, mc (leer lassen für keine)" , errMsg )
223235 if err != nil {
224236 return nil , err
225237 }
226238 value = strings .TrimSpace (value )
227- return []string {value }, nil
239+ if value == "" {
240+ return []string {"" }, nil
241+ }
242+ list := splitList (value )
243+ if len (list ) == 0 {
244+ errMsg = "Subdomain darf nicht leer sein"
245+ continue
246+ }
247+ return list , nil
228248 }
229249}
230250
231251func (a * App ) askDomainEndings () ([]string , error ) {
232- index , err := selectOption ("Domain-Endung" , []string {"Eigene Endung " , "Endungs-Pool" })
252+ index , err := selectOption ("Domain-Endung" , []string {"Eigene Endungen " , "Endungs-Pool" , "Eigene + Pool" })
233253 if err != nil {
234254 return nil , err
235255 }
@@ -240,19 +260,62 @@ func (a *App) askDomainEndings() ([]string, error) {
240260 }
241261 return endings , nil
242262 }
263+ custom , err := a .askCustomEndings ()
264+ if err != nil {
265+ return nil , err
266+ }
267+ if index == 2 {
268+ endings , err := loadDomainEndings ()
269+ if err != nil {
270+ return append (custom , endings ... ), nil
271+ }
272+ return append (custom , endings ... ), nil
273+ }
274+ return custom , nil
275+ }
276+
277+ func (a * App ) askCustomEndings () ([]string , error ) {
243278 var errMsg string
244279 for {
245- value , err := promptInput ("Domain-Endung " , "z.B. com oder de" , errMsg )
280+ value , err := promptInput ("Domain-Endungen (kommasepariert) " , "z.B. com, de" , errMsg )
246281 if err != nil {
247282 return nil , err
248283 }
249- value = normalizeEnding (value )
284+ value = strings . TrimSpace (value )
250285 if value == "" {
251286 errMsg = "Endung darf nicht leer sein"
252287 continue
253288 }
254- return []string {value }, nil
289+ rawList := splitList (value )
290+ list := make ([]string , 0 , len (rawList ))
291+ for _ , entry := range rawList {
292+ normalized := normalizeEnding (entry )
293+ if normalized == "" {
294+ continue
295+ }
296+ list = append (list , normalized )
297+ }
298+ if len (list ) == 0 {
299+ errMsg = "Endung darf nicht leer sein"
300+ continue
301+ }
302+ return list , nil
303+ }
304+ }
305+
306+ func splitList (value string ) []string {
307+ parts := strings .FieldsFunc (value , func (r rune ) bool {
308+ return r == ',' || unicode .IsSpace (r )
309+ })
310+ list := make ([]string , 0 , len (parts ))
311+ for _ , part := range parts {
312+ part = strings .TrimSpace (part )
313+ if part == "" {
314+ continue
315+ }
316+ list = append (list , part )
255317 }
318+ return list
256319}
257320
258321func (a * App ) askPort (edition ping.Edition ) (int , error ) {
0 commit comments