diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b86d183..62d8687c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Improve: relax mtime check on storage filesystem, change test file location to "collection-root" directory * Add: option [auth] type pam by code migration from v1, add new option pam_serivce * Cosmetics: extend list of used modules with their version on startup +* Improve: WebUI ## 3.4.1 * Add: option [auth] dovecot_connection_type / dovecot_host / dovecot_port diff --git a/radicale/storage/multifilesystem/meta.py b/radicale/storage/multifilesystem/meta.py index b95fb162..8b64c656 100644 --- a/radicale/storage/multifilesystem/meta.py +++ b/radicale/storage/multifilesystem/meta.py @@ -1,7 +1,8 @@ # This file is part of Radicale - CalDAV and CardDAV server # Copyright © 2014 Jean-Marc Martins # Copyright © 2012-2017 Guillaume Ayoub -# Copyright © 2017-2018 Unrud +# Copyright © 2017-2021 Unrud +# Copyright © 2024-2025 Peter Bieringer # # This library is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -62,6 +63,9 @@ class CollectionPartMeta(CollectionBase): def set_meta(self, props: Mapping[str, str]) -> None: # TODO: better fix for "mypy" - with self._atomic_write(self._props_path, "w") as fo: # type: ignore - f = cast(TextIO, fo) - json.dump(props, f, sort_keys=True) + try: + with self._atomic_write(self._props_path, "w") as fo: # type: ignore + f = cast(TextIO, fo) + json.dump(props, f, sort_keys=True) + except OSError as e: + raise ValueError("Failed to write meta data %r %s" % (self._props_path, e)) from e diff --git a/radicale/web/internal_data/fn.js b/radicale/web/internal_data/fn.js index a83a6edd..745ea87d 100644 --- a/radicale/web/internal_data/fn.js +++ b/radicale/web/internal_data/fn.js @@ -2,6 +2,7 @@ * This file is part of Radicale Server - Calendar Server * Copyright © 2017-2024 Unrud * Copyright © 2023-2024 Matthew Hana + * Copyright © 2024-2025 Peter Bieringer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1006,6 +1007,12 @@ function UploadCollectionScene(user, password, collection) { scene_index = scene_stack.length - 1; html_scene.classList.remove("hidden"); close_btn.onclick = onclose; + if(error){ + error_form.textContent = "Error: " + error; + error_form.classList.remove("hidden"); + }else{ + error_form.classList.add("hidden"); + } }; this.hide = function() { @@ -1318,6 +1325,12 @@ function CreateEditCollectionScene(user, password, collection) { fill_form(); submit_btn.onclick = onsubmit; cancel_btn.onclick = oncancel; + if(error){ + error_form.textContent = "Error: " + error; + error_form.classList.remove("hidden"); + }else{ + error_form.classList.add("hidden"); + } }; this.hide = function() { read_form(); diff --git a/radicale/web/internal_data/index.html b/radicale/web/internal_data/index.html index 7806765f..9ac96795 100644 --- a/radicale/web/internal_data/index.html +++ b/radicale/web/internal_data/index.html @@ -1,4 +1,10 @@ + @@ -116,6 +122,8 @@ + +