1 package yukihane.inqubus.manager;
3 import java.util.HashMap;
5 import java.util.concurrent.ExecutorService;
6 import java.util.concurrent.Executors;
7 import java.util.concurrent.Future;
8 import saccubus.worker.Convert;
9 import saccubus.worker.ConvertResult;
10 import saccubus.worker.Download;
11 import saccubus.worker.DownloadResult;
12 import saccubus.worker.profile.ConvertProfile;
13 import saccubus.worker.profile.DownloadProfile;
19 public class TaskManager {
21 // private final LinkedBlockingQueue<DownloadTask> downloadTaskQueue = new LinkedBlockingQueue<>();
22 // private final LinkedBlockingQueue<ConvertTask> convertTaskQueue = new LinkedBlockingQueue<>();
23 private final ExecutorService downloadExecutorService;
24 private final ExecutorService convertExecutorService;
25 private final Map<Integer, ManageTarget<DownloadResult>> downloadTargets = new HashMap<>();
26 private final Map<Integer, ManageTarget<ConvertResult>> convertTargets = new HashMap<>();
28 private TaskManager(int maxDownload, int maxConvert) {
29 downloadExecutorService = Executors.newFixedThreadPool(maxDownload);
30 convertExecutorService = Executors.newFixedThreadPool(maxConvert);
33 public synchronized boolean add(Request request) {
34 final DownloadProfile dp = request.getDownloadProfile();
35 final ConvertProfile cp = request.getConvertProfile();
36 if (dp != null && !dp.getVideoProfile().isDownload() && !dp.getCommentProfile().isDownload()) {
37 final Future<DownloadResult> future = downloadExecutorService.submit(new Download(dp, request.getVideoId()));
38 downloadTargets.put(request.getRowId(), new ManageTarget<>(request, future));
41 } else if (cp != null && cp.isConvert()) {
42 final Future<ConvertResult> future = convertExecutorService.submit(new Convert(cp, dp.getVideoProfile().
43 getLocalFile(), dp.getCommentProfile().getLocalFile()));
44 convertTargets.put(request.getRowId(), new ManageTarget<>(request, future));
51 class ManageTarget<T> {
53 private final Request request;
54 private final Future<T> future;
56 ManageTarget(Request request, Future<T> future) {
57 this.request = request;
61 Future<T> getFuture() {
65 Request getRequest() {