Scan Loop Last Write Time Change (#1492)
* Refactored invite user flow to separate error handling on create user flow and email flow. This should help users that have unique situations. * Switch to using files to check LastWriteTime. Debug code in for Robbie to test on rclone * Updated Parser namespace. Changed the LastWriteTime to check all files and folders.
This commit is contained in:
parent
521b2adc14
commit
85790dd71c
59 changed files with 283 additions and 264 deletions
|
@ -23,8 +23,8 @@ namespace API.Data
|
|||
Name = name,
|
||||
OriginalName = name,
|
||||
LocalizedName = name,
|
||||
NormalizedName = Parser.Parser.Normalize(name),
|
||||
NormalizedLocalizedName = Parser.Parser.Normalize(name),
|
||||
NormalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(name),
|
||||
NormalizedLocalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(name),
|
||||
SortName = name,
|
||||
Volumes = new List<Volume>(),
|
||||
Metadata = SeriesMetadata(Array.Empty<CollectionTag>())
|
||||
|
@ -42,8 +42,8 @@ namespace API.Data
|
|||
Name = name,
|
||||
OriginalName = name,
|
||||
LocalizedName = localizedName,
|
||||
NormalizedName = Parser.Parser.Normalize(name),
|
||||
NormalizedLocalizedName = Parser.Parser.Normalize(localizedName),
|
||||
NormalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(name),
|
||||
NormalizedLocalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(localizedName),
|
||||
SortName = name,
|
||||
Volumes = new List<Volume>(),
|
||||
Metadata = SeriesMetadata(Array.Empty<CollectionTag>())
|
||||
|
@ -55,7 +55,7 @@ namespace API.Data
|
|||
return new Volume()
|
||||
{
|
||||
Name = volumeNumber,
|
||||
Number = (int) Parser.Parser.MinNumberFromRange(volumeNumber),
|
||||
Number = (int) Services.Tasks.Scanner.Parser.Parser.MinNumberFromRange(volumeNumber),
|
||||
Chapters = new List<Chapter>()
|
||||
};
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ namespace API.Data
|
|||
var specialTitle = specialTreatment ? info.Filename : info.Chapters;
|
||||
return new Chapter()
|
||||
{
|
||||
Number = specialTreatment ? "0" : Parser.Parser.MinNumberFromRange(info.Chapters) + string.Empty,
|
||||
Number = specialTreatment ? "0" : Services.Tasks.Scanner.Parser.Parser.MinNumberFromRange(info.Chapters) + string.Empty,
|
||||
Range = specialTreatment ? info.Filename : info.Chapters,
|
||||
Title = (specialTreatment && info.Format == MangaFormat.Epub)
|
||||
? info.Title
|
||||
|
@ -95,7 +95,7 @@ namespace API.Data
|
|||
return new CollectionTag()
|
||||
{
|
||||
Id = id,
|
||||
NormalizedTitle = API.Parser.Parser.Normalize(title?.Trim()).ToUpper(),
|
||||
NormalizedTitle = Services.Tasks.Scanner.Parser.Parser.Normalize(title?.Trim()).ToUpper(),
|
||||
Title = title?.Trim(),
|
||||
Summary = summary?.Trim(),
|
||||
Promoted = promoted
|
||||
|
@ -106,7 +106,7 @@ namespace API.Data
|
|||
{
|
||||
return new ReadingList()
|
||||
{
|
||||
NormalizedTitle = API.Parser.Parser.Normalize(title?.Trim()).ToUpper(),
|
||||
NormalizedTitle = Services.Tasks.Scanner.Parser.Parser.Normalize(title?.Trim()).ToUpper(),
|
||||
Title = title?.Trim(),
|
||||
Summary = summary?.Trim(),
|
||||
Promoted = promoted,
|
||||
|
@ -130,7 +130,7 @@ namespace API.Data
|
|||
return new Genre()
|
||||
{
|
||||
Title = name.Trim().SentenceCase(),
|
||||
NormalizedTitle = Parser.Parser.Normalize(name),
|
||||
NormalizedTitle = Services.Tasks.Scanner.Parser.Parser.Normalize(name),
|
||||
ExternalTag = external
|
||||
};
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ namespace API.Data
|
|||
return new Tag()
|
||||
{
|
||||
Title = name.Trim().SentenceCase(),
|
||||
NormalizedTitle = Parser.Parser.Normalize(name),
|
||||
NormalizedTitle = Services.Tasks.Scanner.Parser.Parser.Normalize(name),
|
||||
ExternalTag = external
|
||||
};
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ namespace API.Data
|
|||
return new Person()
|
||||
{
|
||||
Name = name.Trim(),
|
||||
NormalizedName = Parser.Parser.Normalize(name),
|
||||
NormalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(name),
|
||||
Role = role
|
||||
};
|
||||
}
|
||||
|
|
|
@ -107,16 +107,16 @@ namespace API.Data.Metadata
|
|||
info.SeriesSort = info.SeriesSort.Trim();
|
||||
info.LocalizedSeries = info.LocalizedSeries.Trim();
|
||||
|
||||
info.Writer = Parser.Parser.CleanAuthor(info.Writer);
|
||||
info.Colorist = Parser.Parser.CleanAuthor(info.Colorist);
|
||||
info.Editor = Parser.Parser.CleanAuthor(info.Editor);
|
||||
info.Inker = Parser.Parser.CleanAuthor(info.Inker);
|
||||
info.Letterer = Parser.Parser.CleanAuthor(info.Letterer);
|
||||
info.Penciller = Parser.Parser.CleanAuthor(info.Penciller);
|
||||
info.Publisher = Parser.Parser.CleanAuthor(info.Publisher);
|
||||
info.Characters = Parser.Parser.CleanAuthor(info.Characters);
|
||||
info.Translator = Parser.Parser.CleanAuthor(info.Translator);
|
||||
info.CoverArtist = Parser.Parser.CleanAuthor(info.CoverArtist);
|
||||
info.Writer = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Writer);
|
||||
info.Colorist = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Colorist);
|
||||
info.Editor = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Editor);
|
||||
info.Inker = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Inker);
|
||||
info.Letterer = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Letterer);
|
||||
info.Penciller = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Penciller);
|
||||
info.Publisher = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Publisher);
|
||||
info.Characters = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Characters);
|
||||
info.Translator = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.Translator);
|
||||
info.CoverArtist = Services.Tasks.Scanner.Parser.Parser.CleanAuthor(info.CoverArtist);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ public static class MigrateBookmarks
|
|||
continue;
|
||||
}
|
||||
|
||||
var files = directoryService.GetFilesWithExtension(chapterExtractPath, Parser.Parser.ImageFileExtensions);
|
||||
var files = directoryService.GetFilesWithExtension(chapterExtractPath, Services.Tasks.Scanner.Parser.Parser.ImageFileExtensions);
|
||||
// Filter out images that aren't in bookmarks
|
||||
Array.Sort(files, numericComparer);
|
||||
foreach (var chapterPage in chapterPages)
|
||||
|
|
|
@ -21,7 +21,7 @@ public static class MigrateNormalizedLocalizedName
|
|||
|
||||
foreach (var series in await dataContext.Series.ToListAsync())
|
||||
{
|
||||
series.NormalizedLocalizedName = Parser.Parser.Normalize(series.LocalizedName ?? string.Empty);
|
||||
series.NormalizedLocalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(series.LocalizedName ?? string.Empty);
|
||||
logger.LogInformation("Updated {SeriesName} normalized localized name: {LocalizedName}", series.Name, series.NormalizedLocalizedName);
|
||||
unitOfWork.SeriesRepository.Update(series);
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ public class GenreRepository : IGenreRepository
|
|||
|
||||
public async Task<Genre> FindByNameAsync(string genreName)
|
||||
{
|
||||
var normalizedName = Parser.Parser.Normalize(genreName);
|
||||
var normalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(genreName);
|
||||
return await _context.Genre
|
||||
.FirstOrDefaultAsync(g => g.NormalizedTitle.Equals(normalizedName));
|
||||
}
|
||||
|
|
|
@ -334,13 +334,13 @@ public class LibraryRepository : ILibraryRepository
|
|||
/// <returns></returns>
|
||||
public async Task<bool> DoAnySeriesFoldersMatch(IEnumerable<string> folders)
|
||||
{
|
||||
var normalized = folders.Select(Parser.Parser.NormalizePath);
|
||||
var normalized = folders.Select(Services.Tasks.Scanner.Parser.Parser.NormalizePath);
|
||||
return await _context.Series.AnyAsync(s => normalized.Contains(s.FolderPath));
|
||||
}
|
||||
|
||||
public Library? GetLibraryByFolder(string folder)
|
||||
{
|
||||
var normalized = Parser.Parser.NormalizePath(folder);
|
||||
var normalized = Services.Tasks.Scanner.Parser.Parser.NormalizePath(folder);
|
||||
return _context.Library
|
||||
.Include(l => l.Folders)
|
||||
.AsSplitQuery()
|
||||
|
|
|
@ -42,7 +42,7 @@ public class PersonRepository : IPersonRepository
|
|||
|
||||
public async Task<Person> FindByNameAsync(string name)
|
||||
{
|
||||
var normalizedName = Parser.Parser.Normalize(name);
|
||||
var normalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(name);
|
||||
return await _context.Person
|
||||
.Where(p => normalizedName.Equals(p.NormalizedName))
|
||||
.SingleOrDefaultAsync();
|
||||
|
|
|
@ -301,7 +301,7 @@ public class SeriesRepository : ISeriesRepository
|
|||
{
|
||||
const int maxRecords = 15;
|
||||
var result = new SearchResultGroupDto();
|
||||
var searchQueryNormalized = Parser.Parser.Normalize(searchQuery);
|
||||
var searchQueryNormalized = Services.Tasks.Scanner.Parser.Parser.Normalize(searchQuery);
|
||||
|
||||
var seriesIds = _context.Series
|
||||
.Where(s => libraryIds.Contains(s.LibraryId))
|
||||
|
@ -1151,7 +1151,7 @@ public class SeriesRepository : ISeriesRepository
|
|||
/// <returns></returns>
|
||||
public async Task<int> GetSeriesIdByFolder(string folder)
|
||||
{
|
||||
var normalized = Parser.Parser.NormalizePath(folder);
|
||||
var normalized = Services.Tasks.Scanner.Parser.Parser.NormalizePath(folder);
|
||||
var series = await _context.Series
|
||||
.Where(s => s.FolderPath.Equals(normalized))
|
||||
.SingleOrDefaultAsync();
|
||||
|
@ -1165,7 +1165,7 @@ public class SeriesRepository : ISeriesRepository
|
|||
/// <returns></returns>
|
||||
public async Task<Series> GetSeriesByFolderPath(string folder)
|
||||
{
|
||||
var normalized = Parser.Parser.NormalizePath(folder);
|
||||
var normalized = Services.Tasks.Scanner.Parser.Parser.NormalizePath(folder);
|
||||
return await _context.Series.SingleOrDefaultAsync(s => s.FolderPath.Equals(normalized));
|
||||
}
|
||||
|
||||
|
@ -1178,7 +1178,7 @@ public class SeriesRepository : ISeriesRepository
|
|||
/// <returns></returns>
|
||||
public Task<Series> GetFullSeriesByName(string series, int libraryId)
|
||||
{
|
||||
var localizedSeries = Parser.Parser.Normalize(series);
|
||||
var localizedSeries = Services.Tasks.Scanner.Parser.Parser.Normalize(series);
|
||||
return _context.Series
|
||||
.Where(s => (s.NormalizedName.Equals(localizedSeries)
|
||||
|| s.LocalizedName.Equals(series)) && s.LibraryId == libraryId)
|
||||
|
@ -1221,8 +1221,8 @@ public class SeriesRepository : ISeriesRepository
|
|||
/// <returns></returns>
|
||||
public Task<Series> GetFullSeriesByAnyName(string seriesName, string localizedName, int libraryId, MangaFormat format, bool withFullIncludes = true)
|
||||
{
|
||||
var normalizedSeries = Parser.Parser.Normalize(seriesName);
|
||||
var normalizedLocalized = Parser.Parser.Normalize(localizedName);
|
||||
var normalizedSeries = Services.Tasks.Scanner.Parser.Parser.Normalize(seriesName);
|
||||
var normalizedLocalized = Services.Tasks.Scanner.Parser.Parser.Normalize(localizedName);
|
||||
var query = _context.Series
|
||||
.Where(s => s.LibraryId == libraryId)
|
||||
.Where(s => s.Format == format && format != MangaFormat.Unknown)
|
||||
|
|
|
@ -43,7 +43,7 @@ public class TagRepository : ITagRepository
|
|||
|
||||
public async Task<Tag> FindByNameAsync(string tagName)
|
||||
{
|
||||
var normalizedName = Parser.Parser.Normalize(tagName);
|
||||
var normalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize(tagName);
|
||||
return await _context.Tag
|
||||
.FirstOrDefaultAsync(g => g.NormalizedTitle.Equals(normalizedName));
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace API.Data
|
|||
new()
|
||||
{
|
||||
Name = "Dark",
|
||||
NormalizedName = Parser.Parser.Normalize("Dark"),
|
||||
NormalizedName = Services.Tasks.Scanner.Parser.Parser.Normalize("Dark"),
|
||||
Provider = ThemeProvider.System,
|
||||
FileName = "dark.scss",
|
||||
IsDefault = true,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue