Skip to content

Commit

Permalink
Add an ignore filter for the library scanner
Browse files Browse the repository at this point in the history
  • Loading branch information
revam committed Sep 30, 2021
1 parent f0cca78 commit 9499101
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Shokofin/Configuration/PluginConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public virtual string PrettyHost

public UserConfiguration[] UserList { get; set; }

public string[] IgnoredFileExtensions { get; set; }

public PluginConfiguration()
{
Host = "http://127.0.0.1:8111";
Expand Down Expand Up @@ -96,6 +98,7 @@ public PluginConfiguration()
MovieOrdering = OrderType.Default;
FilterOnLibraryTypes = false;
UserList = Array.Empty<UserConfiguration>();
IgnoredFileExtensions  = new [] { ".nfo", ".jpg", ".jpeg", ".png", ".srt", ".stl", ".sub", ".scc" };
}
}
}
7 changes: 7 additions & 0 deletions Shokofin/Configuration/configController.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ async function defaultSubmit(form) {
publicHost = publicHost.slice(0, -1);
form.querySelector("#PublicHost").value = publicHost;
}
const ignoredFileExtensions = form.querySelector("#IgnoredFileExtensions").value.split(/[\s,]+/g).map(str =>  { str = str.trim(); if (str[0] !== ".") str = "." + str; return str; });

// Metadata settings
config.TitleMainType = form.querySelector("#TitleMainType").value;
Expand All @@ -113,6 +114,8 @@ async function defaultSubmit(form) {

// Advanced settings
config.PublicHost = publicHost;
config.IgnoredFileExtensions = ignoredFileExtensions;
form.querySelector("#IgnoredFileExtensions").value = ignoredFileExtensions.join(" ");
config.PreferAniDbPoster = form.querySelector("#PreferAniDbPoster").checked;
config.AddAniDBId = form.querySelector("#AddAniDBId").checked;

Expand Down Expand Up @@ -205,6 +208,7 @@ async function syncSettings(form) {
publicHost = publicHost.slice(0, -1);
form.querySelector("#PublicHost").value = publicHost;
}
const ignoredFileExtensions = form.querySelector("#IgnoredFileExtensions").value.split(/[\s,]+/g).map(str =>  { str = str.trim(); if (str[0] !== ".") str = "." + str; return str; });

// Metadata settings
config.TitleMainType = form.querySelector("#TitleMainType").value;
Expand All @@ -231,6 +235,8 @@ async function syncSettings(form) {

// Advanced settings
config.PublicHost = publicHost;
config.IgnoredFileExtensions = ignoredFileExtensions;
form.querySelector("#IgnoredFileExtensions").value = ignoredFileExtensions.join(" ");
config.PreferAniDbPoster = form.querySelector("#PreferAniDbPoster").checked;
config.AddAniDBId = form.querySelector("#AddAniDBId").checked;

Expand Down Expand Up @@ -383,6 +389,7 @@ export default function (page) {

// Advanced settings
form.querySelector("#PublicHost").value = config.PublicHost;
form.querySelector("#IgnoredFileExtensions").value = config.IgnoredFileExtensions.join(" ");
form.querySelector("#PreferAniDbPoster").checked = config.PreferAniDbPoster;
form.querySelector("#AddAniDBId").checked = config.AddAniDBId;

Expand Down
4 changes: 4 additions & 0 deletions Shokofin/Configuration/configPage.html
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,10 @@ <h3>Advanced Settings</h3>
<input is="emby-input" type="text" id="PublicHost" label="Public Shoko host URL:" />
<div class="fieldDescription">This is the public URL leading to where Shoko is running. It is used to redirect to Shoko if you click on a Shoko ID in the UI if Shoko and/or Jellyfin is running within a container. It should include both the protocol and the IP/DNS name.</div>
</div>
<div class="inputContainer inputContainer-withDescription">
<input is="emby-input" type="text" id="IgnoredFileExtensions" label="Ignored file extensions:" />
<div class="fieldDescription">A space seperated list of file extensions which will be ignored during the library scan.</div>
</div>
<div class="checkboxContainer checkboxContainer-withDescription">
<label class="emby-checkbox-label">
<input is="emby-checkbox" type="checkbox" id="PreferAniDbPoster" />
Expand Down
5 changes: 5 additions & 0 deletions Shokofin/LibraryScanner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ public bool ShouldIgnore(MediaBrowser.Model.IO.FileSystemMetadata fileInfo, Base
if (!Lookup.IsEnabledForItem(parent))
return false;

if (!fileInfo.IsDirectory && Plugin.Instance.IgnoredFileExtensions.Contains(fileInfo.Extension)) {
Logger.LogDebug("Skipped excluded file at path {Path}", fileInfo.FullName);
return false;
}

var fullPath = fileInfo.FullName;
var mediaFolder = ApiManager.FindMediaFolder(fullPath, parent as Folder, root);
var partialPath = fullPath.Substring(mediaFolder.Path.Length);
Expand Down
12 changes: 12 additions & 0 deletions Shokofin/Plugin.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Model.Plugins;
Expand All @@ -19,8 +20,19 @@ public class Plugin : BasePlugin<PluginConfiguration>, IHasWebPages
public Plugin(IApplicationPaths applicationPaths, IXmlSerializer xmlSerializer) : base(applicationPaths, xmlSerializer)
{
Instance = this;
ConfigurationChanged += OnConfigChanged;
IgnoredFileExtensions = this.Configuration.IgnoredFileExtensions.Where(s => s != null).Select(s => s[0] == '.' ? s : string.Concat(".", s)).ToHashSet();
}

public void OnConfigChanged(object sender, BasePluginConfiguration e)
{
if (!(e is PluginConfiguration config))
return;
IgnoredFileExtensions = config.IgnoredFileExtensions.Where(s => s != null).Select(s => s[0] == '.' ? s : string.Concat(".", s)).ToHashSet();
}

public HashSet<string> IgnoredFileExtensions;

public static Plugin Instance { get; private set; }

public IEnumerable<PluginPageInfo> GetPages()
Expand Down

0 comments on commit 9499101

Please sign in to comment.