xdcc-cli/url.go

53 lines
1.0 KiB
Go

package main
import (
"errors"
"fmt"
"strconv"
"strings"
)
type IRCFileURL struct {
Network string
Channel string
UserName string
Slot int
}
const ircFileURLFields = 4
func parseSlot(slotStr string) (int, error) {
if !strings.HasPrefix(slotStr, "#") {
return -1, errors.New("invalid slot")
}
return strconv.Atoi(strings.TrimPrefix(slotStr, "#"))
}
// url has the following format: irc://network/channel/bot/#slot
func parseIRCFileURl(url string) (*IRCFileURL, error) {
if !strings.HasPrefix(url, "irc://") {
return nil, errors.New("not an IRC url")
}
fields := strings.Split(strings.TrimPrefix(url, "irc://"), "/")
if len(fields) != ircFileURLFields {
return nil, errors.New("invalid IRC url")
}
slot, err := parseSlot(fields[3])
if err != nil {
return nil, err
}
return &IRCFileURL{
Network: fields[0],
Channel: fields[1],
UserName: fields[2],
Slot: slot,
}, nil
}
func (url *IRCFileURL) String() string {
return fmt.Sprintf("irc://%s/%s/%s/#%d", url.Network, url.Channel, url.UserName, url.Slot)
}