This commit is contained in:
rca 2024-06-30 16:11:20 +09:00
parent 3d8a37ea2d
commit 0c8eba1cb9

View File

@ -5,6 +5,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
import javax.security.auth.callback.Callback;
import one.nem.kidshift.data.KSActions; import one.nem.kidshift.data.KSActions;
import one.nem.kidshift.data.TaskData; import one.nem.kidshift.data.TaskData;
@ -31,30 +32,23 @@ public class TaskDataImpl implements TaskData {
@Override @Override
public CompletableFuture<List<TaskItemModel>> getTasks(TaskItemModelCallback callback) { public CompletableFuture<List<TaskItemModel>> getTasks(TaskItemModelCallback callback) {
return CompletableFuture.supplyAsync(() -> { return CompletableFuture.supplyAsync(() -> {
logger.debug("タスク取得開始");
Thread thread = new Thread(() -> { Thread thread = new Thread(() -> {
ksActions.syncTasks().thenAccept(taskList -> { // TODO-rca: ちゃんと比較して呼ぶ
if (taskList != null) { ksActions.syncTasks().thenAccept(callback::onUpdated);
callback.onUpdated(taskList);
} else {
callback.onFailed("タスクの更新に失敗しました");
}
});
}); });
thread.start(); thread.start();
return cacheWrapper.getTaskList().thenApply((taskList) -> { return cacheWrapper.getTaskList().thenApply(taskList -> {
if (taskList == null) { if (taskList == null || taskList.isEmpty()) {
logger.debug("キャッシュなし"); try {
try { // キャッシュされた結果が存在しない場合はスレッドがサーバーから取得してくるまで待機して再取得
logger.debug("Threadが終了して更新するまで待機中");
thread.join(); thread.join();
logger.debug("Threadが終了しました");
return cacheWrapper.getTaskList().join(); return cacheWrapper.getTaskList().join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} } else {
logger.debug("キャッシュあり: " + taskList.size() + "");
return taskList; return taskList;
}
}).join(); }).join();
}); });
} }