Skip to content

Commit

Permalink
Fix Bug Not Delete ReminderTask despite Cleared Event. fixes #282 @2h
Browse files Browse the repository at this point in the history
…#286
  • Loading branch information
みぞ@CrazyBeatCoder committed Jan 21, 2018
1 parent 1c19c08 commit c67a1f0
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 21 deletions.
30 changes: 24 additions & 6 deletions src/main/java/com/mizo0203/lilywhite/repo/PushQueueRepository.java
Expand Up @@ -21,12 +21,30 @@ public void destroy() {
// NOP
}

protected void enqueueReminderTask(String source_id, long etaMillis, String message) {
/**
* リマインダータスクを追加する
*
* @param source_id
* 送信先のID。Webhookイベントオブジェクトで返される、userId、groupId、またはroomIdの値を使用します。LINEアプリに表示されるLINE
* IDは使用しないでください。
* @param etaMillis Sets the approximate absolute time to execute. (i.e. etaMillis is comparable
* with {@link System#currentTimeMillis()}).
* @param message メッセージのテキスト。最大文字数:2000
* @return タスク名 - App Engine によってタスクに一意の名前が割り当てられます
*/
protected String enqueueReminderTask(String source_id, long etaMillis, String message) {
LOG.info("enqueueReminderTask");
mQueue.add(
TaskOptions.Builder.withUrl("/push_task/reminder_task")
.param(ReminderTaskServlet.PARAM_NAME_SOURCE_ID, source_id)
.param(ReminderTaskServlet.PARAM_NAME_MESSAGE, message)
.etaMillis(etaMillis));
return mQueue
.add(
TaskOptions.Builder.withUrl("/push_task/reminder_task")
.param(ReminderTaskServlet.PARAM_NAME_SOURCE_ID, source_id)
.param(ReminderTaskServlet.PARAM_NAME_MESSAGE, message)
.etaMillis(etaMillis))
.getName();
}

public void deleteReminderTask(String taskName) {
// Delete an individual task...
mQueue.deleteTask(taskName);
}
}
21 changes: 12 additions & 9 deletions src/main/java/com/mizo0203/lilywhite/repo/Repository.java
Expand Up @@ -45,19 +45,20 @@ public void setReminderMessage(String sourceId, String reminderMessage) {
}

public void clearEvent(String sourceId) {
mOfyRepository.deleteLineTalkRoomConfig(sourceId);
LineTalkRoomConfig config = getOrCreateLineTalkRoomConfig(sourceId);
if (config == null) {
return;
}
mOfyRepository.saveLineTalkRoomConfig(config);
deleteReminderTask(config);
mOfyRepository.deleteLineTalkRoomConfig(sourceId);
}

private void deleteReminderTask(LineTalkRoomConfig config) {
mPushQueueRepository.deleteReminderTask(config.getReminderEnqueuedTaskName());
config.setReminderEnqueuedTaskName(null);
}

private LineTalkRoomConfig getOrCreateLineTalkRoomConfig(String sourceId) {
LineTalkRoomConfig config = mOfyRepository.loadLineTalkRoomConfig(sourceId);
if (config == null) {
config = new LineTalkRoomConfig(sourceId);
mOfyRepository.saveLineTalkRoomConfig(config);
}
return config;
}
Expand Down Expand Up @@ -143,9 +144,11 @@ public RequestBody getRequestBody(HttpServletRequest req) {

public void enqueueReminderTask(String sourceId, long etaMillis) {
LineTalkRoomConfig config = getOrCreateLineTalkRoomConfig(sourceId);
mPushQueueRepository.enqueueReminderTask(
config.getSourceId(), etaMillis, config.getReminderMessage());
config.setReminderEnqueued();
String taskName =
mPushQueueRepository.enqueueReminderTask(
config.getSourceId(), etaMillis, config.getReminderMessage());
LOG.info("enqueueReminderTask taskName: " + taskName);
config.setReminderEnqueuedTaskName(taskName);
mOfyRepository.saveLineTalkRoomConfig(config);
}
}
Expand Up @@ -20,13 +20,12 @@ public class LineTalkRoomConfig {

@Id private String sourceId;
private String reminderMessage;

private boolean reminderEnqueued;
private String reminderEnqueuedTaskName;

public LineTalkRoomConfig() {
// LineTalkRoomConfig must have a no-arg constructor
reminderMessage = null;
reminderEnqueued = false;
reminderEnqueuedTaskName = null;
}

/** A convenience constructor */
Expand All @@ -48,10 +47,14 @@ public void setReminderMessage(String reminderMessage) {
}

public boolean isReminderEnqueued() {
return reminderEnqueued;
return reminderEnqueuedTaskName != null;
}

public String getReminderEnqueuedTaskName() {
return reminderEnqueuedTaskName;
}

public void setReminderEnqueued() {
reminderEnqueued = true;
public void setReminderEnqueuedTaskName(String taskName) {
reminderEnqueuedTaskName = taskName;
}
}

0 comments on commit c67a1f0

Please sign in to comment.