aboutsummaryrefslogtreecommitdiff
path: root/internal/msg/msg.go
blob: a742a9da5b0a12b3a536732fa1f318616102274c (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
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"
)

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))

	msgs := make(chan Message, 5)
	ok := make(chan bool)
	go func() {
		errHappened := false
		for msg := range msgs {
			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 {
			msgs <- msg
		}
	}

	close(msgs)

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

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

	return nil
}
ssue #46: Improvements; add testsRené 'Necoro' Neumann2-1/+48 2021-02-15Bump github.com/google/uuid from 1.1.4 to 1.2.0dependabot[bot]2-3/+3 2021-02-15Issue #46: Make the resulting email body not to include single \r or \n. This...René 'Necoro' Neumann2-2/+66 2021-01-20Bump github.com/PuerkitoBio/goquery from 1.6.0 to 1.6.1dependabot[bot]2-3/+3 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