Merge branch 'develop' of https://github.com/Kareadita/Kavita into develop

This commit is contained in:
majora2007 2022-01-13 16:18:26 +00:00
commit b12c8d8927
2 changed files with 81 additions and 6 deletions

View File

@ -34,6 +34,7 @@ public class CleanupServiceTests
private const string CacheDirectory = "C:/kavita/config/cache/"; private const string CacheDirectory = "C:/kavita/config/cache/";
private const string CoverImageDirectory = "C:/kavita/config/covers/"; private const string CoverImageDirectory = "C:/kavita/config/covers/";
private const string BackupDirectory = "C:/kavita/config/backups/"; private const string BackupDirectory = "C:/kavita/config/backups/";
private const string BookmarkDirectory = "C:/kavita/config/bookmarks/";
public CleanupServiceTests() public CleanupServiceTests()
@ -75,6 +76,9 @@ public class CleanupServiceTests
setting = await _context.ServerSetting.Where(s => s.Key == ServerSettingKey.BackupDirectory).SingleAsync(); setting = await _context.ServerSetting.Where(s => s.Key == ServerSettingKey.BackupDirectory).SingleAsync();
setting.Value = BackupDirectory; setting.Value = BackupDirectory;
setting = await _context.ServerSetting.Where(s => s.Key == ServerSettingKey.BookmarkDirectory).SingleAsync();
setting.Value = BookmarkDirectory;
_context.ServerSetting.Update(setting); _context.ServerSetting.Update(setting);
_context.Library.Add(new Library() _context.Library.Add(new Library()
@ -94,6 +98,8 @@ public class CleanupServiceTests
private async Task ResetDB() private async Task ResetDB()
{ {
_context.Series.RemoveRange(_context.Series.ToList()); _context.Series.RemoveRange(_context.Series.ToList());
_context.Users.RemoveRange(_context.Users.ToList());
_context.AppUserBookmark.RemoveRange(_context.AppUserBookmark.ToList());
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
} }
@ -106,6 +112,7 @@ public class CleanupServiceTests
fileSystem.AddDirectory(CacheDirectory); fileSystem.AddDirectory(CacheDirectory);
fileSystem.AddDirectory(CoverImageDirectory); fileSystem.AddDirectory(CoverImageDirectory);
fileSystem.AddDirectory(BackupDirectory); fileSystem.AddDirectory(BackupDirectory);
fileSystem.AddDirectory(BookmarkDirectory);
fileSystem.AddDirectory("C:/data/"); fileSystem.AddDirectory("C:/data/");
return fileSystem; return fileSystem;
@ -356,4 +363,71 @@ public class CleanupServiceTests
} }
#endregion #endregion
#region CleanupBookmarks
[Fact]
public async Task CleanupBookmarks_LeaveAllFiles()
{
var filesystem = CreateFileSystem();
filesystem.AddFile($"{BookmarkDirectory}1/1/1/0001.jpg", new MockFileData(""));
filesystem.AddFile($"{BookmarkDirectory}1/1/1/0002.jpg", new MockFileData(""));
// Delete all Series to reset state
await ResetDB();
_context.Series.Add(new Series()
{
Name = "Test",
Library = new Library() {
Name = "Test LIb",
Type = LibraryType.Manga,
},
Volumes = new List<Volume>()
{
new Volume()
{
Chapters = new List<Chapter>()
{
new Chapter()
{
}
}
}
}
});
await _context.SaveChangesAsync();
_context.AppUser.Add(new AppUser()
{
Bookmarks = new List<AppUserBookmark>()
{
new AppUserBookmark()
{
AppUserId = 1,
ChapterId = 1,
Page = 1,
FileName = "1/1/1/0001.jpg",
SeriesId = 1,
VolumeId = 1
}
}
});
await _context.SaveChangesAsync();
var ds = new DirectoryService(Substitute.For<ILogger<DirectoryService>>(), filesystem);
var cleanupService = new CleanupService(_logger, _unitOfWork, _messageHub,
ds);
await cleanupService.CleanupBookmarks();
Assert.Equal(1, ds.GetFiles(BookmarkDirectory, searchOption:SearchOption.AllDirectories).Count());
}
#endregion
} }

View File

@ -174,16 +174,17 @@ namespace API.Services.Tasks
/// </summary> /// </summary>
public async Task CleanupBookmarks() public async Task CleanupBookmarks()
{ {
// Search all files in bookmarks/ // Search all files in bookmarks/ except bookmark files and delete those
// except bookmark files and delete those
var bookmarkDirectory = var bookmarkDirectory =
(await _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.BookmarkDirectory)).Value; (await _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.BookmarkDirectory)).Value;
var allBookmarkFiles = _directoryService.GetFiles(bookmarkDirectory, searchOption: SearchOption.AllDirectories); var allBookmarkFiles = _directoryService.GetFiles(bookmarkDirectory, searchOption: SearchOption.AllDirectories).Select(f => _directoryService.FileSystem.Path.GetFullPath(f));
var bookmarks = (await _unitOfWork.UserRepository.GetAllBookmarksAsync()) var bookmarks = (await _unitOfWork.UserRepository.GetAllBookmarksAsync())
.Select(b => _directoryService.FileSystem.Path.Join(bookmarkDirectory, .Select(b => _directoryService.FileSystem.Path.GetFullPath(_directoryService.FileSystem.Path.Join(bookmarkDirectory,
b.FileName)); b.FileName)));
var filesToDelete = allBookmarkFiles.Except(bookmarks);
var filesToDelete = allBookmarkFiles.ToList().Except(bookmarks).ToList();
_logger.LogDebug("[Bookmarks] Bookmark cleanup wants to delete {Count} files", filesToDelete.Count());
_directoryService.DeleteFiles(filesToDelete); _directoryService.DeleteFiles(filesToDelete);