213 lines
14 KiB
HTML
213 lines
14 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>TubeArchivistMetadata</title>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="TemplateConfigPage" data-role="page" class="page type-interior pluginConfigurationPage"
|
|
data-require="emby-input,emby-button,emby-select,emby-checkbox">
|
|
<div data-role="content">
|
|
<div class="content-primary">
|
|
<form id="TemplateConfigForm">
|
|
<div>
|
|
<h1>TubeArchivistMetadata</h1>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="CollectionTitle">Collection Title</label>
|
|
<input id="CollectionTitle" name="CollectionTitle" type="text" is="emby-input"
|
|
placeholder="eg. YouTube" />
|
|
<div class="fieldDescription">TubeArchivist collection display name</div>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="TubeArchivistUrl">TubeArchivist URL</label>
|
|
<input id="TubeArchivistUrl" name="TubeArchivistUrl" type="text" is="emby-input"
|
|
placeholder="http://..." />
|
|
<div class="fieldDescription">TubeArchivist URL</div>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="TubeArchivistApiKey">TubeArchivist API
|
|
key</label>
|
|
<input id="TubeArchivistApiKey" name="TubeArchivistApiKey" type="text" is="emby-input" />
|
|
<div class="fieldDescription">TubeArchivist API key</div>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="MaxDescriptionLength">Maximum overviews
|
|
length</label>
|
|
<input id="MaxDescriptionLength" name="MaxDescriptionLength" type="number" is="emby-input"
|
|
min="0" />
|
|
<div class="fieldDescription">This is the maximum length of the descriptions showed in series
|
|
and episodes</div>
|
|
</div>
|
|
<div>
|
|
<h2>Synchronization</h2>
|
|
</div>
|
|
<div>
|
|
<h3>Jellyfin to TubeArchivist</h3>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="JFUsernameFrom">Jellyfin username to sync
|
|
from</label>
|
|
<input id="JFUsernameFrom" name="JFUsernameFrom" type="text" is="emby-input"
|
|
placeholder="Username" />
|
|
<div class="fieldDescription">This is the Jellyfin username to synchronize data to
|
|
TubeArchivist</div>
|
|
</div>
|
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
|
<label class="emby-checkbox-label" for="JFTAProgressSync">
|
|
<input id="JFTAProgressSync" name="JFTAProgressSync" type="checkbox" is="emby-checkbox" />
|
|
<span>Synchronize Jellyfin playback progress to TubeArchivist</span>
|
|
</label>
|
|
</div>
|
|
<div style="display: flex; gap: 2em;">
|
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
|
<label class="emby-checkbox-label" for="JFTAPlaylistsSync">
|
|
<input id="JFTAPlaylistsSync" name="JFTAPlaylistsSync" type="checkbox" is="emby-checkbox" />
|
|
<span>Synchronize Jellyfin playlists to TubeArchivist</span>
|
|
</label>
|
|
</div>
|
|
|
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
|
<label class="emby-checkbox-label" for="JFTAPlaylistsDelete">
|
|
<input id="JFTAPlaylistsDelete" name="JFTAPlaylistsDelete" type="checkbox" is="emby-checkbox" />
|
|
<span>Delete TubeArchivist playlists when no more present on Jellyfin</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h3>TubeArchivist to Jellyfin</h3>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="JFUsernamesTo">Jellyfin usernames to sync
|
|
playback status to</label>
|
|
<input id="JFUsernamesTo" name="JFUsernamesTo" type="text" is="emby-input"
|
|
placeholder="Username1, username2, ..." />
|
|
<div class="fieldDescription">These are the (comma separated) Jellyfin usernames to synchronize
|
|
data from TubeArchivist</div>
|
|
</div>
|
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
|
<label class="emby-checkbox-label" for="TAJFProgressSync">
|
|
<input id="TAJFProgressSync" name="TAJFProgressSync" type="checkbox" is="emby-checkbox" />
|
|
<span>Synchronize TubeArchivist playback progress to Jellyfin</span>
|
|
</label>
|
|
</div>
|
|
<div style="display: flex; gap: 2em;">
|
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
|
<label class="emby-checkbox-label" for="TAJFPlaylistsSync">
|
|
<input id="TAJFPlaylistsSync" name="TAJFPlaylistsSync" type="checkbox" is="emby-checkbox" />
|
|
<span>Synchronize TubeArchivist playlists to Jellyfin</span>
|
|
</label>
|
|
</div>
|
|
|
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
|
<label class="emby-checkbox-label" for="TAJFPlaylistsDelete">
|
|
<input id="TAJFPlaylistsDelete" name="TAJFPlaylistsDelete" type="checkbox" is="emby-checkbox" />
|
|
<span>Delete Jellyfin playlists when no more present on TubeArchivist</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<h2>Tasks intervals</h2>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="TAJFProgressTaskInterval">TubeArchivist to Jellyfin
|
|
playback progress synchronization interval</label>
|
|
<input id="TAJFProgressTaskInterval" name="TAJFProgressTaskInterval" type="number" is="emby-input" min="60" />
|
|
<div class="fieldDescription">This is the TubeArchivist to Jellyfin playback progress
|
|
synchronization interval in seconds (Jellyfin restart required).</div>
|
|
</div>
|
|
<div class="selectContainer">
|
|
<label class="selectLabel" for="EpisodeNumberingScheme">Episode numbering scheme</label>
|
|
<select is="emby-select" id="EpisodeNumberingScheme" name="EpisodeNumberingScheme" label="Description markup" class="emby-select-withcolor emby-select">
|
|
<option value="Default">Default (no specified numbering)</option>
|
|
<option value="YYYYMMDD">YYYYMMDD (e.g. 20250804 for August 4th, 2025)</option>
|
|
</select>
|
|
<div class="selectArrowContainer">
|
|
<span class="selectArrow material-icons keyboard_arrow_down" aria-hidden="true"></span>
|
|
</div>
|
|
<div class="fieldDescription">This is the numbering scheme for episodes in Jellyfin (IndexNumber).
|
|
Default is the same as no numbering which allows Jellyfin to use the fallback numbering scheme.</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="JFTAPlaylistsSyncTaskInterval">Jellyfin to TubeArchivist
|
|
playlists synchronization interval</label>
|
|
<input id="JFTAPlaylistsSyncTaskInterval" name="JFTAPlaylistsSyncTaskInterval" type="number" is="emby-input" min="60" />
|
|
<div class="fieldDescription">This is the Jellyfin to TubeArchivist playlists
|
|
synchronization interval in seconds (Jellyfin restart required).</div>
|
|
</div>
|
|
<div class="inputContainer">
|
|
<label class="inputLabel inputLabelUnfocused" for="TAJFPlaylistsSyncTaskInterval">TubeArchivist to Jellyfin
|
|
playlists synchronization interval</label>
|
|
<input id="TAJFPlaylistsSyncTaskInterval" name="TAJFPlaylistsSyncTaskInterval" type="number" is="emby-input"
|
|
min="60" />
|
|
<div class="fieldDescription">This is the TubeArchivist to Jellyfin playlists
|
|
synchronization interval in seconds (Jellyfin restart required).</div>
|
|
</div>
|
|
<div>
|
|
<button is="emby-button" type="submit" class="raised button-submit block emby-button">
|
|
<span>Save</span>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
var TAMetadataConfig = {
|
|
pluginUniqueId: 'dc97d0c6-28b0-4242-afb4-5833ae1b3715'
|
|
};
|
|
|
|
document.querySelector('#TemplateConfigPage')
|
|
.addEventListener('pageshow', function () {
|
|
Dashboard.showLoadingMsg();
|
|
ApiClient.getPluginConfiguration(TAMetadataConfig.pluginUniqueId).then(function (config) {
|
|
document.querySelector('#CollectionTitle').value = config.CollectionTitle;
|
|
document.querySelector('#TubeArchivistUrl').value = config.TubeArchivistUrl;
|
|
document.querySelector('#TubeArchivistApiKey').value = config.TubeArchivistApiKey;
|
|
document.querySelector('#MaxDescriptionLength').value = config.MaxDescriptionLength;
|
|
document.querySelector('#JFTAProgressSync').checked = config.JFTAProgressSync;
|
|
document.querySelector('#JFUsernamesTo').value = config.JFUsernamesTo;
|
|
document.querySelector('#TAJFProgressSync').checked = config.TAJFProgressSync;
|
|
document.querySelector('#JFTAPlaylistsSync').checked = config.JFTAPlaylistsSync;
|
|
document.querySelector('#TAJFPlaylistsSync').checked = config.TAJFPlaylistsSync;
|
|
document.querySelector('#JFUsernameFrom').value = config.JFUsernameFrom;
|
|
document.querySelector('#EpisodeNumberingScheme').value = config.EpisodeNumberingScheme;
|
|
document.querySelector('#TAJFProgressTaskInterval').value = config.TAJFProgressTaskInterval;
|
|
document.querySelector('#JFTAPlaylistsSyncTaskInterval').value = config.JFTAPlaylistsSyncTaskInterval;
|
|
document.querySelector('#TAJFPlaylistsSyncTaskInterval').value = config.TAJFPlaylistsSyncTaskInterval;
|
|
Dashboard.hideLoadingMsg();
|
|
});
|
|
});
|
|
|
|
document.querySelector('#TemplateConfigForm')
|
|
.addEventListener('submit', function (e) {
|
|
Dashboard.showLoadingMsg();
|
|
ApiClient.getPluginConfiguration(TAMetadataConfig.pluginUniqueId).then(function (config) {
|
|
config.CollectionTitle = document.querySelector('#CollectionTitle').value;
|
|
config.TubeArchivistUrl = document.querySelector('#TubeArchivistUrl').value;
|
|
config.TubeArchivistApiKey = document.querySelector('#TubeArchivistApiKey').value;
|
|
config.MaxDescriptionLength = document.querySelector('#MaxDescriptionLength').value;
|
|
config.JFTAProgressSync = document.querySelector('#JFTAProgressSync').checked;
|
|
config.JFUsernamesTo = document.querySelector('#JFUsernamesTo').value;
|
|
config.TAJFProgressSync = document.querySelector('#TAJFProgressSync').checked;
|
|
config.JFTAPlaylistsSync = document.querySelector('#JFTAPlaylistsSync').checked;
|
|
config.TAJFPlaylistsSync = document.querySelector('#TAJFPlaylistsSync').checked;
|
|
config.JFUsernameFrom = document.querySelector('#JFUsernameFrom').value;
|
|
config.EpisodeNumberingScheme = document.querySelector('#EpisodeNumberingScheme').value;
|
|
config.TAJFProgressTaskInterval = document.querySelector('#TAJFProgressTaskInterval').value;
|
|
config.JFTAPlaylistsSyncTaskInterval = document.querySelector('#JFTAPlaylistsSyncTaskInterval').value;
|
|
config.TAJFPlaylistsSyncTaskInterval = document.querySelector('#TAJFPlaylistsSyncTaskInterval').value;
|
|
ApiClient.updatePluginConfiguration(TAMetadataConfig.pluginUniqueId, config).then(function (result) {
|
|
Dashboard.processPluginConfigurationUpdateResult(result);
|
|
});
|
|
});
|
|
|
|
e.preventDefault();
|
|
return false;
|
|
});
|
|
</script>
|
|
</div>
|
|
</body>
|
|
|
|
</html>
|