Cleaned up some warnings and implemented re-occuring scan libraries task. Customization of task schedules is in v0.2.

This commit is contained in:
Joseph Milazzo 2021-01-19 14:41:50 -06:00
parent e180032a8e
commit 3c8e4b2240
13 changed files with 20 additions and 58 deletions

View File

@ -22,18 +22,16 @@ namespace API.Controllers
private readonly IMapper _mapper;
private readonly ITaskScheduler _taskScheduler;
private readonly IUnitOfWork _unitOfWork;
private readonly ICacheService _cacheService;
public LibraryController(IDirectoryService directoryService,
ILogger<LibraryController> logger, IMapper mapper, ITaskScheduler taskScheduler,
IUnitOfWork unitOfWork, ICacheService cacheService)
IUnitOfWork unitOfWork)
{
_directoryService = directoryService;
_logger = logger;
_mapper = mapper;
_taskScheduler = taskScheduler;
_unitOfWork = unitOfWork;
_cacheService = cacheService;
}
/// <summary>

View File

@ -4,8 +4,6 @@ using System.Threading.Tasks;
using API.DTOs;
using API.Extensions;
using API.Interfaces;
using AutoMapper;
using Hangfire;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
@ -16,15 +14,12 @@ namespace API.Controllers
{
private readonly ILogger<SeriesController> _logger;
private readonly ITaskScheduler _taskScheduler;
private readonly ICacheService _cacheService;
private readonly IUnitOfWork _unitOfWork;
public SeriesController(ILogger<SeriesController> logger, ITaskScheduler taskScheduler,
ICacheService cacheService, IUnitOfWork unitOfWork)
public SeriesController(ILogger<SeriesController> logger, ITaskScheduler taskScheduler, IUnitOfWork unitOfWork)
{
_logger = logger;
_taskScheduler = taskScheduler;
_cacheService = cacheService;
_unitOfWork = unitOfWork;
}

View File

@ -39,11 +39,6 @@ namespace API.Data
.WithOne(u => u.Role)
.HasForeignKey(ur => ur.RoleId)
.IsRequired();
// AppUsers have Libraries, not other way around
// builder.Entity<Library>()
// .HasMany(p => p.AppUsers)
// .WithMany(p => p.Libraries)
// .UsingEntity(j => j.ToTable("AppUserLibrary"));
}
void OnEntityTracked(object sender, EntityTrackedEventArgs e)

View File

@ -63,17 +63,6 @@ namespace API.Data
public async Task<IEnumerable<SeriesDto>> GetSeriesDtoForLibraryIdAsync(int libraryId, int userId)
{
// if (userId > 0)
// {
// return await _context.AppUserProgresses
// .Include(p => p.Series)
// .Where(p => p.AppUserId == userId && p.Series.LibraryId == libraryId)
// .Select(p => p.Series)
// .ProjectTo<SeriesDto>(_mapper.ConfigurationProvider)
// //.Select(s => s.PagesRead = )
// .ToListAsync();
// }
var sw = Stopwatch.StartNew();
var series = await _context.Series
.Where(s => s.LibraryId == libraryId)

View File

@ -20,7 +20,7 @@ namespace API.Data
}
public ISeriesRepository SeriesRepository => new SeriesRepository(_context, _mapper);
public IUserRepository UserRepository => new UserRepository(_context, _mapper, _userManager);
public IUserRepository UserRepository => new UserRepository(_context, _userManager);
public ILibraryRepository LibraryRepository => new LibraryRepository(_context, _mapper);
public async Task<bool> Complete()

View File

@ -5,8 +5,6 @@ using API.Constants;
using API.DTOs;
using API.Entities;
using API.Interfaces;
using AutoMapper;
using AutoMapper.QueryableExtensions;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
@ -15,13 +13,11 @@ namespace API.Data
public class UserRepository : IUserRepository
{
private readonly DataContext _context;
private readonly IMapper _mapper;
private readonly UserManager<AppUser> _userManager;
public UserRepository(DataContext context, IMapper mapper, UserManager<AppUser> userManager)
public UserRepository(DataContext context, UserManager<AppUser> userManager)
{
_context = context;
_mapper = mapper;
_userManager = userManager;
}
@ -77,13 +73,5 @@ namespace API.Data
.AsNoTracking()
.ToListAsync();
}
// public async Task<MemberDto> GetMemberAsync(string username)
// {
// return await _context.Users.Where(x => x.UserName == username)
// .Include(x => x.Libraries)
// .ProjectTo<MemberDto>(_mapper.ConfigurationProvider)
// .SingleOrDefaultAsync();
// }
}
}

