11package net.lospi.dailyc
22
33import groovy.util.logging.Slf4j
4+ import net.lospi.dailyc.comm.MailSender
45import net.lospi.dailyc.comm.MogreetSender
56import net.lospi.dailyc.comm.MogreetSubscriber
67import net.lospi.dailyc.comm.MogreetUploader
8+ import net.lospi.dailyc.core.EmailSubscriber
79import net.lospi.dailyc.core.ImageFile
810import net.lospi.dailyc.core.MessageBody
911import net.lospi.dailyc.core.Subscriber
1012import net.lospi.dailyc.persistence.BatchLoader
1113import net.lospi.dailyc.persistence.Dao
14+ import net.lospi.mail.MailManager
1215import net.lospi.mogreet.core.UploadResponse
1316
1417@Slf4j
1518class DailycManager implements Runnable {
19+ MailSender mailSender
1620 MogreetSender mogreetSender
1721 MogreetSubscriber mogreetSubscriber
1822 MogreetUploader mogreetUploader
@@ -30,39 +34,48 @@ class DailycManager implements Runnable {
3034 log. info(" [+] Loaded {} messages from disk" , messages. size())
3135 def nMessages = dao. loadMessages(messages). size()
3236 log. info(" [+] {} messages updated" , nMessages)
33- log. debug(" [ ] Updating subscribers" )
37+ log. debug(" [ ] Updating MMS subscribers" )
3438 def subscribers = batchLoader. subscribers
35- log. info(" [+] Loaded {} subscribers from disk" , subscribers. size())
39+ log. info(" [+] Loaded {} MMS subscribers from disk" , subscribers. size())
3640 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)
3847 def nextMessage = dao. nextMessageBody()
3948 def nextImage = dao. nextImageFile()
4049 log. info(" [ ] Next message: {}" , nextMessage. contents)
4150 log. info(" [ ] Next image: {}" , nextImage. name)
4251 if (nextMessage. lastUse)
4352 log. warn(" [-] Next message has been used previously: {}" , nextMessage. lastUse)
4453 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)
4655 }
4756
4857 void run () {
4958 def selectedFile = dao. nextImageFile()
5059 def selectedMessage = dao. nextMessageBody()
5160 def subscribers = dao. getSubscribers()
61+ def emailSubscribers = dao. getEmailSubscribers()
5262
53- validateInput(selectedMessage, selectedFile, subscribers)
63+ validateInput(selectedMessage, selectedFile, subscribers, emailSubscribers )
5464 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)
5768 }
5869
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) {
6175 log. info(" [+] Batch completed with all messages sent successfully." )
6276 } 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))
6679 }
6780 }
6881
@@ -84,19 +97,22 @@ class DailycManager implements Runnable {
8497 contentId
8598 }
8699
87- private void validateInput (selectedMessage , selectedFile , numbers ) {
100+ private void validateInput (selectedMessage , selectedFile , numbers , emails ) {
88101 if (! selectedMessage)
89102 throw new RuntimeException (" MessageBodyGenerator returned null message." )
90103 if (! selectedFile)
91104 throw new RuntimeException (" ImageFileGenerator returned null ImageFile." )
92105 if (numbers. size() == 0 )
93106 throw new RuntimeException (" SubscriberGenerator returned no numbers." )
107+ if (emails. size() == 0 )
108+ throw new RuntimeException (" EmailSubscriberGenerator returned no numbers." )
94109 log. info(" [+] Selected message: \" {}\" " , selectedMessage)
95110 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())
97113 }
98114
99- private int sendMessages (List<Subscriber > subscribers , MessageBody messageBody , ImageFile imageFile ,
115+ private int sendMms (List<Subscriber > subscribers , MessageBody messageBody , ImageFile imageFile ,
100116 String contentId ) {
101117 return subscribers. count{ subscriber ->
102118 try {
@@ -107,11 +123,30 @@ class DailycManager implements Runnable {
107123 def mms = dao. createSentMms(subscriber, messageBody, imageFile, date)
108124 log. info(" [+] Sent MMS \n {}" , mms)
109125 } else {
110- log. error(" [-] Not sent to {}:\n {}\n {}" , subscriber, subscribeResponse, sendResponse)
126+ log. error(" [-] MMS not sent to {}:\n {}\n {}" , subscriber, subscribeResponse, sendResponse)
111127 }
112128 return sendResponse. successful
113129 } 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())
115150 return false
116151 }
117152 }
0 commit comments