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
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 public Storage(IDxxDriver driver) : base(driver)
 {
 }
Esempio n. 4
0
 public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted = null)
 {
     DxxDBStorage.Instance.Download(target, driver, onCompleted);
 }
Esempio n. 5
0
 public void Download(DxxTargetInfo target, IDxxDriver driver, Action <bool> onCompleted)
 {
     onCompleted?.Invoke(false);
 }
 public DxxFileBasedStorage(IDxxDriver driver)
 {
     mDriver = new WeakReference <IDxxDriver>(driver);
 }
Esempio n. 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);
            });
        }
Esempio n. 8
0
 public DxxUrl(DxxTargetInfo info, IDxxDriver driver) : base(info.Url, info.Name, info.Description)
 {
     Driver = driver;
 }
Esempio n. 9
0
 public DxxUrl(Uri uri, IDxxDriver driver, string name, string description) : base(uri, name, description)
 {
     Driver = driver;
 }