public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted) { var path = GetPath(target.Uri); if (File.Exists(path)) { DxxLogger.Instance.Cancel(LOG_CAT, $"Skipped (register db): {target.Name} {target.Description}"); DxxDBStorage.Instance.RegisterAsCompleted(target, path, Driver.Name); //DxxPlayer.PlayList.AddSource(DxxPlayItem.FromTarget(target)); onCompleted?.Invoke(false); return; } if (!Driver.LinkExtractor.IsTarget(target)) { onCompleted?.Invoke(false); return; } // ダウンロードは DB Storage に任せる DxxDBStorage.Instance.Download(target, driver, onCompleted); #if false if (DxxNGList.Instance.IsNG(target.Url)) { DxxLogger.Instance.Cancel(LOG_CAT, $"Dislike ({target.Name})"); onCompleted?.Invoke(false); return; } if (DxxDBStorage.Instance.IsDownloaded(target.Uri)) { DxxLogger.Instance.Cancel(LOG_CAT, $"Skipped (already downloaded): {target.Name} {target.Description}"); DxxPlayer.PlayList.AddSource(DxxPlayItem.FromTarget(target)); onCompleted?.Invoke(false); return; } if (DxxDownloader.Instance.IsDownloading(target.Url)) { DxxLogger.Instance.Cancel(LOG_CAT, $"Skipped (already downloading): {target.Name}"); onCompleted?.Invoke(false); return; } DxxLogger.Instance.Comment(LOG_CAT, $"Start: {target.Name}"); DxxDownloader.Instance.Reserve(target, path, DxxDownloader.MAX_RETRY, (v) => { if (v) { DxxPlayer.PlayList.AddSource(DxxPlayItem.FromTarget(target)); DxxLogger.Instance.Success(LOG_CAT, $"Completed: {target.Name}"); } else { DxxLogger.Instance.Error(LOG_CAT, $"Error: {target.Name}"); } onCompleted?.Invoke(v); }); #endif }
/** * ダウンロードする IDxxStorageManager i/f */ //public void Download(DxxTargetInfo target, Action<bool> onCompleted) { // Download(target, StoragePath, onCompleted); //} /** * ダウンロードする * 保存フォルダを指定できるバージョン(DefaultDriver以外で利用) */ public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted) { var rec = Retrieve(target.Url); string path = null; if (rec != null) { if (rec.Status == DLStatus.FORBIDDEN || rec.Status == DLStatus.FATAL_ERROR) { DxxLogger.Instance.Cancel(LOG_CAT, $"{rec.Status} ({target.Name})"); onCompleted?.Invoke(false); return; } else if (rec.Status == DLStatus.COMPLETED || (rec.Status == DLStatus.RESERVED && DxxDownloader.Instance.IsDownloading(rec.Url))) { if (rec.Description != "サンプル動画" && rec.Description != target.Description) { UpdateDescription(rec.ID, target.Description); } DxxLogger.Instance.Cancel(LOG_CAT, $"Skipped ({target.Name})"); //DxxPlayer.PlayList.AddSource(DxxPlayItem.FromTarget(target)); onCompleted?.Invoke(false); return; } path = rec.Path; } else { path = driver.ReserveFilePath(target.Uri); rec = Reserve(target, driver.Name, path, 0); if (rec == null) { DxxLogger.Instance.Error(LOG_CAT, $"Can't Reserved ({target.Name})"); onCompleted?.Invoke(false); return; } } if (string.IsNullOrWhiteSpace(path)) { string fileName = createFileName(rec); path = System.IO.Path.Combine(driver.StoragePath, fileName); } DxxDownloader.Instance.Reserve(target, path, DxxDownloader.MAX_RETRY, (r) => { bool succeeded = false; if (r == DxxDownloadingItem.DownloadStatus.Completed) { CompletePath(rec.ID, path); DLPlayList.AddSource(DxxPlayItem.FromTarget(target)); DxxLogger.Instance.Success(LOG_CAT, $"Completed: {target.Name}"); succeeded = true; } else { DxxLogger.Instance.Error(LOG_CAT, $"Error: {target.Name}"); if (r == DxxDownloadingItem.DownloadStatus.Error) { RegisterNG(rec.Url, true); } } onCompleted?.Invoke(succeeded); }); }