Repository navigation
Fix compatibility with Nextcloud 33 - #259
stephancordes wants to merge 41 commits into
Conversation
|
Should address the 33 compatibility issues already and @miaulalala also did a v34 compatibility PR already. Is his PR still needed @stephancordes? Also seems to be Claude gone nuts in terms of commits 😕 |
There was a problem hiding this comment.
Pull request overview
Updates the Files MindMap Nextcloud app for compatibility up to Nextcloud 33 by aligning frontend build/configuration, adding MIME/extension handling, and refreshing localization strings used by the newer file actions / new-file menu integrations.
Changes:
- Adjust Vite build configuration and add generated public bundle output.
- Add/extend file-type handling metadata (KM extension + Nextcloud mimetype mapping).
- Update server-side save behavior and refresh many i18n strings (including new “Saved as …”/conversion prompts).
Reviewed changes
Copilot reviewed 213 out of 219 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| vite.config.ts | Tweaks Vite build behavior (preserve output dir, raise chunk warning limit) and removes Vue dedupe config. |
| src/plugins/km.js | Adds extensions: ['km'] metadata for KM plugin. |
| src/tests/plugins/freemind.spec.js | Removes legacy global setup from FreeMind plugin tests. |
| package.json | Bumps app package version and updates Nextcloud-related JS dependencies. |
| lib/Controller/PublicFileHandlingController.php | Adjusts public-share save conflict check to only run when mtime is non-empty. |
| lib/Controller/FileHandlingController.php | Normalizes load path joining and adjusts save conflict check to only run when mtime is non-empty; removes path leakage in generic error response. |
| l10n/zh_TW.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/zh_TW.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/zh_HK.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/zh_HK.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/zh_CN.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/zh_CN.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/vi.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/vi.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/uz.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/uz.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ur_PK.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ur_PK.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/uk.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/uk.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ug.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ug.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/tr.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/tr.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/tk.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/tk.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/th.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/th.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ta.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ta.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sw.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sw.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sv.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sv.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sr@latin.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sr@latin.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sr.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sr.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sq.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sq.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sl.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sl.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sk.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sk.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/sc.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/sc.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ru.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ru.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ro.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ro.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/pt_PT.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/pt_PT.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/pt_BR.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/pt_BR.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ps.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ps.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/pl.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/pl.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/oc.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/oc.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/nn_NO.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/nn_NO.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/nl.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/nl.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/nb.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/nb.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ms_MY.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ms_MY.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/mn.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/mn.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/mk.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/mk.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/lv.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/lv.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/lt_LT.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/lt_LT.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/lo.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/lo.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/lb.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/lb.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ko.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ko.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/kn.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/kn.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/km.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/km.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/kab.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/kab.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ka.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ka.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ka_GE.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ka_GE.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ja.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ja.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/it.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/it.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/is.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/is.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/id.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/id.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ia.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ia.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/hy.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/hy.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/hu.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/hu.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/hr.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/hr.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/he.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/he.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/gl.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/gl.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/gd.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/gd.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ga.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ga.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/fr.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/fr.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/fi.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/fi.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/fa.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/fa.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/eu.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/eu.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/et_EE.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/et_EE.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_UY.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_UY.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_SV.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_SV.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_PY.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_PY.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_PR.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_PR.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_PE.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_PE.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_PA.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_PA.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_NI.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_NI.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_MX.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_MX.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_HN.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_HN.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_GT.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_GT.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_EC.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_EC.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_DO.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_DO.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_CR.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_CR.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_CO.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_CO.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_CL.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_CL.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_AR.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_AR.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/es_419.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/es_419.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/eo.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/eo.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/en_GB.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/en_GB.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/el.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/el.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/de.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/de_DE.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/da.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/da.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/cy_GB.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/cy_GB.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/cs.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/cs.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ca.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ca.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/bs.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/bs.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/br.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/br.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/bn_BD.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/bn_BD.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/bg.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/bg.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/be.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/be.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/az.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/az.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ast.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ast.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/ar.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/ar.js | Updates strings (new “Saved as …”/conversion prompts). |
| l10n/af.json | Updates strings (new “Saved as …”/conversion prompts) and normalizes JSON formatting. |
| l10n/af.js | Updates strings (new “Saved as …”/conversion prompts). |
| js/files_mindmap-public.mjs | Adds/updates built JS bundle for public-view handling. |
| appinfo/mimetypemapping.json | Adds extension→mimetype mapping for .km files. |
| appinfo/info.xml | Bumps app version metadata. |
| .gitignore | Stops ignoring js/ and adds .claude/. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Previously, an empty/missing mtime bypassed the optimistic-lock check entirely (Copilot review on nextcloud#259), allowing clients to silently overwrite concurrent changes. Now both FileHandlingController and PublicFileHandlingController reject save requests without mtime with HTTP 400 before the conflict check runs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
In the end @stephancordes you'll have to do a rebase to get rid of the merge conflict, see https://github.com/nextcloud/files_mindmap/pull/259/conflicts for the dependencies. Can be done at any time of course |
|
Also please add the sign-off, see https://github.com/nextcloud/files_mindmap/pull/259/checks?check_run_id=70903816397 or add it as a comment in the PR description. To add your Signed-off-by line to every commit in this branch:
Thanks in advance ❤️ |
…e build config Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
…ities Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
…n type - Import addNewFileMenuEntry from @nextcloud/files (v4) alongside legacy - registerNewFileMenuPlugin() now uses the v4 API for version >= 33 so the "New mind map" entry appears in the Files new-file menu on NC 33+ - Change DefaultType.HIDDEN to DefaultType.DEFAULT so clicking a .km file triggers the file action and opens the viewer - Rebuild JS bundles Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
…de() - setFile() now reads file.path ?? file.filename so NC 28+ Viewer's Node objects are handled correctly (path was always undefined → wrong dir) - Replace OCA.FilesMindMap.hide() calls in viewer.js with optional chaining so load failures no longer crash when hide() is not defined Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
…back for new files - freemind.js: replace bare FilesMindMap.Util.xml2json() (ReferenceError in ES module scope) with imported util.xml2json() - mindmap.js load(): when server returns unsupported mime (e.g. octet-stream for a freshly created empty .km file), fall back to extension-based mime detection against registered plugins Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
…te global mock
- mindmap.spec.js: add two setFile tests for NC 28+ Node objects (path
instead of filename) and one load() test for octet-stream mime fallback
- freemind.spec.js: remove the global.FilesMindMap = { Util: util } workaround
now that freemind.js imports util directly
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: stephancordes <stephan@cordes.site>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
- save(): guard against null plugin when mime is unknown (TypeError crash) - load(): extend extension fallback to use plugin.extensions array - freemind.js: add extensions: ['mm'] for octet-stream fallback matching - Application.php: register .mm -> application/x-freemind mime type - registerNewFileMenuPlugin: separate translatable name from .km extension so translated filenames always get the correct extension appended - l10n: rename 'New mind map.km' key to 'New mind map' in 50 translation files and strip accidental .km suffixes from translated values Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
$message = $path accidentally replaced the l10n error string with the raw file path, hiding the real error from the user on unexpected exceptions during save. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Nextcloud apps are deployed by copying files directly — no build step on the server. Keeping the bundles in git ensures the deployed code always matches the source and prevents stale-bundle issues like the ones fixed in this branch. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
…NC 33 - Fix mtime conflict check to skip when mtime is empty (prevented saving) - Fix new file source URL encoding to preserve .km extension - Set _file.mime immediately in setFile() from Viewer Node object - Add extensions: ['km'] to km plugin for explicit extension fallback - Remove dedupe: ['vue'] from vite config to fix Vue 2/3 build conflict - Add appinfo/mimetypemapping.json for belt-and-suspenders MIME hint - Rebuild JS bundles Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
- Construct WebDAV URL via generateRemoteUrl instead of context.encodedSource to reliably preserve .km extension regardless of NC files context object - Add console.debug to log PUT URL for debugging - Add Ctrl+S keydown handler in MindMap.vue (parent frame) so browser does not intercept the shortcut when focus is outside the iframe Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
- viewer.php: minder-editor-container top: 0 → 40px so menu bar is visible - viewer.js: Ctrl+S uses capture-phase listener to intercept before KityMinder - mindmap.js: .mm files are saved as new .km via WebDAV PUT instead of failing - FileHandlingController: rtrim() prevents double-slash in load path (fixes "file not found" immediately after new file creation) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
#header-controls had overflow:hidden which clipped the dropdown opening downward. Changed to overflow:visible and added z-index:2000 on .dropdown-menu to ensure it appears above the KityMinder canvas. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
OCA.FilesMindMap.hide() was never defined — the optional call hide?.() from the iframe silently returned undefined. The new method clicks .modal-container__close programmatically; the button is display:none !important but still in the DOM, and element.click() bypasses CSS visibility to fire the Vue handler. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Previously, an empty/missing mtime bypassed the optimistic-lock check entirely (Copilot review on nextcloud#259), allowing clients to silently overwrite concurrent changes. Now both FileHandlingController and PublicFileHandlingController reject save requests without mtime with HTTP 400 before the conflict check runs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: stephancordes <stephan@cordes.site>
Signed-off-by: stephancordes <stephan@cordes.site>
Signed-off-by: stephancordes <stephan@cordes.site>
|
The PR should now show no conflicts:
|
@stephancordes Yeah well, when opening a PR you are deleting it upstream... so no, you can't delete it claude ;)
It has a huge amount of changes which I would not expect but I am not an expert on it, so @miaulalala might know better
Should actually stick to 0.0.34 simply due to the fact that 0.0.33 has been the last release, so there is no need to constantly bump the version number in the meta data due to changes since the bump would happen at release time |
|
@AndyScherzinger |
|
@stephancordes See
So currently not all checks can be executed. So this would need to get fixed first. After that we can have a look and get it merged later. for a first, new release we would leave this out, to keep changes at a minimum, in case we need to search for issues with that minimal release it is easier if the change set is smaller. Could you cover the above and add it to your branch? Thanks in adavance |
|
Additionally, all l10n files can go - they are maintained via transifex. |
|
Yes, i will do both tomorrow. |
|
Go @stephancordes ? |
|
@henmohr see feedback in #269 (title is misleading) regarding people testing 0.1.0-beta release which provide compatibility to 33 and have been successfully tested while they all needed an uninstall / reinstall of the app since something is still off with the update from 0.33.0 to newer versions since the app transfer. |
|
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
miaulalala
left a comment
There was a problem hiding this comment.
Thanks for tackling NC33 compatibility! The core registerFileAction()/addNewFileMenuEntry() migration looks structurally sound, but the diff is a lot bigger than the description suggests (mostly generated build/l10n noise, but also some bundled-in unrelated changes), and a few things need a closer look before merging.
-
Verify the appstore CI workflow deletion is intentional.
.github/workflows/appstore-build-publish.ymlappears to be deleted with nothing added to replace it. If that's not intentional (e.g. replaced by an org-wide reusable workflow elsewhere), this would mean future tagged releases stop being built/signed/published to the appstore — this alone should block merge until confirmed. -
Please split this PR. The actual NC33 compatibility migration (file-action API, version bump, dependency updates) is a small, reviewable change on its own. The
.mm→.kmauto-conversion feature, the Viewer-chrome-hiding DOM hacks inMindMap.vue, and the FirefoxSVGTextElementmonkey-patch are unrelated features/fixes that deserve their own PRs — they're also the least-tested, highest-risk parts of this diff. -
Duplicate test files.
src/__tests__/MindMap.spec.jsandsrc/__tests__/mindmap.spec.jsare now byte-identical. Besides being redundant, this can collide on case-insensitive filesystems (macOS/Windows CI). Please keep one and either restore genuineMindMap.vuecomponent coverage or note that it's intentionally dropped. -
vite.config.ts:emptyOutDir: false. Was this intentional? Not clearing the output dir before build risks shipping stale JS chunks alongside new ones — a plausible contributor to the broken 0.0.34-beta.1 release. Clearing the output dir is normally the safer default. -
Two unannounced behavior changes worth double-checking:
DefaultType.HIDDEN→DefaultType.DEFAULTinregisterFileActions()changes the double-click default action for mind-map files across all supported NC versions, not just 33.- The new
empty($mtime)guard in bothFileHandlingController::save()andPublicFileHandlingController::save()— sinceempty(0)istruein PHP, could this incorrectly reject a save wheremtimeis legitimately0?
Nice catch, unrelated but worth calling out: removing the $message = $path; line in FileHandlingController::save() looks like a genuine bug fix (it was overwriting the translated error message with a raw file path, a minor info leak) — good to keep, just worth mentioning explicitly in the PR description since it's easy to lose track of in a large diff.
|
A fix of the compatibility of the mind map app with Nextcloud 33 would be appreciated. |
|
@Object9050 the latest releases cover v33. If you still face issues please report them specifically than I can have a look when time permits 👍 |
|
However, I keep this PT open, to harvest any improvements not yet put in place elsewhere already |
Thank you! I had to delete the cookies. Now it's working just fine. |
Happy to hear that 🎉 |
|
Thank you @stephancordes for this PR and the analysis behind it. Rather than merging it as a whole (it also carried build output, l10n changes and Nextcloud 33 work that has meanwhile shipped), its remaining fixes were taken over as focused PRs:
The idea of saving |
Changes
Tested on
Fixes #191
Cloude Code did most of the work