Skip to content

Commit

Permalink
Builders refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Oleg Koloskov committed May 16, 2024
1 parent 1c1a684 commit 51c73af
Show file tree
Hide file tree
Showing 11 changed files with 137 additions and 527 deletions.
2 changes: 2 additions & 0 deletions Elib2Ebook/Configs/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,6 @@ public class Options {

[Option("save-temp", Required = false, HelpText = "Сохранить ни временные файлы", Default = false)]
public bool SaveTemp { get; set; }

public string ResourcesPath => "Patterns";
}
116 changes: 28 additions & 88 deletions Elib2Ebook/Logic/Builders/BuilderBase.cs
Original file line number Diff line number Diff line change
@@ -1,119 +1,59 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Elib2Ebook.Configs;
using Elib2Ebook.Extensions;
using Elib2Ebook.Types.Book;

namespace Elib2Ebook.Logic.Builders;

public abstract class BuilderBase
{
/// <summary>
/// Добавление автора книги
/// </summary>
/// <param name="author">Автор</param>
/// <returns></returns>
public abstract BuilderBase AddAuthor(Author author);

/// <summary>
/// Добавление автора книги
/// </summary>
/// <param name="coAuthors">Со-авторы</param>
/// <returns></returns>
public abstract BuilderBase AddCoAuthors(IEnumerable<Author> coAuthors);
public abstract class BuilderBase {
protected readonly Options _options;

/// <summary>
/// Указание названия книги
/// </summary>
/// <param name="title">Название книги</param>
/// <returns></returns>
public abstract BuilderBase WithTitle(string title);

/// <summary>
/// Добавление обложки книги
/// </summary>
/// <param name="cover">Обложка</param>
/// <returns></returns>
public abstract BuilderBase WithCover(Image cover);

/// <summary>
/// Добавление адреса книги
/// </summary>
/// <param name="url">Url</param>
/// <returns></returns>
public abstract BuilderBase WithBookUrl(Uri url);

/// <summary>
/// Добавление описания книги
/// </summary>
/// <param name="annotation">Описание</param>
/// <returns></returns>
public abstract BuilderBase WithAnnotation(string annotation);

/// <summary>
/// Добавление внешних файлов
/// </summary>
/// <param name="directory">Путь к директории с файлами</param>
/// <param name="searchPattern">Шаблон поиска файлов</param>
/// <param name="type">Тип файла</param>
/// <returns></returns>
public abstract BuilderBase WithFiles(string directory, string searchPattern);
protected abstract string Extension { get;}

/// <summary>
/// Добавление списка частей книги
/// </summary>
/// <param name="chapters">Список частей</param>
/// <returns></returns>
public abstract BuilderBase WithChapters(IEnumerable<Chapter> chapters);

/// <summary>
/// Добавление цикла книги
/// </summary>
/// <param name="seria"></param>
/// <returns></returns>
public abstract BuilderBase WithSeria(Seria seria);

/// <summary>
/// Доавления языка книги
/// </summary>
/// <param name="lang">Язык</param>
/// <returns></returns>
public abstract BuilderBase WithLang(string lang);
protected BuilderBase(Options options) {
_options = options;
}

/// <summary>
/// Создание файла
/// </summary>
/// <param name="name">Имя файла</param>
protected abstract Task BuildInternal(string name);
/// <param name="book">Книга</param>
protected abstract Task BuildInternal(Book book, string fileName);

/// <summary>
/// Получение имени файла
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
protected abstract string GetFileName(string name);
protected virtual string GetFileName(string name) => $"{name}.{Extension}".RemoveInvalidChars();

/// <summary>
/// Создание файла
/// </summary>
/// <param name="directory">Директоия для сохранения</param>
/// <param name="name">Имя файла</param>
public async Task Build(string directory, string name) {
var fileName = GetFileName(name);

if (!string.IsNullOrWhiteSpace(directory)) {
if (!Directory.Exists(directory)) {
Directory.CreateDirectory(directory);
/// <param name="book">Книга</param>
/// <param name="options">Опции</param>
public async Task Build(Book book) {
var title = $"{book.Author.Name} - {book.Title}".Crop(100);

var fileName = GetFileName(title);

if (!string.IsNullOrWhiteSpace(_options.SavePath)) {
if (!Directory.Exists(_options.SavePath)) {
Directory.CreateDirectory(_options.SavePath);
}

fileName = Path.Combine(directory, fileName);
fileName = Path.Combine(_options.SavePath, fileName);
}

Console.WriteLine($"Начинаю сохранение книги {fileName.CoverQuotes()}");

await BuildInternal(fileName);

await BuildInternal(book, fileName);

if (_options.Cover) {
await SaveCover(_options.SavePath, book.Cover, title);
}

Console.WriteLine($"Книга {fileName.CoverQuotes()} успешно сохранена");
}

Expand All @@ -123,7 +63,7 @@ public async Task Build(string directory, string name) {
/// <param name="directory"></param>
/// <param name="cover"></param>
/// <param name="name"></param>
public async Task SaveCover(string directory, Image cover, string name) {
private async Task SaveCover(string directory, Image cover, string name) {
if (cover == null) {
return;
}
Expand Down
65 changes: 9 additions & 56 deletions Elib2Ebook/Logic/Builders/CbzBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,70 +1,27 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Threading.Tasks;
using Elib2Ebook.Extensions;
using Elib2Ebook.Configs;
using Elib2Ebook.Types.Book;

namespace Elib2Ebook.Logic.Builders;

public class CbzBuilder : BuilderBase {
private IEnumerable<Chapter> _chapters;

public static BuilderBase Create() {
return new CbzBuilder();
}

public override BuilderBase AddAuthor(Author author) {
return this;
}

public override BuilderBase AddCoAuthors(IEnumerable<Author> coAuthors) {
return this;
}

public override BuilderBase WithTitle(string title) {
return this;
}

public override BuilderBase WithCover(Image cover) {
return this;
}

public override BuilderBase WithBookUrl(Uri url) {
return this;
}

public override BuilderBase WithAnnotation(string annotation) {
return this;
}

public override BuilderBase WithFiles(string directory, string searchPattern) {
return this;
}

public override BuilderBase WithChapters(IEnumerable<Chapter> chapters) {
_chapters = chapters;
return this;
}

public override BuilderBase WithSeria(Seria seria) {
return this;
public CbzBuilder(Options options) : base(options) {

}

public override BuilderBase WithLang(string lang) {
return this;
}
protected override string Extension => "cbz";

protected override async Task BuildInternal(string name) {
if (File.Exists(name)) {
File.Delete(name);
protected override async Task BuildInternal(Book book, string fileName) {
if (File.Exists(fileName)) {
File.Delete(fileName);
}

using var archive = ZipFile.Open(name, ZipArchiveMode.Create);
using var archive = ZipFile.Open(fileName, ZipArchiveMode.Create);

var c = 0;
foreach (var chapter in _chapters) {
foreach (var chapter in book.Chapters) {
if (chapter.Images == default) {
continue;
}
Expand All @@ -77,8 +34,4 @@ protected override async Task BuildInternal(string name) {
}
}
}

protected override string GetFileName(string name) {
return $"{name}.cbz".RemoveInvalidChars();
}
}
Loading

0 comments on commit 51c73af

Please sign in to comment.