aboutsummaryrefslogtreecommitdiff
path: root/internal/msg/msg.go
blob: 54c83ac8c6df7b2ee79b8da08bf41341c75d180e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package msg

import (
	"fmt"

	"github.com/Necoro/feed2imap-go/internal/imap"
	"github.com/Necoro/feed2imap-go/pkg/log"
)

// headers
const (
	VersionHeader = "X-Feed2Imap-Version"
	ReasonHeader  = "X-Feed2Imap-Reason"
	IdHeader      = "X-Feed2Imap-Item"
	GuidHeader    = "X-Feed2Imap-Guid"
	CreateHeader  = "X-Feed2Imap-Create-Date"
)

type Messages []Message

type Message struct {
	Content  string
	IsUpdate bool
	ID       string
}

func (m Messages) Upload(client *imap.Client, folder imap.Folder, reupload bool) error {
	toStore := make([]string, 0, len(m))

	updateMsgs := make(chan Message, 5)
	ok := make(chan bool)
	go func() { /* update goroutine */
		errHappened := false
		for msg := range updateMsgs {
			if err := client.Replace(folder, IdHeader, msg.ID, msg.Content, reupload); err != nil {
				log.Errorf("Error while updating mail with id '%s' in folder '%s'. Skipping.: %s",
					msg.ID, folder, err)
				errHappened = true
			}
		}

		ok <- errHappened
	}()

	for _, msg := range m {
		if !msg.IsUpdate {
			toStore = append(toStore, msg.Content)
		} else {
			updateMsgs <- msg
		}
	}

	close(updateMsgs)

	putErr := client.PutMessages(folder, toStore)
	updOk := <-ok

	if putErr != nil {
		return putErr
	}
	if updOk {
		return fmt.Errorf("Errors during updating mails.")
	}

	return nil
}
49 +0100'>2021-01-09Bump github.com/google/uuid from 1.1.2 to 1.1.4dependabot[bot]2-3/+3 2021-01-09Bump github.com/emersion/go-message from 0.14.0 to 0.14.1 (#42)dependabot[bot]2-3/+3 2020-11-28Bump github.com/emersion/go-message from 0.13.0 to 0.14.0 (#38)dependabot[bot]2-3/+9 2020-11-28Bump github.com/google/go-cmp from 0.5.2 to 0.5.4 (#37)dependabot[bot]2-3/+3 2020-11-23Fix release.ymlv0.5.2René 'Necoro' Neumann1-3/+10 2020-11-23Prepare v0.5.2René 'Necoro' Neumann3-3/+8 2020-11-20Bump github.com/gabriel-vasile/mimetype from 1.1.1 to 1.1.2dependabot[bot]2-3/+3 2020-11-04Clean dependabot.ymlRené 'Necoro' Neumann1-4/+0