예제 #1
0
        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
        }
예제 #2
0
        public static DxxPlayItem FromTarget(DxxTargetInfo target)
        {
            var desc = target.Description;

            if (string.IsNullOrWhiteSpace(desc))
            {
                desc = target.Name;
            }
            var path = DxxDriverManager.Instance.FindDriver(target.Uri.ToString())?.StorageManager?.GetSavedFile(target.Uri);

            if (path == null)
            {
                Debug.WriteLine("null path.");
                return(null);
            }
            return(new DxxPlayItem(target.Uri, path, desc));
        }
예제 #3
0
 public override void Download(DxxTargetInfo target, Action <bool> onCompleted = null)
 {
     StorageManager.Download(target, this, onCompleted);
 }
예제 #4
0
 public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted = null)
 {
     DxxDBStorage.Instance.Download(target, driver, onCompleted);
 }
예제 #5
0
 public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted)
 {
     onCompleted?.Invoke(false);
 }
예제 #6
0
 public abstract void Download(DxxTargetInfo target, Action <bool> onCompleted = null);
예제 #7
0
        /**
         * ダウンロードする 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);
            });
        }