Add option to not skip the first episode's intro

Closes #78
This commit is contained in:
ConfusedPolarBear 2022-09-02 01:54:49 -05:00
parent fa9eba300a
commit 930100798a
3 changed files with 40 additions and 9 deletions

View File

@ -74,6 +74,8 @@ public class AutoSkip : IServerEntryPoint
private void UserDataManager_UserDataSaved(object? sender, UserDataSaveEventArgs e)
{
var itemId = e.Item.Id;
var newState = false;
var episodeNumber = e.Item.IndexNumber.GetValueOrDefault(-1);
// Ignore all events except playback start & end
if (e.SaveReason != UserDataSaveReason.PlaybackStart && e.SaveReason != UserDataSaveReason.PlaybackFinished)
@ -106,13 +108,19 @@ public class AutoSkip : IServerEntryPoint
return;
}
// If this is the first episode in the season, and SkipFirstEpisode is false, pretend that we've already sent the seek command for this playback session.
if (!Plugin.Instance!.Configuration.SkipFirstEpisode && episodeNumber == 1)
{
newState = true;
}
// Reset the seek command state for this device.
lock (_sentSeekCommandLock)
{
var device = session.DeviceId;
_logger.LogDebug("Resetting seek command state for session {Session}", device);
_sentSeekCommand[device] = false;
_sentSeekCommand[device] = newState;
}
}

View File

@ -78,4 +78,9 @@ public class PluginConfiguration : BasePluginConfiguration
/// Gets or sets the seconds after the intro starts to hide the skip prompt at.
/// </summary>
public int HidePromptAdjustment { get; set; } = 10;
/// <summary>
/// Gets or sets a value indicating whether the introduction in the first episode of a season should be skipped.
/// </summary>
public bool SkipFirstEpisode { get; set; } = true;
}

View File

@ -171,6 +171,17 @@
</div>
</div>
<div class="checkboxContainer checkboxContainer-withDescription">
<label class="emby-checkbox-label">
<input id="SkipFirstEpisode" type="checkbox" is="emby-checkbox" />
<span>Automatically skip intros in the first episode of a season</span>
</label>
<div class="fieldDescription">
If checked, auto skip will skip introductions in the first episode of a season.<br />
</div>
</div>
<div class="inputContainer">
<label class="inputLabel inputLabelUnfocused" for="ShowPromptAdjustment">
Show skip prompt at
@ -347,6 +358,13 @@
"HidePromptAdjustment"
]
var booleanConfigurationFields = [
"CacheFingerprints",
"RegenerateEdl",
"AutoSkip",
"SkipFirstEpisode"
]
// visualizer elements
var canvas = document.querySelector("canvas#troubleshooter");
var selectShow = document.querySelector("select#troubleshooterShow");
@ -664,14 +682,14 @@
.addEventListener('pageshow', function () {
Dashboard.showLoadingMsg();
ApiClient.getPluginConfiguration("c83d86bb-a1e0-4c35-a113-e2101cf4ee6b").then(function (config) {
document.querySelector('#AutoSkip').checked = config.AutoSkip;
document.querySelector('#RegenerateEdl').checked = config.RegenerateEdlFiles;
document.querySelector('#CacheFingerprints').checked = config.CacheFingerprints;
for (const field of configurationFields) {
document.querySelector("#" + field).value = config[field];
}
for (const field of booleanConfigurationFields) {
document.querySelector("#" + field).checked = config[field];
}
Dashboard.hideLoadingMsg();
});
});
@ -680,14 +698,14 @@
.addEventListener('submit', function (e) {
Dashboard.showLoadingMsg();
ApiClient.getPluginConfiguration("c83d86bb-a1e0-4c35-a113-e2101cf4ee6b").then(function (config) {
config.AutoSkip = document.querySelector('#AutoSkip').checked;
config.RegenerateEdlFiles = document.querySelector('#RegenerateEdl').checked;
config.CacheFingerprints = document.querySelector('#CacheFingerprints').checked;
for (const field of configurationFields) {
config[field] = document.querySelector("#" + field).value;
}
for (const field of booleanConfigurationFields) {
config[field] = document.querySelector("#" + field).checked;
}
ApiClient.updatePluginConfiguration("c83d86bb-a1e0-4c35-a113-e2101cf4ee6b", config)
.then(function (result) {
Dashboard.processPluginConfigurationUpdateResult(result);