Skip to content

[Bug]: confilct handling in web UI is fundamentally broken #57931

@isdnfan

Description

@isdnfan

⚠️ This issue respects the following points: ⚠️

Bug description

in my case the problem especially arises in combination of mobile app auto-upload and manual file sorting into different folders. if for some reason I don't move but copy the files initially and later try to move same file into final destination there is no way to resolve file conflicts using the conflict dialogue.
There are multiple design flaws in this dialogue

  • if the user copies/moves multiple files each files is handled on it's own, there is no way to apply an action to each file from the selection, there is also no way to completely stop the operation - the user must repeat the selection for every file in the queue
  • in case file names are longer the operation overlay (moving file xyz to folder) is shown on top of "continue" button

Steps to reproduce

  1. create 2 folders with identical content, in my case two copies of pre-defined "Photos" folder
Image
  1. choose multiple files in folder "copy of photos 2"
Image
  1. and choose move to "copy of photos 1"
Image

observe the issue

  • the dialogue doesn't provide details for the "new" file version you are trying to move (but this is know as files exist on the server already)
  • even if details would exist important information is missing like creation and modification time, size and ideally hash to see if the file is identical
Image
  • long destination name overlays buttons (workaround to reduse scaling in the browser with ctrl+-)
Image
  • "select all existing files" is non-functional as this dialogue repeats for all chosen files as each operation seems to handle only one file at time
  • "select all new files" is non-functional as well
Image Image
  • checkbox "select all new/existing files" is exactly the same as select specific file close to the filename
Image - select existing file" is broken as it leaves the file you are trying to copy in the original folder (same as "skip this file") but without any clarification so the user is surprized later to find the files he moved to another place to remain in the original location

Expected behavior

  1. file conflict dialog must allow user to decide which file to keep and should expose as many metadata as possible: filename, creation and modification time, checksum, format specific metadata headers like EXIF
  2. operations on multiple files should allow to chose specific action (overwrite/keep destination) for all files in the queue
  3. it should be possible to stop the queue completely
  4. multi-file operation should allow to see details of all files affected at once (table view) and only list conflicting files continuing processing on files without issues asyncronously

Nextcloud Server version

32

Operating system

Debian/Ubuntu

PHP engine version

PHP 8.3

Web server

Apache (supported)

Database engine version

PostgreSQL

Is this bug present after an update or on a fresh install?

Upgraded to a MAJOR version (ex. 31 to 32)

Are you using the Nextcloud Server Encryption module?

None

What user-backends are you using?

  • Default user-backend (database)
  • LDAP/ Active Directory
  • SSO - SAML
  • Other

Configuration report

{
    "system": {
        "htaccess.RewriteBase": "\/",
        "memcache.local": "\\OC\\Memcache\\APCu",
        "apps_paths": [
            {
                "path": "\/var\/www\/html\/apps",
                "url": "\/apps",
                "writable": false
            },
            {
                "path": "\/var\/www\/html\/custom_apps",
                "url": "\/custom_apps",
                "writable": true
            }
        ],
        "overwritehost": "dev-nc.techisfun.net",
        "overwriteprotocol": "https",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "localhost",
            "dev-nc.weikum.ch"
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "pgsql",
        "version": "32.0.5.0",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbport": "",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "maintenance": false,
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "password": "***REMOVED SENSITIVE VALUE***",
            "port": 6379
        },
        "default_phone_region": "CH",
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpmode": "smtp",
        "mail_sendmailmode": "smtp",
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpsecure": "ssl",
        "mail_smtpauthtype": "LOGIN",
        "mail_smtpauth": true,
        "mail_smtpport": "465",
        "allow_local_remote_servers": true,
        "trashbin_retention_obligation": "15, 180",
        "app_install_overwrite": [
            "suspicious_login",
            "privatedata",
            "forms"
        ],
        "serverinfo": {
            "token": "***REMOVED SENSITIVE VALUE***"
        },
        "trusted_proxies": "***REMOVED SENSITIVE VALUE***",
        "session_keepalive": "true",
        "overwrite.cli.url": "https:\/\/dev-nc.techisfun.net",
        "theme": "",
        "updater.release.channel": "stable",
        "enabledPreviewProviders": [
            "OC\\Preview\\MP3",
            "OC\\Preview\\TXT",
            "OC\\Preview\\MarkDown",
            "OC\\Preview\\OpenDocument",
            "OC\\Preview\\Krita",
            "OC\\Preview\\Imaginary"
        ],
        "preview_imaginary_url": "***REMOVED SENSITIVE VALUE***",
        "preview_concurrency_all": "12",
        "preview_concurrency_new": "8",
        "log_rotate_size": "26214400",
        "log_rotate_size_audit": "52428800",
        "loglevel": 1,
        "maintenance_window_start": 1,
        "upgrade.disable-web": true,
        "user_oidc": {
            "use_pkce": true
        },
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
        "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
        "forbidden_filename_basenames": [
            "con",
            "prn",
            "aux",
            "nul",
            "com0",
            "com1",
            "com2",
            "com3",
            "com4",
            "com5",
            "com6",
            "com7",
            "com8",
            "com9",
            "com\u00b9",
            "com\u00b2",
            "com\u00b3",
            "lpt0",
            "lpt1",
            "lpt2",
            "lpt3",
            "lpt4",
            "lpt5",
            "lpt6",
            "lpt7",
            "lpt8",
            "lpt9",
            "lpt\u00b9",
            "lpt\u00b2",
            "lpt\u00b3"
        ],
        "forbidden_filename_characters": [
            "<",
            ">",
            ":",
            "\"",
            "|",
            "?",
            "*",
            "\\",
            "\/"
        ],
        "forbidden_filename_extensions": [
            " ",
            ".",
            ".filepart",
            ".part"
        ]
    }
}

