diff --git a/go.mod b/go.mod index 26ea6df..33e4752 100644 --- a/go.mod +++ b/go.mod @@ -5,4 +5,14 @@ go 1.17 require ( github.com/robfig/cron/v3 v3.0.1 gopkg.in/yaml.v2 v2.4.0 + local/sandbox/contact/contact v0.0.0-00010101000000-000000000000 ) + +require ( + github.com/bytbox/go-pop3 v0.0.0-20120201222208-3046caf0763e // indirect + github.com/emersion/go-imap v1.2.0 // indirect + github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 // indirect + golang.org/x/text v0.3.7 // indirect +) + +replace local/sandbox/contact/contact => ../sandbox/contact/contact diff --git a/go.sum b/go.sum index 441e8f1..2842c41 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,17 @@ +github.com/bytbox/go-pop3 v0.0.0-20120201222208-3046caf0763e h1:mQTN05gz0rDZSABqKMzAPMb5ATWcvvdMljRzEh0LjBo= +github.com/bytbox/go-pop3 v0.0.0-20120201222208-3046caf0763e/go.mod h1:alXX+s7a4cKaIprgjeEboqi4Tm7XR/HXEwUTxUV/ywU= +github.com/emersion/go-imap v1.2.0 h1:lyUQ3+EVM21/qbWE/4Ya5UG9r5+usDxlg4yfp3TgHFA= +github.com/emersion/go-imap v1.2.0/go.mod h1:Qlx1FSx2FTxjnjWpIlVNEuX+ylerZQNFE5NsmKFSejY= +github.com/emersion/go-message v0.15.0/go.mod h1:wQUEfE+38+7EW8p8aZ96ptg6bAb1iwdgej19uXASlE4= +github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 h1:OJyUGMJTzHTd1XQp98QTaHernxMYzRaOasRir9hUlFQ= +github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= +github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= diff --git a/pttodo/action.go b/pttodo/action.go new file mode 100644 index 0000000..8a43336 --- /dev/null +++ b/pttodo/action.go @@ -0,0 +1,36 @@ +package pttodo + +import ( + "errors" + "local/sandbox/contact/contact" + "net/url" + "regexp" +) + +type Action string + +var ( + actionEmailPattern = regexp.MustCompile(`[^@]+@.*[^\.]+\.[a-z]+`) +) + +func (action Action) String() string { + return string(action) +} + +func (action Action) CB() (func() error, error) { + u, _ := url.Parse(action.String()) + switch u.Scheme { + case "email": + return action.email + } + if actionEmailPattern.MatchString(action.String()) { + return action.email, nil + } + return nil, errors.New("unrecognized action") +} + +func (action Action) email() error { + em := contact.NewEmailer() + _ = em + return errors.New("not impl") +}