1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-11-04 10:02:40 +01:00

Fixed: Regression setting file date

This commit is contained in:
ta264 2020-01-05 13:28:55 +00:00 committed by Qstick
parent 3a8920a1e9
commit 4025005251
3 changed files with 7 additions and 139 deletions

View File

@ -22,17 +22,17 @@ public class UpdateMovieFileService : IUpdateMovieFileService,
{
private readonly IDiskProvider _diskProvider;
private readonly IConfigService _configService;
private readonly IMovieService _movieService;
private readonly IMediaFileService _mediaFileService;
private readonly Logger _logger;
public UpdateMovieFileService(IDiskProvider diskProvider,
IConfigService configService,
IMovieService movieService,
Logger logger)
IConfigService configService,
IMediaFileService mediaFileService,
Logger logger)
{
_diskProvider = diskProvider;
_configService = configService;
_movieService = movieService;
_mediaFileService = mediaFileService;
_logger = logger;
}
@ -107,18 +107,11 @@ public void Handle(MovieScannedEvent message)
return;
}
var movies = _movieService.MoviesWithFiles(message.Movie.Id);
var movieFiles = new List<MovieFile>();
var movieFiles = _mediaFileService.GetFilesByMovie(message.Movie.Id);
var updated = new List<MovieFile>();
foreach (var group in movies.GroupBy(e => e.MovieFileId))
foreach (var movieFile in movieFiles)
{
var moviesInFile = group.Select(e => e).ToList();
var movieFile = moviesInFile.First().MovieFile;
movieFiles.Add(movieFile);
if (ChangeFileDate(movieFile, message.Movie))
{
updated.Add(movieFile);
@ -134,59 +127,5 @@ public void Handle(MovieScannedEvent message)
_logger.ProgressDebug("No file dates changed for {0}", message.Movie.Title);
}
}
private bool ChangeFileDateToLocalAirDate(string filePath, string fileDate, string fileTime)
{
DateTime airDate;
if (DateTime.TryParse(fileDate + ' ' + fileTime, out airDate))
{
// avoiding false +ve checks and set date skewing by not using UTC (Windows)
DateTime oldDateTime = _diskProvider.FileGetLastWrite(filePath);
if (!DateTime.Equals(airDate, oldDateTime))
{
try
{
_diskProvider.FileSetLastWriteTime(filePath, airDate);
_logger.Debug("Date of file [{0}] changed from '{1}' to '{2}'", filePath, oldDateTime, airDate);
return true;
}
catch (Exception ex)
{
_logger.Warn(ex, "Unable to set date of file [" + filePath + "]");
}
}
}
else
{
_logger.Debug("Could not create valid date to change file [{0}]", filePath);
}
return false;
}
private bool ChangeFileDateToUtcAirDate(string filePath, DateTime airDateUtc)
{
DateTime oldLastWrite = _diskProvider.FileGetLastWrite(filePath);
if (!DateTime.Equals(airDateUtc, oldLastWrite))
{
try
{
_diskProvider.FileSetLastWriteTime(filePath, airDateUtc);
_logger.Debug("Date of file [{0}] changed from '{1}' to '{2}'", filePath, oldLastWrite, airDateUtc);
return true;
}
catch (Exception ex)
{
_logger.Warn(ex, "Unable to set date of file [" + filePath + "]");
}
}
return false;
}
}
}

View File

@ -21,7 +21,6 @@ public interface IMovieRepository : IBasicRepository<Movie>
List<Movie> FindByTmdbId(List<int> tmdbids);
Movie FindByTitleSlug(string slug);
List<Movie> MoviesBetweenDates(DateTime start, DateTime end, bool includeUnmonitored);
List<Movie> MoviesWithFiles(int movieId);
PagingSpec<Movie> MoviesWithoutFiles(PagingSpec<Movie> pagingSpec);
List<Movie> GetMoviesByFileId(int fileId);
void SetFileId(int fileId, int movieId);
@ -164,11 +163,6 @@ public List<Movie> MoviesBetweenDates(DateTime start, DateTime end, bool include
return Query(builder);
}
public List<Movie> MoviesWithFiles(int movieId)
{
return Query(x => x.MovieFileId != 0);
}
public SqlBuilder MoviesWithoutFilesBuilder() => BuilderBase().Where<Movie>(x => x.MovieFileId == 0);
public PagingSpec<Movie> MoviesWithoutFiles(PagingSpec<Movie> pagingSpec)

View File

@ -47,8 +47,6 @@ public interface IMovieService
List<Movie> FilterExistingMovies(List<Movie> movies);
bool MoviePathExists(string folder);
void RemoveAddOptions(Movie movie);
List<Movie> MoviesWithFiles(int movieId);
System.Linq.Expressions.Expression<Func<Movie, bool>> ConstructFilterExpression(string filterKey, string filterValue, string filterType = null);
}
public class MovieService : IMovieService, IHandle<MovieFileAddedEvent>,
@ -76,64 +74,6 @@ public MovieService(IMovieRepository movieRepository,
_logger = logger;
}
public System.Linq.Expressions.Expression<Func<Movie, bool>> ConstructFilterExpression(string filterKey, string filterValue, string filterType = null)
{
//if (FilterKey == "all" && FilterValue == "all")
//{
// return v => v.Monitored == true || v.Monitored == false;
//}
if (filterKey == "monitored" && filterValue == "false")
{
return v => v.Monitored == false;
}
else if (filterKey == "monitored" && filterValue == "true")
{
return v => v.Monitored == true;
}
else if (filterKey == "status")
{
switch (filterValue)
{
case "released":
return v => v.Status == MovieStatusType.Released;
case "inCinemas":
return v => v.Status == MovieStatusType.InCinemas;
case "announced":
return v => v.Status == MovieStatusType.Announced;
case "available":
return v => v.Monitored == true &&
((v.MinimumAvailability == MovieStatusType.Released && v.Status >= MovieStatusType.Released) ||
(v.MinimumAvailability == MovieStatusType.InCinemas && v.Status >= MovieStatusType.InCinemas) ||
(v.MinimumAvailability == MovieStatusType.Announced && v.Status >= MovieStatusType.Announced) ||
((v.MinimumAvailability == MovieStatusType.PreDB && v.Status >= MovieStatusType.Released) || v.HasPreDBEntry == true));
}
}
else if (filterKey == "downloaded")
{
return v => v.MovieFileId == 0;
}
else if (filterKey == "title")
{
if (filterValue == string.Empty || filterValue == null)
{
return v => true;
}
else
{
if (filterType == "contains")
{
return v => v.CleanTitle.Contains(filterValue);
}
else
{
return v => v.CleanTitle == filterValue;
}
}
}
return v => true;
}
public Movie GetMovie(int movieId)
{
return _movieRepository.Get(movieId);
@ -465,11 +405,6 @@ public List<Movie> GetMoviesBetweenDates(DateTime start, DateTime end, bool incl
return movies;
}
public List<Movie> MoviesWithFiles(int movieId)
{
return _movieRepository.MoviesWithFiles(movieId);
}
public PagingSpec<Movie> MoviesWithoutFiles(PagingSpec<Movie> pagingSpec)
{
var movieResult = _movieRepository.MoviesWithoutFiles(pagingSpec);