Search in sources :

Example 11 with Email

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);
}
Also used : Email(com.pratilipi.data.type.Email) DataAccessor(com.pratilipi.data.DataAccessor) ArrayList(java.util.ArrayList)

Example 12 with Email

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());
}
Also used : Pattern(java.util.regex.Pattern) Email(com.pratilipi.data.type.Email) UserData(com.pratilipi.data.client.UserData) Matcher(java.util.regex.Matcher) DataAccessor(com.pratilipi.data.DataAccessor) Date(java.util.Date)

Example 13 with Email

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();
}
Also used : Task(com.pratilipi.taskqueue.Task) Email(com.pratilipi.data.type.Email) User(com.pratilipi.data.type.User) GenericResponse(com.pratilipi.api.shared.GenericResponse) DataAccessor(com.pratilipi.data.DataAccessor) ArrayList(java.util.ArrayList) Date(java.util.Date) RtdbAccessor(com.pratilipi.data.RtdbAccessor) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) UserPreferenceRtdb(com.pratilipi.data.type.UserPreferenceRtdb) SimpleDateFormat(java.text.SimpleDateFormat) HashSet(java.util.HashSet) Get(com.pratilipi.api.annotation.Get)

Aggregations

DataAccessor (com.pratilipi.data.DataAccessor)13 Email (com.pratilipi.data.type.Email)13 Date (java.util.Date)11 ArrayList (java.util.ArrayList)5 HashSet (java.util.HashSet)3 Get (com.pratilipi.api.annotation.Get)2 GenericResponse (com.pratilipi.api.shared.GenericResponse)2 UserData (com.pratilipi.data.client.UserData)2 User (com.pratilipi.data.type.User)2 UserPreferenceRtdb (com.pratilipi.data.type.UserPreferenceRtdb)2 LinkedList (java.util.LinkedList)2 Matcher (java.util.regex.Matcher)2 Pattern (java.util.regex.Pattern)2 GsonLongDateAdapter (com.pratilipi.common.util.GsonLongDateAdapter)1 RtdbAccessor (com.pratilipi.data.RtdbAccessor)1 AppProperty (com.pratilipi.data.type.AppProperty)1 AuditLog (com.pratilipi.data.type.AuditLog)1 Author (com.pratilipi.data.type.Author)1 Comment (com.pratilipi.data.type.Comment)1 Pratilipi (com.pratilipi.data.type.Pratilipi)1