use of com.pratilipi.data.type.Email in project pratilipi by Pratilipi.
the class EmailDataUtil method sendEmailsToUser.
public static void sendEmailsToUser(Long userId) throws UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
DataListIterator<Email> it = dataAccessor.getEmailListIteratorForStatePending(userId, true);
List<Email> emailList = new ArrayList<>();
while (it.hasNext()) emailList.add(it.next());
_sendConsolidatedEmail(userId, emailList);
}
use of com.pratilipi.data.type.Email in project pratilipi by Pratilipi.
the class EmailDataUtil method sendEmail.
public static void sendEmail(Long emailId) throws UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Email email = dataAccessor.getEmail(emailId);
if (email.getState() != EmailState.IN_PROGRESS)
return;
UserData user = UserDataUtil.createUserData(dataAccessor.getUser(email.getUserId()));
if (user.getDisplayName() == null || user.getLanguage() == null || (!_isToday(email.getScheduledDate()) && email.getScheduledDate().before(new Date()))) {
email.setState(EmailState.DROPPED);
email.setLastUpdated(new Date());
email = dataAccessor.createOrUpdateEmail(email);
return;
}
String content = _getContentSnippet(email, user.getLanguage());
Pattern senderNamePattern = Pattern.compile("<!-- SENDER_NAME:(.+?) -->");
Pattern senderEmailPattern = Pattern.compile("<!-- SENDER_EMAIL:(.+?) -->");
Pattern subjectPattern = Pattern.compile("<div subject .+?>(.+?)<\\/div>");
String senderName = null;
String senderEmail = null;
String subject = null;
Matcher m = null;
if ((m = senderNamePattern.matcher(content)).find())
senderName = m.group(1).trim();
if ((m = senderEmailPattern.matcher(content)).find())
senderEmail = m.group(1).trim();
if ((m = subjectPattern.matcher(content)).find())
subject = m.group(1).trim();
EmailUtil.sendMail(senderName, senderEmail, user.getDisplayName(), user.getEmail(), subject, EmailTemplateUtil.getEmailBody(content, user.getLanguage() != null ? user.getLanguage() : Language.ENGLISH));
email.setState(EmailState.SENT);
email.setLastUpdated(new Date());
dataAccessor.createOrUpdateEmail(email);
_updateUserEntity(email.getUserId());
}
use of com.pratilipi.data.type.Email in project pratilipi by Pratilipi.
the class EmailProcessApi method get.
@Get
public GenericResponse get(GenericRequest request) throws UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
RtdbAccessor rtdbAccessor = DataAccessorFactory.getRtdbAccessor();
Map<Long, UserPreferenceRtdb> userPreferences = null;
List<Email> emailList = new ArrayList<>();
DataListIterator<Email> it = dataAccessor.getEmailListIteratorForStatePending(null, false);
Set<Long> userIds = new HashSet<>();
while (it.hasNext()) {
Email email = it.next();
emailList.add(email);
userIds.add(email.getUserId());
}
userPreferences = rtdbAccessor.getUserPreferences(userIds);
Map<Long, User> users = dataAccessor.getUsers(userPreferences.keySet());
// Re-scheduling for all Emails
DateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss z");
dateFormat.setTimeZone(TimeZone.getTimeZone("IST"));
for (Email email : emailList) {
UserPreferenceRtdb preference = userPreferences.get(email.getUserId());
User user = users.get(email.getUserId());
if (email.getScheduledDate().before(new Date()))
continue;
if (email.getScheduledDate().equals(preference.getEmailFrequency().getNextSchedule(user.getLastEmailedDate())))
continue;
email.setScheduledDate(preference.getEmailFrequency().getNextSchedule(user.getLastEmailedDate()));
email.setLastUpdated(new Date());
if (email.getScheduledDate() == null) {
// User changed setting to NEVER -> Scheduled Date will be null
email.setState(EmailState.DROPPED);
} else {
logger.log(Level.INFO, "Rescheduling email: " + email.getId() + " from " + dateFormat.format(email.getScheduledDate()) + " to " + dateFormat.format(preference.getEmailFrequency().getNextSchedule(user.getLastEmailedDate())));
}
}
// Creating Tasks
List<Task> taskList = new ArrayList<>();
Set<Long> userIdTaskSet = new HashSet<>();
for (Email email : emailList) {
if (// User changed setting to NEVER -> Email Dropped
email.getState() != EmailState.PENDING)
continue;
if (email.getScheduledDate().after(new Date()))
continue;
UserPreferenceRtdb preference = userPreferences.get(email.getUserId());
if (preference.getEmailFrequency() == EmailFrequency.IMMEDIATELY)
taskList.add(TaskQueueFactory.newTask().setUrl("/email/process").addParam("emailId", email.getId().toString()));
else
userIdTaskSet.add(email.getUserId());
email.setState(EmailState.IN_PROGRESS);
email.setLastUpdated(new Date());
}
for (Long userId : userIdTaskSet) taskList.add(TaskQueueFactory.newTask().setUrl("/email/process").addParam("userId", userId.toString()));
TaskQueueFactory.getEmailHpTaskQueue().addAll(taskList);
emailList = dataAccessor.createOrUpdateEmailList(emailList);
return new GenericResponse();
}
Aggregations