/// <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); }
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)); }