Skip to content

Commit

Permalink
StringTokenFormatter
Browse files Browse the repository at this point in the history
  • Loading branch information
OnlyFart committed Oct 20, 2024
1 parent 7f27403 commit 0a598f1
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 45 deletions.
4 changes: 1 addition & 3 deletions Core/Configs/Options.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.JavaScript;
using CommandLine;
using Core.Logic;
using Core.Misc;

namespace Core.Configs;
Expand Down Expand Up @@ -71,7 +69,7 @@ public Options(IEnumerable<string> url) {
[Option("additional-types", Required = false, HelpText = "Типы дополнительных файлов. Допустимые значения: books, audio, images", Separator = ',')]
public IEnumerable<AdditionalTypeEnum> AdditionalTypes { get; set; }

[Option("book-name-pattern", Required = false, HelpText = "Шаблон имени файла. Допустимые значения: {author}, {title}, {seria}, {seria_number}", Default = "{" + BookNameBuilder.AUTHOR_PATTERN + "} - {" + BookNameBuilder.TITLE_PATTERN + "}")]
[Option("book-name-pattern", Required = false, HelpText = "Шаблон имени файла.", Default = "{Author.Name} - {Book.Title}")]
public string BookNamePattern { get; set; }

public bool HasAdditionalType(AdditionalTypeEnum type) => Additional && (AdditionalTypes == default || !AdditionalTypes.Any() || AdditionalTypes.Contains(type));
Expand Down
1 change: 1 addition & 0 deletions Core/Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<PackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageReference Include="OAuth.DotNetCore" Version="3.0.1" />
<PackageReference Include="StringTokenFormatter" Version="9.0.1" />
</ItemGroup>

<ItemGroup>
Expand Down
31 changes: 12 additions & 19 deletions Core/Logic/BookNameBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,30 +1,23 @@
using System.Collections.Generic;
using Core.Extensions;
using Core.Types.Book;
using StringTokenFormatter;

namespace Core.Logic;

public class BookNameBuilder {
public const string TITLE_PATTERN = "title";

public const string AUTHOR_PATTERN = "author";

public const string SERIA_PATTERN = "seria";

public const string SERIA_NUMBER_PATTERN = "seria_number";

public static string Build(string pattern, Book book) {
var map = new Dictionary<string, string> {
{ TITLE_PATTERN, book.Title },
{ AUTHOR_PATTERN, book.Author.Name },
{ SERIA_PATTERN, book.Seria?.Name },
{ SERIA_NUMBER_PATTERN, book.Seria?.Number },
};
foreach (var (key, value) in map) {
pattern = pattern.Replace("{" + key + "}", value.RemoveInvalidChars());
var resolver = new InterpolatedStringResolver(StringTokenFormatterSettings.Default);
var combinedContainer = resolver
.Builder()
.AddPrefixedObject("Book", book)
.AddPrefixedObject("Author", book.Author)
.AddPrefixedSingle("Seria", "HasSeria", book.Seria is not null);

if (book.Seria is not null) {
combinedContainer.AddPrefixedObject("Seria", book.Seria);
}

return pattern.RemoveInvalidChars().Crop(100);

return resolver.FromContainer(pattern, combinedContainer.CombinedResult()).RemoveInvalidChars();
}
}
2 changes: 1 addition & 1 deletion Core/Logic/Getters/AuthorTodayGetter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ private Seria GetSeria(AuthorTodayBookDetails book) {
}

return new Seria {
Name = book.SeriesTitle,
Name = book.SeriesTitle.Trim(),
Number = book.SeriesWorkNumber.HasValue ? book.SeriesWorkNumber.ToString() : string.Empty,
Url = SystemUrl.MakeRelativeUri($"/work/series/{book.SeriesId}")
};
Expand Down
44 changes: 22 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,25 +153,25 @@ docker run --rm -p 8080:8080 onlyfart/elib2ebookweb


## Полный список опций
| Команда | Описание |
|----------------------|---------------------------------------------------------------------------------------------------------------------------|
| -u, --url | Обязательное. Ссылка на книгу |
| -f, --format | Обязательное. Формат для сохранения книги. Допустимые значения: epub, fb2, cbz, json, txt |
| -l, --login | Логин от системы |
| -p, --password | Пароль от системы |
| --proxy | Прокси в формате (http or socks4 or socks5)://host:port/ |
| -s, --save | Директория для сохранения книги |
| -c, --cover | Сохранить обложку книги в отдельный файл |
| -t, --timeout | (По-умолчанию: 120) Timeout для запросов в секундах |
| -d, --delay | (По-умолчанию: 0) Задержка между запросами в секундах |
| --no-image | Не загружать картинки |
| --temp | Директория для хранения временных файлов |
| --save-temp | Не удалять временную директорию |
| --start | Стартовый номер главы |
| --end | Конечный номер главы |
| --start-name | Стартовое имя главы |
| --end-name | Конечное имя главы |
| --no-chapters | Не загружать главы |
| --additional | Сохранить дополнительные файлы (оригинальные файлы книг, аудиоверсии и т.д.) |
| --additional-types | Типы дополнительных файлов. Допустимые значения: books, audio, images |
| --book-name-pattern | (По-умолчанию: {author} - {title}) Шаблон для имени файла. Допустимые значение {author}, {title}, {seria}, {seria_number} |
| Команда | Описание |
|----------------------|-------------------------------------------------------------------------------------------|
| -u, --url | Обязательное. Ссылка на книгу |
| -f, --format | Обязательное. Формат для сохранения книги. Допустимые значения: epub, fb2, cbz, json, txt |
| -l, --login | Логин от системы |
| -p, --password | Пароль от системы |
| --proxy | Прокси в формате (http or socks4 or socks5)://host:port/ |
| -s, --save | Директория для сохранения книги |
| -c, --cover | Сохранить обложку книги в отдельный файл |
| -t, --timeout | (По-умолчанию: 120) Timeout для запросов в секундах |
| -d, --delay | (По-умолчанию: 0) Задержка между запросами в секундах |
| --no-image | Не загружать картинки |
| --temp | Директория для хранения временных файлов |
| --save-temp | Не удалять временную директорию |
| --start | Стартовый номер главы |
| --end | Конечный номер главы |
| --start-name | Стартовое имя главы |
| --end-name | Конечное имя главы |
| --no-chapters | Не загружать главы |
| --additional | Сохранить дополнительные файлы (оригинальные файлы книг, аудиоверсии и т.д.) |
| --additional-types | Типы дополнительных файлов. Допустимые значения: books, audio, images |
| --book-name-pattern | (По-умолчанию: {Author.Name} - {Book.Title}) Шаблон для имени файла. |

0 comments on commit 0a598f1

Please sign in to comment.