1
1
package net.lospi.dailyc
2
2
3
3
import groovy.util.logging.Slf4j
4
+ import net.lospi.dailyc.comm.MailSender
4
5
import net.lospi.dailyc.comm.MogreetSender
5
6
import net.lospi.dailyc.comm.MogreetSubscriber
6
7
import net.lospi.dailyc.comm.MogreetUploader
8
+ import net.lospi.dailyc.core.EmailSubscriber
7
9
import net.lospi.dailyc.core.ImageFile
8
10
import net.lospi.dailyc.core.MessageBody
9
11
import net.lospi.dailyc.core.Subscriber
10
12
import net.lospi.dailyc.persistence.BatchLoader
11
13
import net.lospi.dailyc.persistence.Dao
14
+ import net.lospi.mail.MailManager
12
15
import net.lospi.mogreet.core.UploadResponse
13
16
14
17
@Slf4j
15
18
class DailycManager implements Runnable {
19
+ MailSender mailSender
16
20
MogreetSender mogreetSender
17
21
MogreetSubscriber mogreetSubscriber
18
22
MogreetUploader mogreetUploader
@@ -30,39 +34,48 @@ class DailycManager implements Runnable {
30
34
log. info(" [+] Loaded {} messages from disk" , messages. size())
31
35
def nMessages = dao. loadMessages(messages). size()
32
36
log. info(" [+] {} messages updated" , nMessages)
33
- log. debug(" [ ] Updating subscribers" )
37
+ log. debug(" [ ] Updating MMS subscribers" )
34
38
def subscribers = batchLoader. subscribers
35
- log. info(" [+] Loaded {} subscribers from disk" , subscribers. size())
39
+ log. info(" [+] Loaded {} MMS subscribers from disk" , subscribers. size())
36
40
def nSubscribers = dao. loadSubscribers(subscribers). size()
37
- log. info(" [+] {} subscribers updated" , nSubscribers)
41
+ log. info(" [+] {} MMS subscribers updated" , nSubscribers)
42
+ log. debug(" [ ] Updating email subscribers" )
43
+ def emailSubscribers = batchLoader. emailSubscribers
44
+ log. info(" [+] Loaded {} email subscribers from disk" , emailSubscribers. size())
45
+ def nEmailSubscribers = dao. loadEmailSubscribers(emailSubscribers). size()
46
+ log. info(" [+] {} email subscribers updated" , nEmailSubscribers)
38
47
def nextMessage = dao. nextMessageBody()
39
48
def nextImage = dao. nextImageFile()
40
49
log. info(" [ ] Next message: {}" , nextMessage. contents)
41
50
log. info(" [ ] Next image: {}" , nextImage. name)
42
51
if (nextMessage. lastUse)
43
52
log. warn(" [-] Next message has been used previously: {}" , nextMessage. lastUse)
44
53
if (nextImage. lastUse)
45
- log. warn(" [-] Previous message has been used previously: {}" , nextImage. lastUse)
54
+ log. warn(" [-] Next image has been used previously: {}" , nextImage. lastUse)
46
55
}
47
56
48
57
void run () {
49
58
def selectedFile = dao. nextImageFile()
50
59
def selectedMessage = dao. nextMessageBody()
51
60
def subscribers = dao. getSubscribers()
61
+ def emailSubscribers = dao. getEmailSubscribers()
52
62
53
- validateInput(selectedMessage, selectedFile, subscribers)
63
+ validateInput(selectedMessage, selectedFile, subscribers, emailSubscribers )
54
64
String contentId = uploadContent(selectedFile)
55
- int messagesSuccessful = sendMessages(subscribers, selectedMessage, selectedFile, contentId)
56
- reportOnBatchSuccess(messagesSuccessful, subscribers)
65
+ int mmsSuccessful = sendMms(subscribers, selectedMessage, selectedFile, contentId)
66
+ int emailSuccessful = sendEmail(emailSubscribers, selectedMessage, selectedFile)
67
+ reportOnBatchSuccess(mmsSuccessful, emailSuccessful, subscribers, emailSubscribers)
57
68
}
58
69
59
- private void reportOnBatchSuccess (int messagesSuccessful , List<Subscriber > numbers ) {
60
- if (messagesSuccessful == numbers. size()) {
70
+ private void reportOnBatchSuccess (int mmsSuccessful , int emailSuccessful ,
71
+ List<Subscriber > numbers , List<EmailSubscriber > emails ) {
72
+ def numberRequested = numbers. size() + emails. size()
73
+ def numberSuccessful = mmsSuccessful + emailSuccessful;
74
+ if (numberRequested == numberSuccessful) {
61
75
log. info(" [+] Batch completed with all messages sent successfully." )
62
76
} else {
63
- def numberFailed = numbers. size() - messagesSuccessful
64
- log. error(" [-] Batch completed with {} of {} messages sent successfully." , messagesSuccessful, numbers. size())
65
- throw new RuntimeException (String . format(" %d messages failed to send" , numberFailed))
77
+ log. error(" [-] Batch completed with {} of {} messages sent successfully." , numberSuccessful, numberRequested)
78
+ throw new RuntimeException (String . format(" %d messages failed to send" , numberRequested - numberSuccessful))
66
79
}
67
80
}
68
81
@@ -84,19 +97,22 @@ class DailycManager implements Runnable {
84
97
contentId
85
98
}
86
99
87
- private void validateInput (selectedMessage , selectedFile , numbers ) {
100
+ private void validateInput (selectedMessage , selectedFile , numbers , emails ) {
88
101
if (! selectedMessage)
89
102
throw new RuntimeException (" MessageBodyGenerator returned null message." )
90
103
if (! selectedFile)
91
104
throw new RuntimeException (" ImageFileGenerator returned null ImageFile." )
92
105
if (numbers. size() == 0 )
93
106
throw new RuntimeException (" SubscriberGenerator returned no numbers." )
107
+ if (emails. size() == 0 )
108
+ throw new RuntimeException (" EmailSubscriberGenerator returned no numbers." )
94
109
log. info(" [+] Selected message: \" {}\" " , selectedMessage)
95
110
log. info(" [+] Selected file: {}" , selectedFile)
96
- log. info(" [+] {} subscribers." , numbers. size())
111
+ log. info(" [+] {} MMS subscribers." , numbers. size())
112
+ log. info(" [+] {} email subscribers." , numbers. size())
97
113
}
98
114
99
- private int sendMessages (List<Subscriber > subscribers , MessageBody messageBody , ImageFile imageFile ,
115
+ private int sendMms (List<Subscriber > subscribers , MessageBody messageBody , ImageFile imageFile ,
100
116
String contentId ) {
101
117
return subscribers. count{ subscriber ->
102
118
try {
@@ -107,11 +123,30 @@ class DailycManager implements Runnable {
107
123
def mms = dao. createSentMms(subscriber, messageBody, imageFile, date)
108
124
log. info(" [+] Sent MMS \n {}" , mms)
109
125
} else {
110
- log. error(" [-] Not sent to {}:\n {}\n {}" , subscriber, subscribeResponse, sendResponse)
126
+ log. error(" [-] MMS not sent to {}:\n {}\n {}" , subscriber, subscribeResponse, sendResponse)
111
127
}
112
128
return sendResponse. successful
113
129
} catch (any) {
114
- log. error(" [-] Could not subscribe/send to {}:\n " , subscriber, any. toString())
130
+ log. error(" [-] Could not subscribe/send to {}: {}\n " , subscriber, any. toString())
131
+ return false
132
+ }
133
+ }
134
+ }
135
+
136
+ private int sendEmail (List<EmailSubscriber > emailSubscribers , MessageBody messageBody , ImageFile imageFile ) {
137
+ return emailSubscribers. count{ subscriber ->
138
+ try {
139
+ def sendResponse = mailSender. send(subscriber, messageBody, imageFile)
140
+ if (sendResponse. successful) {
141
+ Date date = new Date ()
142
+ def email = dao. createSentEmail(subscriber, messageBody, imageFile, date)
143
+ log. info(" [+] Sent email \n {}" , email)
144
+ } else {
145
+ log. error(" [-] Email not sent to {}:\n {}" , subscriber, sendResponse)
146
+ }
147
+ return sendResponse. successful
148
+ } catch (any) {
149
+ log. error(" [-] Could not send to {}: {}\n " , subscriber, any. toString())
115
150
return false
116
151
}
117
152
}
0 commit comments