Add Support for changing file date to either cinema or physical release.

Fixes #124
pull/307/head
Leonardo Galli 8 years ago
parent c64597c9f1
commit dd0a033b0f

@ -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 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; return false;
} }
public void Handle(SeriesScannedEvent message) 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…
Cancel
Save