View File

@ -1,5 +1,4 @@
using System.ComponentModel.DataAnnotations.Schema;

namespace API.Entities
{
/// <summary>

View File

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using API.Entities.Interfaces;
namespace API.Entities

View File

@ -10,13 +10,6 @@ namespace API.Helpers
public AutoMapperProfiles()
{
CreateMap<LibraryDto, Library>();
// .ForMember(dest => dest.Folders,
// opt =>
// opt.MapFrom(src => src.Folders.Select(x => new FolderPath()
// {
// Path = x,
// //LibraryId = src.Id
// }).ToList()));
CreateMap<Volume, VolumeDto>();

View File

@ -13,9 +13,6 @@ namespace API.Interfaces
/// <returns>List of folder names</returns>
IEnumerable<string> ListDirectory(string rootPath);
//IList<string> ListFiles(string rootPath);
/// <summary>
/// Given a library id, scans folders for said library. Parses files and generates DB updates. Will overwrite
/// cover images if forceUpdate is true.
@ -24,6 +21,8 @@ namespace API.Interfaces
/// <param name="forceUpdate">Force overwriting for cover images</param>
void ScanLibrary(int libraryId, bool forceUpdate);
void ScanLibraries();
/// <summary>
/// Returns the path a volume would be extracted to.
/// Deprecated.

View File

@ -13,7 +13,7 @@ namespace API.Interfaces
Series GetSeriesByName(string name);
Task<IEnumerable<SeriesDto>> GetSeriesDtoForLibraryIdAsync(int libraryId, int userId);
Task<IEnumerable<Series>> GetSeriesForLibraryIdAsync(int libraryId);
Task<IEnumerable<VolumeDto>> GetVolumesDtoAsync(int seriesId, int userId = 0);
Task<IEnumerable<VolumeDto>> GetVolumesDtoAsync(int seriesId, int userId);
IEnumerable<Volume> GetVolumes(int seriesId);
Task<SeriesDto> GetSeriesDtoByIdAsync(int seriesId);

View File

@ -210,6 +210,15 @@ namespace API.Services
return volumes;
}
public void ScanLibraries()
{
var libraries = Task.Run(() => _unitOfWork.LibraryRepository.GetLibrariesAsync()).Result.ToList();
foreach (var lib in libraries)
{
ScanLibrary(lib.Id, false);
}
}
public void ScanLibrary(int libraryId, bool forceUpdate)
{
var sw = Stopwatch.StartNew();

View File

@ -8,21 +8,19 @@ namespace API.Services
{
private readonly ICacheService _cacheService;
private readonly ILogger<TaskScheduler> _logger;
private readonly IUnitOfWork _unitOfWork;
private readonly IDirectoryService _directoryService;
public BackgroundJobServer Client => new BackgroundJobServer();
public TaskScheduler(ICacheService cacheService, ILogger<TaskScheduler> logger,
IUnitOfWork unitOfWork, IDirectoryService directoryService)
IDirectoryService directoryService)
{
_cacheService = cacheService;
_logger = logger;
_unitOfWork = unitOfWork;
_directoryService = directoryService;
_logger.LogInformation("Scheduling/Updating cache cleanup on a daily basis.");
RecurringJob.AddOrUpdate(() => _cacheService.Cleanup(), Cron.Daily);
//RecurringJob.AddOrUpdate(() => scanService.ScanLibraries(), Cron.Daily);
RecurringJob.AddOrUpdate(() => directoryService.ScanLibraries(), Cron.Daily);
}
public void ScanLibrary(int libraryId, bool forceUpdate = false)