List of activated Apps

Enabled:
  - activity: 5.0.0-dev.0
  - admin_audit: 1.22.0
  - app_api: 32.0.0
  - bruteforcesettings: 5.0.0-dev.0
  - calendar: 6.1.5
  - circles: 32.0.0
  - cloud_federation_api: 1.16.0
  - collectives: 3.5.0
  - comments: 1.22.0
  - contacts: 8.3.1
  - contactsinteraction: 1.13.1
  - dashboard: 7.12.0
  - dav: 1.34.2
  - federatedfilesharing: 1.22.0
  - federation: 1.22.0
  - files: 2.4.0
  - files_downloadlimit: 5.0.0-dev.0
  - files_external: 1.24.1
  - files_pdfviewer: 5.0.0-dev.0
  - files_reminders: 1.5.0
  - files_sharing: 1.24.1
  - files_trashbin: 1.22.0
  - files_versions: 1.25.0
  - firstrunwizard: 5.0.0-dev.0
  - forms: 5.2.4
  - groupfolders: 20.1.9
  - logreader: 5.0.0-dev.0
  - lookup_server_connector: 1.20.0
  - mail: 5.6.9
  - notes: 4.13.0
  - notifications: 5.0.0-dev.0
  - notify_push: 1.3.0
  - oauth2: 1.20.0
  - ocs_api_viewer: 1.0.11
  - password_policy: 4.0.0-dev.0
  - photos: 5.0.0-dev.1
  - polls: 8.6.3
  - privacy: 4.0.0-dev.0
  - profile: 1.1.0
  - provisioning_api: 1.22.0
  - recommendations: 5.0.0-dev.0
  - related_resources: 3.0.0-dev.0
  - richdocuments: 9.0.2
  - serverinfo: 4.0.0-dev.0
  - settings: 1.15.1
  - sharebymail: 1.22.0
  - spreed: 22.0.8
  - support: 4.0.0-dev.0
  - survey_client: 4.0.0-dev.0
  - suspicious_login: 10.0.0-dev.0
  - systemtags: 1.22.0
  - tables: 1.0.3
  - text: 6.0.1
  - theming: 2.7.0
  - twofactor_backupcodes: 1.21.0
  - twofactor_nextcloud_notification: 6.0.0-dev.0
  - twofactor_totp: 14.0.0
  - twofactor_webauthn: 2.4.1
  - unroundedcorners: 1.1.5
  - user_oidc: 8.3.0
  - user_status: 1.12.0
  - viewer: 5.0.0-dev.0
  - webhook_listeners: 1.3.0
  - workflowengine: 2.14.0
Disabled:
  - encryption: 2.20.0
  - nextcloud_announcements: 4.0.0-dev.0 (installed 3.0.0)
  - updatenotification: 1.22.0 (installed 1.21.0)
  - user_ldap: 1.23.0
  - weather_status: 1.12.0 (installed 1.3.0)

Nextcloud Signing status

Nextcloud Logs

Additional info

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    0. Needs triagePending check for reproducibility or if it fits our roadmap32-feedbackbug

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions