Add config option to disable dummy chapter generation (#9410)

This commit is contained in:
Shadowghost 2023-03-14 23:20:12 +01:00 committed by GitHub
parent 28562bcadd
commit 21dcf775be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 28 deletions

View file

@ -243,16 +243,10 @@ namespace MediaBrowser.Model.Configuration
public bool AllowClientLogUpload { get; set; } = true; public bool AllowClientLogUpload { get; set; } = true;
/// <summary> /// <summary>
/// Gets or sets the dummy chapters duration in seconds. /// Gets or sets the dummy chapter duration in seconds, use 0 (zero) or less to disable generation alltogether.
/// </summary> /// </summary>
/// <value>The dummy chapters duration.</value> /// <value>The dummy chapters duration.</value>
public int DummyChapterDuration { get; set; } = 300; public int DummyChapterDuration { get; set; } = 0;
/// <summary>
/// Gets or sets the dummy chapter count.
/// </summary>
/// <value>The dummy chapter count.</value>
public int DummyChapterCount { get; set; } = 100;
/// <summary> /// <summary>
/// Gets or sets the chapter image resolution. /// Gets or sets the chapter image resolution.

View file

@ -298,7 +298,7 @@ namespace MediaBrowser.Providers.MediaInfo
if (options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || if (options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh ||
options.MetadataRefreshMode == MetadataRefreshMode.Default) options.MetadataRefreshMode == MetadataRefreshMode.Default)
{ {
if (chapters.Length == 0 && mediaStreams.Any(i => i.Type == MediaStreamType.Video)) if (_config.Configuration.DummyChapterDuration > 0 && chapters.Length == 0 && mediaStreams.Any(i => i.Type == MediaStreamType.Video))
{ {
chapters = CreateDummyChapters(video); chapters = CreateDummyChapters(video);
} }
@ -662,39 +662,39 @@ namespace MediaBrowser.Providers.MediaInfo
private ChapterInfo[] CreateDummyChapters(Video video) private ChapterInfo[] CreateDummyChapters(Video video)
{ {
var runtime = video.RunTimeTicks ?? 0; var runtime = video.RunTimeTicks ?? 0;
long dummyChapterDuration = TimeSpan.FromSeconds(_config.Configuration.DummyChapterDuration).Ticks;
if (runtime < 0) // Only process files with a runtime higher than 0 and lower than 12h. The latter are likely corrupted.
if (runtime < 0 || runtime > TimeSpan.FromHours(12).Ticks)
{ {
throw new ArgumentException( throw new ArgumentException(
string.Format( string.Format(
CultureInfo.InvariantCulture, CultureInfo.InvariantCulture,
"{0} has invalid runtime of {1}", "{0} has an invalid runtime of {1} minutes",
video.Name, video.Name,
runtime)); TimeSpan.FromTicks(runtime).Minutes));
} }
if (runtime < dummyChapterDuration) long dummyChapterDuration = TimeSpan.FromSeconds(_config.Configuration.DummyChapterDuration).Ticks;
if (runtime > dummyChapterDuration)
{ {
return Array.Empty<ChapterInfo>(); int chapterCount = (int)(runtime / dummyChapterDuration);
} var chapters = new ChapterInfo[chapterCount];
// Limit the chapters just in case there's some incorrect metadata here long currentChapterTicks = 0;
int chapterCount = (int)Math.Min(runtime / dummyChapterDuration, _config.Configuration.DummyChapterCount); for (int i = 0; i < chapterCount; i++)
var chapters = new ChapterInfo[chapterCount];
long currentChapterTicks = 0;
for (int i = 0; i < chapterCount; i++)
{
chapters[i] = new ChapterInfo
{ {
StartPositionTicks = currentChapterTicks chapters[i] = new ChapterInfo
}; {
StartPositionTicks = currentChapterTicks
};
currentChapterTicks += dummyChapterDuration; currentChapterTicks += dummyChapterDuration;
}
return chapters;
} }
return chapters; return Array.Empty<ChapterInfo>();
} }
} }
} }