Example #1
0
        /// <summary>
        /// ファイルからメタデータを読み込む
        /// </summary>
        /// <param name="absolutePath"></param>
        /// <param name="documentMetaData"></param>
        /// <returns></returns>
        private bool TryGetDocumentMetaData(string absolutePath, out DocumentMetaData documentMetaData)
        {
            _logger.WriteLine($"load document meta data file {absolutePath}");
            var metaDataFilePath = Path.Combine(absolutePath, "meta.yml");

            if (File.Exists(metaDataFilePath))
            {
                documentMetaData = YamlSerializeHelper.LoadFromFile <DocumentMetaData>(metaDataFilePath);
                documentMetaData.LatestSavedAbsolutePath = metaDataFilePath;
                documentMetaData.ProjectAbsolutePath     = _config.Project;
                documentMetaData.DirectoryAbsolutePath   = absolutePath;

                return(true);
            }

            _logger.WriteLine($"not found meta data file {absolutePath}");
            var title = Directory.EnumerateFiles(absolutePath)
                        .OrderBy(x => x, LogicalStringComparer.Instance)
                        .FirstOrDefault(x =>
            {
                var ex   = Path.GetExtension(x).ToLower();
                var type = DocumentTypeHelper.FileExtensionToType(ex);
                return(type == DocumentType.Img);
            });

            if (string.IsNullOrEmpty(title))
            {
                documentMetaData = default;
                return(false);
            }

            documentMetaData = new DocumentMetaData()
            {
                DisplayName             = Path.GetFileNameWithoutExtension(absolutePath),
                Type                    = DocumentTypeHelper.FileExtensionToType(Path.GetExtension(title).ToLower()),
                IsEdited                = true,
                LatestSavedAbsolutePath = metaDataFilePath,
                ProjectAbsolutePath     = _config.Project,
                DirectoryAbsolutePath   = absolutePath,
            };
            _logger.WriteLine($"created meta data {absolutePath}");
            return(true);
        }
Example #2
0
        public async Task DownLoad(params string[] uris)
        {
            if (uris.Length is 0)
            {
                return;
            }

            // ディクトリの指定、からの場合はランダムなディレクトリを指定する
            var dir = DownloadDirectoryName.Value;

            if (string.IsNullOrEmpty(dir))
            {
                dir = Guid.NewGuid().ToString();
            }
            var absoluteDir = Path.Combine(_config.Project, dir);

            Directory.CreateDirectory(absoluteDir);
            _logger.WriteLine($"try create directory {absoluteDir}");

            int pageId = 0;

            foreach (var uri in uris)
            {
                using var client = new System.Net.WebClient();

                var pageUri = uri;

                // 出力先パス
                var filePath = Path.Combine(absoluteDir, $"{pageId++}{Path.GetExtension(pageUri)}");

                int count = 2;
                while (count-- > 0)
                {
                    try
                    {
                        _logger.WriteLine($"try download {pageUri}");
                        await client.DownloadFileTaskAsync(new Uri(pageUri), filePath);

                        DownloadLogInfo.Value += $"OK {pageUri}\n";
                        _logger.WriteLine($"success download {pageUri}");
                        await Task.Delay(50);

                        break;
                    }
                    catch (Exception e)
                    {
                        _logger.Error(e, $"failed download {pageUri}");
                        FileSystemUtility.TryFileDelete(filePath);

                        DownloadLogInfo.Value += $"Error {pageUri}\n";

                        // 拡張子を変えて試す。
                        ChangeUriExtension(pageUri);
                    }
                }
            }

            // ダウンロード完了、ドキュメントをメイン画面に追加する
            _project.Documents.Insert(0, new ImageDocument(new DocumentMetaData()
            {
                Type                    = DocumentTypeHelper.FileExtensionToType(Path.GetExtension(uris[0])),
                DisplayName             = string.Empty,
                LatestSavedAbsolutePath = Path.Combine(absoluteDir, "meta.yml"),
                DirectoryAbsolutePath   = absoluteDir,
                ProjectAbsolutePath     = _config.Project,
                IsEdited                = true,
            }, _config));
        }