Skip to content

Commit 6ac5b08

Browse files
autosave when applying settings to users (#149)
* autosave when applying settings to users * Apply suggestions from code review Co-authored-by: Axl <103554043+RadicalMuffinMan@users.noreply.github.com> --------- Co-authored-by: Axl <103554043+RadicalMuffinMan@users.noreply.github.com>
1 parent c6b3a3b commit 6ac5b08

1 file changed

Lines changed: 97 additions & 85 deletions

File tree

backend/Pages/configPage.html

Lines changed: 97 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,98 +1670,103 @@ <h3 class="sectionTitle">Web Plugin Status</h3>
16701670
});
16711671
}
16721672

1673+
function submit() {
1674+
return ApiClient.getPluginConfiguration(MoonfinConfig.pluginUniqueId).then(function(config) {
1675+
config.EnableSettingsSync = document.querySelector('#EnableSettingsSync').checked;
1676+
config.JellyseerrEnabled = document.querySelector('#JellyseerrEnabled').checked;
1677+
config.JellyseerrUrl = document.querySelector('#JellyseerrUrl').value || null;
1678+
config.JellyseerrDisplayName = document.querySelector('#JellyseerrDisplayName').value || null;
1679+
config.MdblistApiKey = document.querySelector('#MdblistApiKey').value || null;
1680+
config.TmdbApiKey = document.querySelector('#TmdbApiKey').value || null;
1681+
config.WebDefaultServerUrl = document.querySelector('#WebDefaultServerUrl').value || null;
1682+
config.WebForcedServerUrl = document.querySelector('#WebForcedServerUrl').value || null;
1683+
config.WebEnableWebRtcScan = document.querySelector('#WebEnableWebRtcScan').checked;
1684+
1685+
config.DefaultUserSettings = config.DefaultUserSettings || {};
1686+
config.DefaultUserSettings.visualTheme = document.querySelector('#DefaultVisualTheme').value || null;
1687+
config.DefaultUserSettings.focusColor = document.querySelector('#DefaultFocusColor').value || null;
1688+
config.DefaultUserSettings.watchedIndicator = document.querySelector('#DefaultWatchedIndicator').value || null;
1689+
config.DefaultUserSettings.cardFocusExpansion = getNullableBoolSelect('#DefaultCardFocusExpansion');
1690+
config.DefaultUserSettings.screensaverMode = document.querySelector('#DefaultScreensaverMode').value || null;
1691+
1692+
config.DefaultUserSettings.navbarPosition = document.querySelector('#DefaultNavbarPosition').value || null;
1693+
config.DefaultUserSettings.navbarColor = document.querySelector('#DefaultNavbarColor').value || null;
1694+
config.DefaultUserSettings.navbarOpacity = getNullableIntInput('#DefaultNavbarOpacity');
1695+
1696+
config.DefaultUserSettings.mediaBarSourceType = document.querySelector('#DefaultMediaBarSourceType').value || null;
1697+
config.DefaultUserSettings.mediaBarMode = document.querySelector('#DefaultMediaBarMode').value || null;
1698+
config.DefaultUserSettings.mediaBarTrailerAudio = getNullableBoolSelect('#DefaultMediaBarTrailerAudio');
1699+
1700+
var collectionCbs = document.querySelectorAll('.adminCollectionCb:checked');
1701+
var collectionIds = [];
1702+
for (var ci = 0; ci < collectionCbs.length; ci++) {
1703+
collectionIds.push(collectionCbs[ci].dataset.id);
1704+
}
1705+
config.DefaultUserSettings.mediaBarCollectionIds = collectionIds.length > 0 ? collectionIds : null;
1706+
var libraryCbs = document.querySelectorAll('.adminLibraryCb:checked');
1707+
var libraryIds = [];
1708+
for (var li = 0; li < libraryCbs.length; li++) {
1709+
libraryIds.push(libraryCbs[li].dataset.id);
1710+
}
1711+
config.DefaultUserSettings.mediaBarLibraryIds = libraryIds.length > 0 ? libraryIds : null;
1712+
var genreCbs = document.querySelectorAll('.adminGenreCb:checked');
1713+
var genreIds = [];
1714+
for (var gi = 0; gi < genreCbs.length; gi++) {
1715+
genreIds.push(genreCbs[gi].dataset.id);
1716+
}
1717+
config.DefaultUserSettings.mediaBarExcludedGenres = genreIds.length > 0 ? genreIds : null;
1718+
1719+
config.DefaultUserSettings.homeRowsStyle = document.querySelector('#DefaultHomeRowsStyle').value || null;
1720+
config.DefaultUserSettings.fullScreenRows = getNullableBoolSelect('#DefaultFullScreenRows');
1721+
config.DefaultUserSettings.homeImageTypeContinueWatching = document.querySelector('#DefaultHomeImageTypeContinueWatching').value || null;
1722+
config.DefaultUserSettings.posterSize = document.querySelector('#DefaultPosterSize').value || null;
1723+
config.DefaultUserSettings.displayFavoritesRows = getNullableBoolSelect('#DefaultDisplayFavoritesRows');
1724+
config.DefaultUserSettings.displayCollectionsRows = getNullableBoolSelect('#DefaultDisplayCollectionsRows');
1725+
config.DefaultUserSettings.displayGenresRows = getNullableBoolSelect('#DefaultDisplayGenresRows');
1726+
config.DefaultUserSettings.displaySeerrRows = getNullableBoolSelect('#DefaultDisplaySeerrRows');
1727+
config.DefaultUserSettings.favoritesRowSortBy = document.querySelector('#DefaultFavoritesRowSortBy').value || null;
1728+
config.DefaultUserSettings.collectionsRowSortBy = document.querySelector('#DefaultCollectionsRowSortBy').value || null;
1729+
config.DefaultUserSettings.genresRowSortBy = document.querySelector('#DefaultGenresRowSortBy').value || null;
1730+
config.DefaultUserSettings.genresRowItemFilter = document.querySelector('#DefaultGenresRowItemFilter').value || null;
1731+
config.DefaultUserSettings.homeImageUseSeriesImage = getNullableBoolSelect('#DefaultHomeImageUseSeriesImage');
1732+
config.DefaultUserSettings.homeRowOrder = getHomeRowOrderValue();
1733+
config.DefaultUserSettings.mergeContinueWatchingNextUp = document.querySelector('#DefaultMergeContinueWatchingNextUp').checked;
1734+
1735+
config.DefaultUserSettings.showShuffleButton = document.querySelector('#DefaultShowShuffleButton').checked;
1736+
config.DefaultUserSettings.showGenresButton = document.querySelector('#DefaultShowGenresButton').checked;
1737+
config.DefaultUserSettings.showFavoritesButton = document.querySelector('#DefaultShowFavoritesButton').checked;
1738+
config.DefaultUserSettings.showCastButton = document.querySelector('#DefaultShowCastButton').checked;
1739+
config.DefaultUserSettings.showSyncPlayButton = document.querySelector('#DefaultShowSyncPlayButton').checked;
1740+
config.DefaultUserSettings.showLibrariesInToolbar = document.querySelector('#DefaultShowLibrariesInToolbar').checked;
1741+
1742+
config.DefaultUserSettings.episodePreviewEnabled = getNullableBoolSelect('#DefaultEpisodePreviewEnabled');
1743+
config.DefaultUserSettings.previewAudioEnabled = getNullableBoolSelect('#DefaultPreviewAudioEnabled');
1744+
1745+
config.DefaultUserSettings.mdblistEnabled = document.querySelector('#DefaultMdblistEnabled').checked;
1746+
config.DefaultUserSettings.tmdbEpisodeRatingsEnabled = document.querySelector('#DefaultTmdbEpisodeRatingsEnabled').checked;
1747+
config.DefaultUserSettings.mdblistShowRatingBadges = getNullableBoolSelect('#DefaultMdblistShowRatingBadges');
1748+
config.DefaultUserSettings.mdblistRatingSources = getRatingSourcesValue();
1749+
config.DefaultUserSettings.jellyseerrBlockNsfw = getNullableBoolSelect('#DefaultJellyseerrBlockNsfw');
1750+
1751+
return ApiClient.updatePluginConfiguration(MoonfinConfig.pluginUniqueId, config).then(function(result) {
1752+
Dashboard.processPluginConfigurationUpdateResult(result);
1753+
});
1754+
});
1755+
}
1756+
16731757
document.querySelector('#MoonfinConfigForm')
16741758
.addEventListener('submit', function(ev) {
16751759
ev.preventDefault();
16761760
Dashboard.showLoadingMsg();
1677-
ApiClient.getPluginConfiguration(MoonfinConfig.pluginUniqueId).then(function(config) {
1678-
config.EnableSettingsSync = document.querySelector('#EnableSettingsSync').checked;
1679-
config.JellyseerrEnabled = document.querySelector('#JellyseerrEnabled').checked;
1680-
config.JellyseerrUrl = document.querySelector('#JellyseerrUrl').value || null;
1681-
config.JellyseerrDisplayName = document.querySelector('#JellyseerrDisplayName').value || null;
1682-
config.MdblistApiKey = document.querySelector('#MdblistApiKey').value || null;
1683-
config.TmdbApiKey = document.querySelector('#TmdbApiKey').value || null;
1684-
config.WebDefaultServerUrl = document.querySelector('#WebDefaultServerUrl').value || null;
1685-
config.WebForcedServerUrl = document.querySelector('#WebForcedServerUrl').value || null;
1686-
config.WebEnableWebRtcScan = document.querySelector('#WebEnableWebRtcScan').checked;
1687-
1688-
config.DefaultUserSettings = config.DefaultUserSettings || {};
1689-
config.DefaultUserSettings.visualTheme = document.querySelector('#DefaultVisualTheme').value || null;
1690-
config.DefaultUserSettings.focusColor = document.querySelector('#DefaultFocusColor').value || null;
1691-
config.DefaultUserSettings.watchedIndicator = document.querySelector('#DefaultWatchedIndicator').value || null;
1692-
config.DefaultUserSettings.cardFocusExpansion = getNullableBoolSelect('#DefaultCardFocusExpansion');
1693-
config.DefaultUserSettings.screensaverMode = document.querySelector('#DefaultScreensaverMode').value || null;
1694-
1695-
config.DefaultUserSettings.navbarPosition = document.querySelector('#DefaultNavbarPosition').value || null;
1696-
config.DefaultUserSettings.navbarColor = document.querySelector('#DefaultNavbarColor').value || null;
1697-
config.DefaultUserSettings.navbarOpacity = getNullableIntInput('#DefaultNavbarOpacity');
1698-
1699-
config.DefaultUserSettings.mediaBarSourceType = document.querySelector('#DefaultMediaBarSourceType').value || null;
1700-
config.DefaultUserSettings.mediaBarMode = document.querySelector('#DefaultMediaBarMode').value || null;
1701-
config.DefaultUserSettings.mediaBarTrailerAudio = getNullableBoolSelect('#DefaultMediaBarTrailerAudio');
1702-
1703-
var collectionCbs = document.querySelectorAll('.adminCollectionCb:checked');
1704-
var collectionIds = [];
1705-
for (var ci = 0; ci < collectionCbs.length; ci++) {
1706-
collectionIds.push(collectionCbs[ci].dataset.id);
1707-
}
1708-
config.DefaultUserSettings.mediaBarCollectionIds = collectionIds.length > 0 ? collectionIds : null;
1709-
var libraryCbs = document.querySelectorAll('.adminLibraryCb:checked');
1710-
var libraryIds = [];
1711-
for (var li = 0; li < libraryCbs.length; li++) {
1712-
libraryIds.push(libraryCbs[li].dataset.id);
1713-
}
1714-
config.DefaultUserSettings.mediaBarLibraryIds = libraryIds.length > 0 ? libraryIds : null;
1715-
var genreCbs = document.querySelectorAll('.adminGenreCb:checked');
1716-
var genreIds = [];
1717-
for (var gi = 0; gi < genreCbs.length; gi++) {
1718-
genreIds.push(genreCbs[gi].dataset.id);
1719-
}
1720-
config.DefaultUserSettings.mediaBarExcludedGenres = genreIds.length > 0 ? genreIds : null;
1721-
1722-
config.DefaultUserSettings.homeRowsStyle = document.querySelector('#DefaultHomeRowsStyle').value || null;
1723-
config.DefaultUserSettings.fullScreenRows = getNullableBoolSelect('#DefaultFullScreenRows');
1724-
config.DefaultUserSettings.homeImageTypeContinueWatching = document.querySelector('#DefaultHomeImageTypeContinueWatching').value || null;
1725-
config.DefaultUserSettings.posterSize = document.querySelector('#DefaultPosterSize').value || null;
1726-
config.DefaultUserSettings.displayFavoritesRows = getNullableBoolSelect('#DefaultDisplayFavoritesRows');
1727-
config.DefaultUserSettings.displayCollectionsRows = getNullableBoolSelect('#DefaultDisplayCollectionsRows');
1728-
config.DefaultUserSettings.displayGenresRows = getNullableBoolSelect('#DefaultDisplayGenresRows');
1729-
config.DefaultUserSettings.displaySeerrRows = getNullableBoolSelect('#DefaultDisplaySeerrRows');
1730-
config.DefaultUserSettings.favoritesRowSortBy = document.querySelector('#DefaultFavoritesRowSortBy').value || null;
1731-
config.DefaultUserSettings.collectionsRowSortBy = document.querySelector('#DefaultCollectionsRowSortBy').value || null;
1732-
config.DefaultUserSettings.genresRowSortBy = document.querySelector('#DefaultGenresRowSortBy').value || null;
1733-
config.DefaultUserSettings.genresRowItemFilter = document.querySelector('#DefaultGenresRowItemFilter').value || null;
1734-
config.DefaultUserSettings.homeImageUseSeriesImage = getNullableBoolSelect('#DefaultHomeImageUseSeriesImage');
1735-
config.DefaultUserSettings.homeRowOrder = getHomeRowOrderValue();
1736-
config.DefaultUserSettings.mergeContinueWatchingNextUp = document.querySelector('#DefaultMergeContinueWatchingNextUp').checked;
1737-
1738-
config.DefaultUserSettings.showShuffleButton = document.querySelector('#DefaultShowShuffleButton').checked;
1739-
config.DefaultUserSettings.showGenresButton = document.querySelector('#DefaultShowGenresButton').checked;
1740-
config.DefaultUserSettings.showFavoritesButton = document.querySelector('#DefaultShowFavoritesButton').checked;
1741-
config.DefaultUserSettings.showCastButton = document.querySelector('#DefaultShowCastButton').checked;
1742-
config.DefaultUserSettings.showSyncPlayButton = document.querySelector('#DefaultShowSyncPlayButton').checked;
1743-
config.DefaultUserSettings.showLibrariesInToolbar = document.querySelector('#DefaultShowLibrariesInToolbar').checked;
1744-
1745-
config.DefaultUserSettings.episodePreviewEnabled = getNullableBoolSelect('#DefaultEpisodePreviewEnabled');
1746-
config.DefaultUserSettings.previewAudioEnabled = getNullableBoolSelect('#DefaultPreviewAudioEnabled');
1747-
1748-
config.DefaultUserSettings.mdblistEnabled = document.querySelector('#DefaultMdblistEnabled').checked;
1749-
config.DefaultUserSettings.tmdbEpisodeRatingsEnabled = document.querySelector('#DefaultTmdbEpisodeRatingsEnabled').checked;
1750-
config.DefaultUserSettings.mdblistShowRatingBadges = getNullableBoolSelect('#DefaultMdblistShowRatingBadges');
1751-
config.DefaultUserSettings.mdblistRatingSources = getRatingSourcesValue();
1752-
config.DefaultUserSettings.jellyseerrBlockNsfw = getNullableBoolSelect('#DefaultJellyseerrBlockNsfw');
1753-
1754-
ApiClient.updatePluginConfiguration(MoonfinConfig.pluginUniqueId, config).then(function(result) {
1755-
Dashboard.processPluginConfigurationUpdateResult(result);
1756-
});
1757-
});
1761+
submit();
17581762
return false;
17591763
});
17601764

