github.com/kcmerrill/alfred@v0.0.0-20180727171036-06445dcb5e3d/pkg/alfred/taskparser.go (about) 1 package alfred 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 // MagicTaskURL will parse "magic" tasks, as denoted by "__" 9 func MagicTaskURL(task string) string { 10 url, _ := TaskParser(task, "alfred:list") 11 if strings.HasPrefix(url, "http") { 12 return url + ":" 13 } 14 return "" 15 } 16 17 // TaskParser returns a url and a task(default if necessary) (location, task) 18 func TaskParser(task, defaultTask string) (string, string) { 19 // does it start with http? 20 if strings.HasPrefix(task, "http") && strings.Contains(task, "://") { 21 // we have to get the http: colon out of the way :( 22 bits := strings.SplitN(task, ":", 3) 23 url := strings.Join(bits[0:2], ":") 24 if len(bits) >= 3 { 25 // alright, so we have tasks and args ... 26 return url, bits[2] 27 } 28 return url, defaultTask 29 } 30 31 // is this a catalog? 32 if isCatalog(task) { 33 bits := strings.Split(task, ":") 34 if len(bits) >= 2 { 35 return bits[0], bits[1] 36 } 37 return bits[0], defaultTask 38 } 39 40 // does it start with a /? AND not a local directory? Aka a remote task? 41 if strings.HasPrefix(task, "/") { 42 bits := strings.Split(task, ":") 43 url := fmt.Sprintf("https://raw.githubusercontent.com/kcmerrill/alfred/master/remote-modules%s.yml", bits[0]) 44 45 if len(bits) >= 2 { 46 return url, bits[1] 47 } 48 return url, defaultTask 49 } 50 51 // lets check if this is a github file(and not a local ./ task) 52 if !strings.HasPrefix(task, "./") && strings.Contains(task, "/") { 53 bits := strings.Split(task, ":") 54 url := fmt.Sprintf("https://raw.githubusercontent.com/%s/master/alfred.yml", bits[0]) 55 if len(bits) >= 2 { 56 return url, bits[1] 57 } 58 return url, defaultTask 59 } 60 61 if task == "" { 62 return "./", defaultTask 63 } 64 65 if strings.HasPrefix(task, "!") { 66 return "./", "!exec.command" 67 } 68 69 // alright, so it's not a url, it's not a github repo, it must be just a regular local task 70 bits := strings.Split(task, ":") 71 if len(bits) >= 2 { 72 return bits[0], bits[1] 73 } 74 return "./", bits[0] 75 }