@@ -13,6 +13,7 @@ import (
13
13
"github.com/emersion/go-message"
14
14
"github.com/emersion/go-message/charset"
15
15
"github.com/emersion/go-message/mail"
16
+ "github.com/schollz/progressbar/v3"
16
17
"github.com/sirupsen/logrus"
17
18
"io"
18
19
"io/ioutil"
@@ -30,7 +31,8 @@ type EmailEngine struct {
30
31
client * client.Client
31
32
configuration config.Interface
32
33
33
- report map [string ]* model.SenderReport
34
+ progressBar * progressbar.ProgressBar
35
+ report map [string ]* model.SenderReport
34
36
}
35
37
36
38
func New (logger * logrus.Entry , configuration config.Interface ) (EmailEngine , error ) {
@@ -73,21 +75,25 @@ func (ee *EmailEngine) Start() error {
73
75
totalMessages = 0
74
76
page := 0
75
77
76
- for {
77
- // get latest mailbox information
78
- //https://bitmapcake.blogspot.com/2018/07/gmail-mailbox-names-for-imap-connections.html
79
- mbox , err := ee .client .Select (ee .configuration .GetString ("imap-mailbox-name" ), false )
80
- if err != nil {
81
- ee .logger .Fatal (err )
82
- }
83
- // Get all messages
84
- totalMessages = mbox .Messages
78
+ // get latest mailbox information
79
+ //https://bitmapcake.blogspot.com/2018/07/gmail-mailbox-names-for-imap-connections.html
80
+ mbox , err := ee .client .Select (ee .configuration .GetString ("imap-mailbox-name" ), false )
81
+ if err != nil {
82
+ ee .logger .Fatal (err )
83
+ }
84
+ // Get count of all messages
85
+ totalMessages = mbox .Messages
85
86
86
- if totalMessages == 0 {
87
- //if theres no messages to process, break out of the loop
88
- ee .logger .Printf ("No messages to process" )
89
- break
90
- }
87
+ //set a progress bar
88
+ ee .progressBar = progressbar .Default (int64 (totalMessages ))
89
+
90
+ if totalMessages == 0 {
91
+ //if theres no messages to process, break out of the loop
92
+ ee .logger .Printf ("No messages to process" )
93
+ return errors .New ("No messages to process" )
94
+ }
95
+
96
+ for {
91
97
// 1-500, 501-1000
92
98
from := uint32 ((page * BATCH_SIZE ) + 1 )
93
99
to := uint32 ((page + 1 ) * BATCH_SIZE )
@@ -99,7 +105,7 @@ func (ee *EmailEngine) Start() error {
99
105
seqset := new (imap.SeqSet )
100
106
seqset .AddRange (from , to )
101
107
102
- ee .logger .Printf ("Retrieving messages (%d-%d, page: %d, total: %d)" , from , to , page , totalMessages )
108
+ ee .logger .Debugf ("Retrieving messages (%d-%d, page: %d, total: %d)" , from , to , page , totalMessages )
103
109
ee .retrieveMessages (seqset )
104
110
105
111
if totalMessages <= to {
@@ -173,6 +179,7 @@ func (ee *EmailEngine) retrieveMessages(seqset *imap.SeqSet) {
173
179
if err != nil {
174
180
ee .logger .Errorf ("error processing message: %v" , err )
175
181
}
182
+ ee .progressBar .Add (1 )
176
183
}
177
184
178
185
if err := <- done ; err != nil {
@@ -333,7 +340,7 @@ func (ee *EmailEngine) extractBodyUnsubscribe(msg *imap.Message) ([]string, erro
333
340
linkTextCompare := strings .ToLower (link .Text ())
334
341
335
342
if strings .Contains (linkTextCompare , "subscribe" ) {
336
- ee .logger .Infof ("body unsubscribe link -> [%s](%s)\n " , link .Text (), link .Attrs ()["href" ])
343
+ ee .logger .Debugf ("body unsubscribe link -> [%s](%s)\n " , link .Text (), link .Attrs ()["href" ])
337
344
unsubscribeUris = append (unsubscribeUris , link .Attrs ()["href" ])
338
345
}
339
346
}
0 commit comments