From f3e25a0846d26e61b80fa6480a3ae93e23b00f97 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 9 Nov 2016 12:00:36 +0800 Subject: [PATCH] Support Match Email condition. Signed-off-by: Bo-Yi Wu --- plugin.go | 49 +++++++++++++++++++++++++++++++++---------------- plugin_test.go | 29 +++++++++-------------------- 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/plugin.go b/plugin.go index e6648fd..b3396d2 100644 --- a/plugin.go +++ b/plugin.go @@ -136,22 +136,43 @@ func convertLocation(value string) (Location, bool) { }, false } -func parseTo(value, authorEmail string) (int64, bool) { - ids := trimElement(strings.Split(value, ":")) +func parseTo(to []string, authorEmail string, matchEmail bool) []int64 { + var emails []int64 + var ids []int64 + attachChat := true - if len(ids) > 1 { - if email := ids[1]; email != authorEmail { - log.Println("email not match") - return int64(0), false + for _, value := range to { + idArray := trimElement(strings.Split(value, ":")) + + // check id + id, err := strconv.ParseInt(idArray[0], 10, 64) + if err != nil { + continue } + + // check match author email + if len(idArray) > 1 { + if email := idArray[1]; email != authorEmail { + continue + } + + emails = append(emails, id) + attachChat = false + continue + } + + ids = append(ids, id) } - id, err := strconv.ParseInt(ids[0], 10, 64) - if err != nil { - return int64(0), false + if matchEmail == true && attachChat == false { + return emails } - return id, true + for _, value := range emails { + ids = append(ids, value) + } + + return ids } // Exec executes the plugin. @@ -180,6 +201,7 @@ func (p Plugin) Exec() error { bot.Debug = p.Config.Debug + ids := parseTo(p.Config.To, p.Build.Email, p.Config.MatchEmail) photos := fileExist(trimElement(p.Config.Photo)) documents := fileExist(trimElement(p.Config.Document)) stickers := fileExist(trimElement(p.Config.Sticker)) @@ -190,12 +212,7 @@ func (p Plugin) Exec() error { venues := trimElement(p.Config.Venue) // send message. - for _, to := range p.Config.To { - user, enable := parseTo(to, p.Build.Email) - if !enable { - continue - } - + for _, user := range ids { for _, value := range trimElement(message) { txt, err := template.RenderTrim(value, p) if err != nil { diff --git a/plugin_test.go b/plugin_test.go index ab51b44..ba541d3 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -133,30 +133,19 @@ func TestTrimElement(t *testing.T) { } func TestParseTo(t *testing.T) { - id, enable := parseTo("1234567890", "test@gmail.com") + input := []string{"0", "1:1@gmail.com", "2:2@gmail.com", "3:3@gmail.com", "4", "5"} - assert.Equal(t, true, enable) - assert.Equal(t, int64(1234567890), id) + ids := parseTo(input, "1@gmail.com", false) + assert.Equal(t, []int64{0, 4, 5, 1}, ids) - id, enable = parseTo("1234567890:test2@gmail.com", "test@gmail.com") + ids = parseTo(input, "1@gmail.com", true) + assert.Equal(t, []int64{1}, ids) - assert.Equal(t, false, enable) - assert.Equal(t, int64(0), id) + ids = parseTo(input, "a@gmail.com", false) + assert.Equal(t, []int64{0, 4, 5}, ids) - id, enable = parseTo("1234567890:test@gmail.com", "test@gmail.com") - - assert.Equal(t, true, enable) - assert.Equal(t, int64(1234567890), id) - - id, enable = parseTo("測試:test@gmail.com", "test@gmail.com") - - assert.Equal(t, false, enable) - assert.Equal(t, int64(0), id) - - id, enable = parseTo("測試", "test@gmail.com") - - assert.Equal(t, false, enable) - assert.Equal(t, int64(0), id) + ids = parseTo(input, "a@gmail.com", true) + assert.Equal(t, []int64{0, 4, 5}, ids) } func TestCheckFileExist(t *testing.T) {