|
@@ -59,8 +59,8 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
|
|
|
String email = bindingVo.getEmail();
|
|
|
|
|
|
- ProgressVo progressVo = RedisCache.get(RedisConstant.PROGRESS_KEY + email);
|
|
|
- Assert.isNull(progressVo, "邮箱正在同步中,请勿重复操作");
|
|
|
+ // ProgressVo progressVo = RedisCache.get(RedisConstant.PROGRESS_KEY + email);
|
|
|
+ // Assert.isNull(progressVo, "邮箱正在同步中,请勿重复操作");
|
|
|
|
|
|
EmailInfo emailInfo = emailInfoService.getOne(Wrappers.<EmailInfo>lambdaQuery().eq(EmailInfo::getEmail, email));
|
|
|
// 如果存在,直接返回邮箱信息
|
|
@@ -103,7 +103,12 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
case MAILBOX_NEW:
|
|
|
this.handleMailboxNewEvent(listenerVo);
|
|
|
break;
|
|
|
-
|
|
|
+ case MAILBOX_DELETED:
|
|
|
+ this.handleMailboxDeleteEvent(listenerVo);
|
|
|
+ break;
|
|
|
+ case MAILBOX_RESET:
|
|
|
+ this.handleMailboxResetEvent(listenerVo);
|
|
|
+ break;
|
|
|
default:
|
|
|
log.error("监听到未知事件:{}", JSONObject.toJSONString(listenerVo));
|
|
|
}
|
|
@@ -139,6 +144,33 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 同步邮件进度初始化
|
|
|
+ */
|
|
|
+ private void synchronizationProgressInitialization(String email, List<EmailMailboxVo.MailboxesDTO> mailboxList) {
|
|
|
+
|
|
|
+ ProgressVo progressVo = new ProgressVo();
|
|
|
+
|
|
|
+
|
|
|
+ List<ProgressVo.Details> detailsList = BeanUtil.copyToList(mailboxList, ProgressVo.Details.class);
|
|
|
+
|
|
|
+ int totalMessageCount = 0;
|
|
|
+
|
|
|
+ for (ProgressVo.Details detail : detailsList) {
|
|
|
+ detail.setCompleteMessageCount(0);
|
|
|
+ detail.setPercentage(0);
|
|
|
+ totalMessageCount += detail.getMessages();
|
|
|
+ }
|
|
|
+
|
|
|
+ progressVo.setEmail(email);
|
|
|
+ progressVo.setTotalMessageCount(totalMessageCount);
|
|
|
+ progressVo.setCompleteMessageCount(0);
|
|
|
+ progressVo.setPercentage(0);
|
|
|
+ progressVo.setDetailsList(detailsList);
|
|
|
+
|
|
|
+ RedisCache.set(RedisConstant.PROGRESS_KEY + email, progressVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 异步读取文件
|
|
|
*/
|
|
|
private void asyncReadEmail(String email, List<EmailMailbox> emailMailboxList) {
|
|
@@ -153,11 +185,16 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
int page = 0;
|
|
|
int pages;
|
|
|
do {
|
|
|
- MessageVo result = EmailEngineUtil.handleMessageList(email, emailMailbox.getPath(), page);
|
|
|
+ MessageVo result = EmailEngineUtil.getMessageList(email, emailMailbox.getPath(), page);
|
|
|
List<MessageVo.MessagesDTO> messagesDTOList = result.getMessages();
|
|
|
if (messagesDTOList.size() > 0) {
|
|
|
- this.saveBatchMessage(email, lastMessageIdList, emailMailbox, messagesDTOList);
|
|
|
+ List<EmailMessage> emailMessageList = this.saveBatchMessage(email, lastMessageIdList, emailMailbox, messagesDTOList);
|
|
|
this.synchronizationProgress(email, messagesDTOList, emailMailbox);
|
|
|
+
|
|
|
+ lastMessageIdList.clear();
|
|
|
+ for (EmailMessage emailMessage : emailMessageList) {
|
|
|
+ lastMessageIdList.add(emailMessage.getMessageId());
|
|
|
+ }
|
|
|
}
|
|
|
pages = result.getPages();
|
|
|
page++;
|
|
@@ -170,7 +207,7 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
/**
|
|
|
* 批量保存邮件信息
|
|
|
*/
|
|
|
- private void saveBatchMessage(String email, List<String> lastMessageId, EmailMailbox emailMailbox, List<MessageVo.MessagesDTO> messageList) {
|
|
|
+ private List<EmailMessage> saveBatchMessage(String email, List<String> lastMessageId, EmailMailbox emailMailbox, List<MessageVo.MessagesDTO> messageList) {
|
|
|
List<EmailMessage> emailMessageList = new ArrayList<>();
|
|
|
List<EmailMessageSend> emailMessageSendList = new ArrayList<>();
|
|
|
List<EmailMessageAttachment> emailMessageAttachmentList = new ArrayList<>();
|
|
@@ -199,11 +236,7 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
// 保存附件信息
|
|
|
emailMessageAttachmentService.saveBatch(emailMessageAttachmentList);
|
|
|
|
|
|
- lastMessageId.clear();
|
|
|
- for (EmailMessage emailMessage : emailMessageList) {
|
|
|
- lastMessageId.add(emailMessage.getMessageId());
|
|
|
- }
|
|
|
-
|
|
|
+ return emailMessageList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -324,32 +357,6 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 同步邮件进度初始化
|
|
|
- */
|
|
|
- private void synchronizationProgressInitialization(String email, List<EmailMailboxVo.MailboxesDTO> mailboxList) {
|
|
|
-
|
|
|
- ProgressVo progressVo = new ProgressVo();
|
|
|
-
|
|
|
-
|
|
|
- List<ProgressVo.Details> detailsList = BeanUtil.copyToList(mailboxList, ProgressVo.Details.class);
|
|
|
-
|
|
|
- int totalMessageCount = 0;
|
|
|
-
|
|
|
- for (ProgressVo.Details detail : detailsList) {
|
|
|
- detail.setCompleteMessageCount(0);
|
|
|
- detail.setPercentage(0);
|
|
|
- totalMessageCount += detail.getMessages();
|
|
|
- }
|
|
|
-
|
|
|
- progressVo.setTotalMessageCount(totalMessageCount);
|
|
|
- progressVo.setCompleteMessageCount(0);
|
|
|
- progressVo.setPercentage(0);
|
|
|
- progressVo.setDetailsList(detailsList);
|
|
|
-
|
|
|
- RedisCache.set(RedisConstant.PROGRESS_KEY + email, progressVo);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* 同步邮件进度
|
|
|
*/
|
|
|
private void synchronizationProgress(String email, List<MessageVo.MessagesDTO> messagesDTOList, EmailMailbox emailMailbox) {
|
|
@@ -426,20 +433,54 @@ public class AccountServiceImpl implements IAccountService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 邮件flag被改变件
|
|
|
+ * 邮件flag被改变事件
|
|
|
*/
|
|
|
private void handleMessageUpdatedEvent(ListenerVo listenerVo) {
|
|
|
// System.err.println(JSONObject.toJSONString(listenerVo));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 新增文件夹
|
|
|
+ * 新增文件夹事件
|
|
|
*/
|
|
|
private void handleMailboxNewEvent(ListenerVo listenerVo) {
|
|
|
|
|
|
- System.err.println(JSONObject.toJSONString(listenerVo));
|
|
|
+ EmailMailboxVo.MailboxesDTO mailboxesDTO = listenerVo.getData().toJavaObject(EmailMailboxVo.MailboxesDTO.class);
|
|
|
|
|
|
+ EmailInfo emailInfo = emailInfoService.getOne(
|
|
|
+ Wrappers.<EmailInfo>lambdaQuery().eq(EmailInfo::getEmail, listenerVo.getAccount()));
|
|
|
+
|
|
|
+ EmailMailbox emailMailbox = new EmailMailbox();
|
|
|
+ emailMailbox.setEmailInfoId(emailInfo.getId());
|
|
|
+ emailMailbox.setEmail(emailInfo.getEmail());
|
|
|
+ emailMailbox.setName(mailboxesDTO.getName());
|
|
|
+ emailMailbox.setPath(mailboxesDTO.getPath());
|
|
|
+ emailMailbox.setIsShow(true);
|
|
|
+ emailMailbox.setInitialize(true);
|
|
|
+ emailMailboxService.save(emailMailbox);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 删除文件夹事件
|
|
|
+ */
|
|
|
+ private void handleMailboxDeleteEvent(ListenerVo listenerVo) {
|
|
|
+ EmailMailboxVo.MailboxesDTO mailboxesDTO = listenerVo.getData().toJavaObject(EmailMailboxVo.MailboxesDTO.class);
|
|
|
+
|
|
|
+ boolean remove = emailMailboxService.remove(Wrappers.<EmailMailbox>lambdaQuery()
|
|
|
+ .eq(EmailMailbox::getPath, mailboxesDTO.getPath())
|
|
|
+ .eq(EmailMailbox::getEmail, listenerVo.getAccount())
|
|
|
+ );
|
|
|
+
|
|
|
+ if (!remove) {
|
|
|
+ log.error("文件夹删除失败:email '{}',path '{}'", listenerVo.getAccount(), mailboxesDTO.getPath());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新文件夹事件
|
|
|
+ */
|
|
|
+ public void handleMailboxResetEvent(ListenerVo listenerVo) {
|
|
|
+ System.err.println(listenerVo);
|
|
|
+ }
|
|
|
|
|
|
}
|