3 import java.util.ArrayList;
4 import java.util.concurrent.CompletableFuture;
5 import java.util.concurrent.ExecutionException;
6 import java.util.concurrent.Executor;
7 import java.util.concurrent.Executors;
8 import java.util.function.BiConsumer;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
13 public class ManualUpdateThreadImpl implements Runnable {
16 private static boolean flag = true;
18 //Declare Executor service
19 private Executor executor = Executors.newWorkStealingPool();
20 private BiConsumer<ArrayList<Song>, ArrayList<Song>> updateConsumer = (list1, list2) -> {
21 this.logger.info("Checking database updates...");
22 if(list1.size() > list2.size()) {
23 long time = System.currentTimeMillis();
24 this.logger.info("{} Update detected.", (list1.size() - list2.size()));
25 Scraping.writeToJson(list1);
26 this.logger.info("Update completed in {} ms", (System.currentTimeMillis() - time));
27 this.logger.info("Updated database size: {}", list1.size());
29 this.logger.info("database is up-to-date.");
34 private Logger logger = LoggerFactory.getLogger(ManualUpdateThreadImpl.class);
36 public ManualUpdateThreadImpl() {
37 this.logger.info("ManualUpdateThread is now available.");
45 this.logger.info("Checking database updates...");
46 CompletableFuture<ArrayList<Song>> webData = CompletableFuture.supplyAsync(Scraping::getWholeData, this.executor);
47 CompletableFuture<ArrayList<Song>> localData = CompletableFuture.supplyAsync(Scraping::getFromJson, this.executor);
49 this.updateConsumer.accept(webData.get(), localData.get());
50 } catch (InterruptedException | ExecutionException e) {
51 this.logger.warn("Update failed.", e);
56 public boolean getFlag() {