SubtitleEdit/libse/SceneChangeHelper.cs

77 lines
2.5 KiB
C#
Raw Normal View History

2016-08-04 22:41:37 +02:00
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
namespace Nikse.SubtitleEdit.Core
{
public static class SceneChangeHelper
{
2016-08-05 17:14:03 +02:00
private static string GetSceneChangesFileName(string videoFileName)
{
var dir = Configuration.SceneChangesDirectory.TrimEnd(Path.DirectorySeparatorChar);
if (!Directory.Exists(dir))
2019-01-19 14:40:37 +01:00
{
Directory.CreateDirectory(dir);
2019-01-19 14:40:37 +01:00
}
var newFileName = MovieHasher.GenerateHash(videoFileName) + ".scenechanges";
newFileName = Path.Combine(dir, newFileName);
return newFileName;
}
2016-08-05 17:14:03 +02:00
/// <summary>
/// Load scene changes from file
/// </summary>
/// <param name="videoFileName">Video file name</param>
/// <returns>List of scene changes in seconds</returns>
2016-08-04 22:41:37 +02:00
public static List<double> FromDisk(string videoFileName)
{
var list = new List<double>();
var sceneChangesFileName = GetSceneChangesFileName(videoFileName);
if (!File.Exists(sceneChangesFileName))
2019-01-19 14:40:37 +01:00
{
2016-08-04 22:41:37 +02:00
return list;
2019-01-19 14:40:37 +01:00
}
2016-08-04 22:41:37 +02:00
foreach (var line in File.ReadLines(sceneChangesFileName))
{
if (!string.IsNullOrWhiteSpace(line))
{
list.Add(double.Parse(line, CultureInfo.InvariantCulture));
}
}
return list;
}
2016-08-05 17:14:03 +02:00
/// <summary>
/// Saves scene changes
/// </summary>
/// <param name="videoFileName">Video file name</param>
/// <param name="list">List of scene changes in seconds</param>
public static void SaveSceneChanges(string videoFileName, List<double> list)
2016-08-04 22:41:37 +02:00
{
var sb = new StringBuilder();
foreach (var d in list)
{
sb.AppendLine(d.ToString(CultureInfo.InvariantCulture));
}
File.WriteAllText(GetSceneChangesFileName(videoFileName), sb.ToString().Trim());
}
2016-08-05 17:14:03 +02:00
/// <summary>
/// Delete scene changes file associated with video file
/// </summary>
/// <param name="videoFileName">Video file name</param>
public static void DeleteSceneChanges(string videoFileName)
2016-08-04 22:41:37 +02:00
{
var sceneChangesFileName = GetSceneChangesFileName(videoFileName);
if (File.Exists(sceneChangesFileName))
2019-01-19 14:40:37 +01:00
{
2016-08-04 22:41:37 +02:00
File.Delete(sceneChangesFileName);
2019-01-19 14:40:37 +01:00
}
2016-08-04 22:41:37 +02:00
}
}
2016-08-05 17:14:03 +02:00
}