17611765
var pushDefaultsBtn = document.querySelector('#PushDefaultsBtn');
17621766
if (pushDefaultsBtn && !pushDefaultsBtn.dataset.bound) {
17631767
pushDefaultsBtn.dataset.bound = 'true';
17641768
pushDefaultsBtn.addEventListener('click', function() {
1769+
17651770
var overwrite = !!(document.querySelector('#OverwriteAllCheckbox') || {}).checked;
17661771

17671772
var confirmMsg = overwrite
@@ -1781,11 +1786,14 @@ <h3 class="sectionTitle">Web Plugin Status</h3>
17811786
}
17821787

17831788
Dashboard.showLoadingMsg();
1784-
fetch(serverUrl + '/Moonfin/Admin/PushDefaults?overwrite=' + (overwrite ? 'true' : 'false'), {
1789+
submit()
1790+
.then(function() {
1791+
return fetch(serverUrl + '/Moonfin/Admin/PushDefaults?overwrite=' + (overwrite ? 'true' : 'false'), {
17851792
method: 'POST',
17861793
headers: headers,
17871794
body: '{}'
1788-
})
1795+
});
1796+
})
17891797
.then(parseJsonResponse)
17901798
.then(function(payload) {
17911799
var usersAffected = payload.usersAffected != null ? payload.usersAffected : payload.UsersAffected;
@@ -1833,6 +1841,7 @@ <h3 class="sectionTitle">Web Plugin Status</h3>
18331841
if (applySingleUserBtn && !applySingleUserBtn.dataset.bound) {
18341842
applySingleUserBtn.dataset.bound = 'true';
18351843
applySingleUserBtn.addEventListener('click', function() {
1844+
18361845
var select = document.querySelector('#SingleUserSelect');
18371846
var result = document.querySelector('#ApplySingleUserResult');
18381847
var userId = select ? select.value : '';
@@ -1864,11 +1873,14 @@ <h3 class="sectionTitle">Web Plugin Status</h3>
18641873
}
18651874

18661875
Dashboard.showLoadingMsg();
1867-
fetch(serverUrl + '/Moonfin/Admin/PushDefaults/' + encodeURIComponent(userId) + '?overwrite=' + (overwrite ? 'true' : 'false'), {
1876+
submit()
1877+
.then(function() {
1878+
return fetch(serverUrl + '/Moonfin/Admin/PushDefaults/' + encodeURIComponent(userId) + '?overwrite=' + (overwrite ? 'true' : 'false'), {
18681879
method: 'POST',
18691880
headers: headers,
18701881
body: '{}'
1871-
})
1882+
});
1883+
})
18721884
.then(parseJsonResponse)
18731885
.then(function() {
18741886
if (result) {

0 commit comments

Comments
 (0)