(parsed *url.URL)
| 126 | } |
| 127 | |
| 128 | func parseVimeoURL(parsed *url.URL) (model.Type, string, error) { |
| 129 | parts := strings.Split(parsed.EscapedPath(), "/") |
| 130 | if len(parts) <= 1 { |
| 131 | return "", "", errors.New("invalid vimeo link path") |
| 132 | } |
| 133 | |
| 134 | var kind model.Type |
| 135 | switch parts[1] { |
| 136 | case "groups": |
| 137 | kind = model.TypeGroup |
| 138 | case "channels": |
| 139 | kind = model.TypeChannel |
| 140 | default: |
| 141 | kind = model.TypeUser |
| 142 | } |
| 143 | |
| 144 | if kind == model.TypeGroup || kind == model.TypeChannel { |
| 145 | if len(parts) <= 2 { |
| 146 | return "", "", errors.New("invalid channel link") |
| 147 | } |
| 148 | |
| 149 | id := parts[2] |
| 150 | if id == "" { |
| 151 | return "", "", errors.New("invalid id") |
| 152 | } |
| 153 | |
| 154 | return kind, id, nil |
| 155 | } |
| 156 | |
| 157 | if kind == model.TypeUser { |
| 158 | id := parts[1] |
| 159 | if id == "" { |
| 160 | return "", "", errors.New("invalid id") |
| 161 | } |
| 162 | |
| 163 | return kind, id, nil |
| 164 | } |
| 165 | |
| 166 | return "", "", errors.New("unsupported link format") |
| 167 | } |
| 168 | |
| 169 | func parseSoundcloudURL(parsed *url.URL) (model.Type, string, error) { |
| 170 | parts := strings.Split(parsed.EscapedPath(), "/") |
no outgoing calls