mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-23 14:55:20 -07:00
Add Support for changing file date to either cinema or physical release.
Fixes #124
This commit is contained in:
parent
c64597c9f1
commit
dd0a033b0f
6 changed files with 202 additions and 84 deletions
|
@ -0,0 +1,67 @@
|
||||||
|
using System.Data;
|
||||||
|
using FluentMigrator;
|
||||||
|
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Datastore.Migration
|
||||||
|
{
|
||||||
|
[Migration(121)]
|
||||||
|
public class update_filedate_config : NzbDroneMigrationBase
|
||||||
|
{
|
||||||
|
protected override void MainDbUpgrade()
|
||||||
|
{
|
||||||
|
Execute.WithConnection(SetTitleSlug);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetTitleSlug(IDbConnection conn, IDbTransaction tran)
|
||||||
|
{
|
||||||
|
using (IDbCommand getSeriesCmd = conn.CreateCommand())
|
||||||
|
{
|
||||||
|
getSeriesCmd.Transaction = tran;
|
||||||
|
getSeriesCmd.CommandText = @"SELECT Id, Value FROM Config WHERE Key = 'filedate'";
|
||||||
|
using (IDataReader seriesReader = getSeriesCmd.ExecuteReader())
|
||||||
|
{
|
||||||
|
while (seriesReader.Read())
|
||||||
|
{
|
||||||
|
var id = seriesReader.GetInt32(0);
|
||||||
|
var value = seriesReader.GetString(1);
|
||||||
|
|
||||||
|
using (IDbCommand updateCmd = conn.CreateCommand())
|
||||||
|
{
|
||||||
|
updateCmd.Transaction = tran;
|
||||||
|
updateCmd.CommandText = "UPDATE Config SET Value = 'Release' WHERE Id = ?";
|
||||||
|
updateCmd.AddParameter(id);
|
||||||
|
|
||||||
|
updateCmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToUrlSlug(string value)
|
||||||
|
{
|
||||||
|
//First to lower case
|
||||||
|
value = value.ToLowerInvariant();
|
||||||
|
|
||||||
|
//Remove all accents
|
||||||
|
var bytes = Encoding.GetEncoding("Cyrillic").GetBytes(value);
|
||||||
|
value = Encoding.ASCII.GetString(bytes);
|
||||||
|
|
||||||
|
//Replace spaces
|
||||||
|
value = Regex.Replace(value, @"\s", "-", RegexOptions.Compiled);
|
||||||
|
|
||||||
|
//Remove invalid chars
|
||||||
|
value = Regex.Replace(value, @"[^a-z0-9\s-_]", "", RegexOptions.Compiled);
|
||||||
|
|
||||||
|
//Trim dashes from end
|
||||||
|
value = value.Trim('-', '_');
|
||||||
|
|
||||||
|
//Replace double occurences of - or _
|
||||||
|
value = Regex.Replace(value, @"([-_]){2,}", "$1", RegexOptions.Compiled);
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
public enum FileDateType
|
public enum FileDateType
|
||||||
{
|
{
|
||||||
None = 0,
|
None = 0,
|
||||||
LocalAirDate = 1,
|
Cinemas = 1,
|
||||||
UtcAirDate = 2
|
Release = 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||||
|
|
||||||
switch (_configService.FileDate)
|
switch (_configService.FileDate)
|
||||||
{
|
{
|
||||||
case FileDateType.LocalAirDate:
|
case FileDateType.Release:
|
||||||
{
|
{
|
||||||
var airDate = episodes.First().AirDate;
|
var airDate = episodes.First().AirDate;
|
||||||
var airTime = series.AirTime;
|
var airTime = series.AirTime;
|
||||||
|
@ -62,7 +62,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||||
return ChangeFileDateToLocalAirDate(episodeFilePath, airDate, airTime);
|
return ChangeFileDateToLocalAirDate(episodeFilePath, airDate, airTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
case FileDateType.UtcAirDate:
|
case FileDateType.Cinemas:
|
||||||
{
|
{
|
||||||
var airDateUtc = episodes.First().AirDateUtc;
|
var airDateUtc = episodes.First().AirDateUtc;
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UpdateMovieFileService : IUpdateMovieFileService,
|
public class UpdateMovieFileService : IUpdateMovieFileService,
|
||||||
IHandle<SeriesScannedEvent>
|
IHandle<MovieScannedEvent>
|
||||||
{
|
{
|
||||||
private readonly IDiskProvider _diskProvider;
|
private readonly IDiskProvider _diskProvider;
|
||||||
private readonly IConfigService _configService;
|
private readonly IConfigService _configService;
|
||||||
|
@ -47,10 +47,60 @@ namespace NzbDrone.Core.MediaFiles
|
||||||
{
|
{
|
||||||
var movieFilePath = Path.Combine(movie.Path, movieFile.RelativePath);
|
var movieFilePath = Path.Combine(movie.Path, movieFile.RelativePath);
|
||||||
|
|
||||||
|
switch (_configService.FileDate)
|
||||||
|
{
|
||||||
|
case FileDateType.Release:
|
||||||
|
{
|
||||||
|
var airDate = movie.PhysicalRelease;
|
||||||
|
|
||||||
|
if (airDate == null)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handle(SeriesScannedEvent message)
|
return ChangeFileDate(movieFilePath, airDate.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
case FileDateType.Cinemas:
|
||||||
|
{
|
||||||
|
var airDate = movie.InCinemas;
|
||||||
|
|
||||||
|
if (airDate == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ChangeFileDate(movieFilePath, airDate.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool ChangeFileDate(string filePath, DateTime date)
|
||||||
|
{
|
||||||
|
DateTime oldDateTime = _diskProvider.FileGetLastWrite(filePath);
|
||||||
|
|
||||||
|
if (!DateTime.Equals(date, oldDateTime))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_diskProvider.FileSetLastWriteTime(filePath, date);
|
||||||
|
_logger.Debug("Date of file [{0}] changed from '{1}' to '{2}'", filePath, oldDateTime, date);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Warn(ex, "Unable to set date of file [" + filePath + "]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Handle(MovieScannedEvent message)
|
||||||
{
|
{
|
||||||
if (_configService.FileDate == FileDateType.None)
|
if (_configService.FileDate == FileDateType.None)
|
||||||
{
|
{
|
||||||
|
|
|
@ -183,6 +183,7 @@
|
||||||
<Compile Include="Datastore\Migration\002_remove_tvrage_imdb_unique_constraint.cs" />
|
<Compile Include="Datastore\Migration\002_remove_tvrage_imdb_unique_constraint.cs" />
|
||||||
<Compile Include="Datastore\Migration\003_remove_clean_title_from_scene_mapping.cs" />
|
<Compile Include="Datastore\Migration\003_remove_clean_title_from_scene_mapping.cs" />
|
||||||
<Compile Include="Datastore\Migration\004_updated_history.cs" />
|
<Compile Include="Datastore\Migration\004_updated_history.cs" />
|
||||||
|
<Compile Include="Datastore\Migration\121_update_filedate_config.cs" />
|
||||||
<Compile Include="Datastore\Migration\120_add_studio_to_table.cs" />
|
<Compile Include="Datastore\Migration\120_add_studio_to_table.cs" />
|
||||||
<Compile Include="Datastore\Migration\119_add_youtube_trailer_id_table .cs" />
|
<Compile Include="Datastore\Migration\119_add_youtube_trailer_id_table .cs" />
|
||||||
<Compile Include="Datastore\Migration\118_update_movie_slug.cs" />
|
<Compile Include="Datastore\Migration\118_update_movie_slug.cs" />
|
||||||
|
|
|
@ -77,8 +77,8 @@
|
||||||
<div class="col-sm-2 col-sm-pull-1">
|
<div class="col-sm-2 col-sm-pull-1">
|
||||||
<select class="form-control" name="fileDate">
|
<select class="form-control" name="fileDate">
|
||||||
<option value="none">None</option>
|
<option value="none">None</option>
|
||||||
<option value="localAirDate">Local Air Date</option>
|
<option value="cinemas">In Cinemas Date</option>
|
||||||
<option value="utcAirDate">UTC Air Date</option>
|
<option value="release">Physical Release Date</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue