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 }
public void Setup(IDxxDriver targetDriver, Window owner) { if (!targetDriver.HasSettings) { return; } var doc = getSettings(); var root = doc.GetElementsByTagName(ROOT_NAME)[0]; var el = root.SelectSingleNode(targetDriver.ID); if (el == null) { el = doc.CreateElement(targetDriver.ID); root.AppendChild(el); } if (targetDriver.Setup(el as XmlElement, owner)) { doc.Save(SETTINGS_PATH); } }
public Storage(IDxxDriver driver) : base(driver) { }
public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted = null) { DxxDBStorage.Instance.Download(target, driver, onCompleted); }
public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted) { onCompleted?.Invoke(false); }
public DxxFileBasedStorage(IDxxDriver driver) { mDriver = new WeakReference <IDxxDriver>(driver); }
/** * ダウンロードする 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); }); }
public DxxUrl(DxxTargetInfo info, IDxxDriver driver) : base(info.Url, info.Name, info.Description) { Driver = driver; }
public DxxUrl(Uri uri, IDxxDriver driver, string name, string description) : base(uri, name, description) { Driver = driver; }