+ public synchronized boolean add(Request request) {
+ final DownloadProfile dp = request.getDownloadProfile();
+ final ConvertProfile cp = request.getConvertProfile();
+ if (dp != null && !dp.getVideoProfile().isDownload() && !dp.getCommentProfile().isDownload()) {
+ final Future<DownloadResult> future = downloadExecutorService.submit(new Download(dp, request.getVideoId()));
+ downloadTargets.put(request.getRowId(), new ManageTarget<>(request, future));
+ return true;
+
+ } else if (cp != null && cp.isConvert()) {
+ final Future<ConvertResult> future = convertExecutorService.submit(new Convert(cp, dp.getVideoProfile().
+ getLocalFile(), dp.getCommentProfile().getLocalFile()));
+ convertTargets.put(request.getRowId(), new ManageTarget<>(request, future));
+ return true;
+ }
+ return false;
+ }
+}
+
+class ManageTarget<T> {
+
+ private final Request request;
+ private final Future<T> future;
+
+ ManageTarget(Request request, Future<T> future) {
+ this.request = request;
+ this.future = future;
+ }
+
+ Future<T> getFuture() {
+ return future;
+ }
+
+ Request getRequest() {
+ return request;