diff --git a/web/source/settings-panel/admin/actions.js b/web/source/settings-panel/admin/actions.js new file mode 100644 index 000000000..a9d779312 --- /dev/null +++ b/web/source/settings-panel/admin/actions.js @@ -0,0 +1,68 @@ +/* + GoToSocial + Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +"use strict"; + +const Promise = require("bluebird"); +const React = require("react"); +const Redux = require("react-redux"); + +const Submit = require("../components/submit"); + +const api = require("../lib/api"); + +module.exports = function AdminActionPanel() { + const dispatch = Redux.useDispatch(); + + const [days, setDays] = React.useState(30); + + const [errorMsg, setError] = React.useState(""); + const [statusMsg, setStatus] = React.useState(""); + + function submit() { + setStatus("PATCHing"); + setError(""); + return Promise.try(() => { + return dispatch(api.admin.mediaCleanup(days)); + }).then(() => { + setStatus("Saved!"); + }).catch((e) => { + setError(e.message); + setStatus(""); + }); + } + + return ( + <> +

Admin Actions

+
+

Media cleanup

+

+ Clean up remote media older than the specified number of days. + If the remote instance is still online they will be refetched when needed. + Also cleans up unused headers and avatars from the media cache. +

+
+ + setDays(e.target.value)}/> +
+ +
+ + ); +}; \ No newline at end of file diff --git a/web/source/settings-panel/index.js b/web/source/settings-panel/index.js index eec2ffab6..c2f3b0f8a 100644 --- a/web/source/settings-panel/index.js +++ b/web/source/settings-panel/index.js @@ -44,6 +44,7 @@ const nav = { "Admin": { adminOnly: true, "Instance Settings": require("./admin/settings.js"), + "Actions": require("./admin/actions"), "Federation": require("./admin/federation.js"), "Custom Emoji": require("./admin/emoji.js"), "Customization": require("./admin/customization.js") diff --git a/web/source/settings-panel/lib/api/admin.js b/web/source/settings-panel/lib/api/admin.js index 4d463433b..8c258f356 100644 --- a/web/source/settings-panel/lib/api/admin.js +++ b/web/source/settings-panel/lib/api/admin.js @@ -140,6 +140,14 @@ module.exports = function ({ apiCall, getChanges }) { }); }; }, + + mediaCleanup: function mediaCleanup(days) { + return function (dispatch, _getState) { + return Promise.try(() => { + return dispatch(apiCall("POST", `/api/v1/admin/media_cleanup?remote_cache_days=${days}`)); + }); + }; + } }; return adminAPI; }; \ No newline at end of file