private async Task <CBookEntity> CreateBook(FileInfo file) { CBookEntity book = await bookService.FindByNameAsync(file.DirectoryName, file.Name); if (book != null) { Console.WriteLine("文件已存在..."); return(book); } book = new CBookEntity(); book.Path = file.DirectoryName; book.Name = file.Name; book.Author = ComicUtils.ParseAuthor(book.Name); book.Title = ComicUtils.ParseTitle(book.Name); book.Language = ComicUtils.ParseLanguage(book.Name); book.Length = file.Length; book.XInsert_ = file.CreationTime; book.XUpdate_ = file.LastWriteTime; book = await bookService.SaveAsync(book); return(book); }
private async Task <byte[]> ReadAsync(string file, string cover) { return(await Task <byte[]> .Run(() => { FileInfo f = new FileInfo(file); if (!f.Exists) { Console.WriteLine("文件不存在..."); return none; } using (var archive = ArchiveFactory.Open(file)) { try { IArchiveEntry result = null; foreach (var entry in archive.Entries) { if (result == null && !entry.IsDirectory && ComicUtils.IsImage(entry.Key)) { result = entry; if (StringUtils.IsBlank(cover)) { break; } } if (StringUtils.IsEqual(entry.Key, cover)) { result = entry; break; } } if (result != null) { return ImageUtils.PreviewBuffer(result, width, height); } } catch (ArchiveException ex) { Console.WriteLine(file); Console.WriteLine(ex); //throw; } catch (CryptographicException ex) { Console.WriteLine(file); Console.WriteLine(ex); } } return none; })); }
private async Task DiscoveryComic(string path, bool children) { DirectoryInfo root = new DirectoryInfo(path); if (!root.Exists) { Console.WriteLine("目录不存在"); // 文件目录不存在 // TODO: 这里应该有个报警. return; } if (children) { DirectoryInfo[] dirs = root.GetDirectories(); foreach (var dir in dirs) { await DiscoveryComic(dir.FullName, children); } } FileInfo[] files = root.GetFiles(); foreach (var file in files) { if (!ComicUtils.IsArchive(file.Name)) { // 如果当前文件不是漫画档案 continue; } CBookEntity book = await CreateBook(file); BAuthorEntity author = await CreateAuthor(book.Author); } }
private async Task preparing() { Console.WriteLine("识别文件中的有效图片."); string file = Path.Combine(book.Path, book.Name); FileInfo f = new FileInfo(file); if (!f.Exists) { Console.WriteLine("文件不存在..."); return; } // IArchive archive = null; try { var archive = ArchiveFactory.Open(file); Console.WriteLine("开始对内容排序."); entries = archive.Entries .Where(a => (!a.IsDirectory && ComicUtils.IsImage(a.Key))) .OrderBy(a => a.Key) .ToList(); } catch (CryptographicException ex) { Console.WriteLine("打开文件需要密码."); Console.WriteLine(ex); } Console.WriteLine("文件页数:" + entries.Count); // 过滤不是图片的压缩包文件,并按文件名排序 if (book.Count != entries.Count) { Console.WriteLine("更新页码数."); book.Count = entries.Count; await bookService.UpdateAsync(book); } Console.WriteLine("找到[" + entries.Count + "]张图片"); EntryPaginator.DataSource = entries; if (_Paged && book.Index > 0 && book.Index <= entries.Count) { await EntryPaginator.HandlePageIndexChange(new PaginationEventArgs(book.Index, 1)); } entry = EntryPaginator.Paged().ToList(); //Console.WriteLine await Task.CompletedTask; }