nextcloud / nextcloud/spreed

Link previews fail to populate often, despite metadata being resolved successfully

Open
#17,881 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug feature: chat 💬 feature: frontend 🖌️ upstream
Dominant language
JavaScript
Stars
2.2k
Forks
586
Avg merge
18h 27m
Merged PRs (30d)
333

Description

[!TIP]

How to use GitHub
  • Please use the 👍 reaction to show that you are affected by the same issue.
  • Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
  • Subscribe to receive notifications on status change and new comments.

Steps to reproduce

  1. Send a link to a page that has OpenGraph info (most social media sites do), or other resolvable metadata.
  2. Talk may or may not show a link preview, not sure what determines success or failure.
  3. Inspect the element and see the description field, for example, does have data but has an element-level CSS declaration of display: none.
Expected behaviour

The preview should populate.

Actual behaviour

The preview does not populate.

Example: The first link populates a preview successfully, but the second does not despite both being from the same site and being similar posts.

https://mastodon.xyz/@nextcloud/116092044856390715
https://mastodon.xyz/@nextcloud/116483496632525540

Image

The description field for the second link is populated, and if it was not display: none, it would be visible.

Image

Talk app

Talk app version: 23.0.4

Custom Signaling server configured: Yes, 2.1.0~docker

Custom TURN server configured: Yes

Custom STUN server configured: Yes

Browser

Microphone available: yes

Camera available: yes

Operating system: Linux (Bazzite, based on Fedora Atomic 43)

Browser name: Vivaldi (same behavior in the Talk desktop and mobile apps)

Browser version:

Version: 7.9.3970.59 (Official Build) (64-bit)
Chromium Version: 146.0.7680.211
Channel: Official Build
Platform / OS: Linux - org.freedesktop.platform 25.08
Executable Path: /app/vivaldi/vivaldi
Command Line: /app/vivaldi/vivaldi --enable-features=WebRTCPipeWireCapturer --disable-features=WebAssemblyTrapHandler,DesktopPWAsRunOnOsLogin --class=Vivaldi-flatpak --no-default-browser-check --flag-switches-begin --flag-switches-end --ozone-platform=wayland --origin-trial-disabled-features=CanvasTextNg|WebAssemblyCustomDescriptors --render-node-override=/dev/dri/renderD128

Browser log
``` juy332nq:188 GET https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516 net::ERR_BLOCKED_BY_CLIENT images.js:55 [WARN] viewer: Some mimes were ignored because they are not enabled in the server previews config {app: 'viewer', uid: 'tyzbit', level: 2, ignoredMimes: Array(3)} log @ index.mjs:44 warn @ index.mjs:62 (anonymous) @ images.js:55 browserCheck.ts:74 Detected browser Chrome 146 (146.0.0.0) UserMenu.js:15 [WARN] @nextcloud/vue: You need to fill either the text or the ariaLabel props in the button component. {uid: 'tyzbit', app: '@nextcloud/vue', level: 2, text: undefined, ariaLabel: null, …} log @ index.mjs:44 warn @ index.mjs:62 render @ NcButton-BaZAY-tN.mjs:236 e._render @ vue.runtime.esm.js:2700 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 init @ vue.runtime.esm.js:4427 (anonymous) @ vue.runtime.esm.js:6591 m @ vue.runtime.esm.js:6545 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 (anonymous) @ vue.runtime.esm.js:7095 e._update @ vue.runtime.esm.js:3781 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 init @ vue.runtime.esm.js:4427 (anonymous) @ vue.runtime.esm.js:6591 m @ vue.runtime.esm.js:6545 (anonymous) @ vue.runtime.esm.js:7095 e._update @ vue.runtime.esm.js:3781 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 init @ vue.runtime.esm.js:4427 (anonymous) @ vue.runtime.esm.js:6591 m @ vue.runtime.esm.js:6545 (anonymous) @ vue.runtime.esm.js:7095 e._update @ vue.runtime.esm.js:3781 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 init @ vue.runtime.esm.js:4427 (anonymous) @ vue.runtime.esm.js:6591 m @ vue.runtime.esm.js:6545 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 (anonymous) @ vue.runtime.esm.js:7095 e._update @ vue.runtime.esm.js:3781 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 init @ vue.runtime.esm.js:4427 (anonymous) @ vue.runtime.esm.js:6591 m @ vue.runtime.esm.js:6545 (anonymous) @ vue.runtime.esm.js:7095 e._update @ vue.runtime.esm.js:3781 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 init @ vue.runtime.esm.js:4427 (anonymous) @ vue.runtime.esm.js:6591 m @ vue.runtime.esm.js:6545 (anonymous) @ vue.runtime.esm.js:7133 e._update @ vue.runtime.esm.js:3781 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 e._init @ vue.runtime.esm.js:5724 Na @ vue.runtime.esm.js:5785 (anonymous) @ UserMenu.js:15 hi @ init.js:86 (anonymous) @ main.js:22 MainMenu.js:27 [WARN] @nextcloud/vue: You need to fill either the text or the ariaLabel props in the button component. {uid: 'tyzbit', app: '@nextcloud/vue', level: 2, text: undefined, ariaLabel: null, …} log @ index.mjs:44 warn @ index.mjs:62 render @ NcButton-BaZAY-tN.mjs:236 e._render @ vue.runtime.esm.js:2700 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e.run @ vue.runtime.esm.js:3538 ta @ vue.runtime.esm.js:4141 (anonymous) @ vue.runtime.esm.js:3159 pn @ vue.runtime.esm.js:3081 Promise.then un @ vue.runtime.esm.js:3106 bn @ vue.runtime.esm.js:3171 e.$nextTick @ vue.runtime.esm.js:2679 render @ NcActions-BcLis_nr.mjs:831 e._render @ vue.runtime.esm.js:2700 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 init @ vue.runtime.esm.js:4427 (anonymous) @ vue.runtime.esm.js:6591 m @ vue.runtime.esm.js:6545 f @ vue.runtime.esm.js:6664 m @ vue.runtime.esm.js:6568 (anonymous) @ vue.runtime.esm.js:7133 e._update @ vue.runtime.esm.js:3781 a @ vue.runtime.esm.js:3891 e.get @ vue.runtime.esm.js:3462 e @ vue.runtime.esm.js:3452 e @ vue.runtime.esm.js:3908 Na.$mount @ vue.runtime.esm.js:8797 (anonymous) @ MainMenu.js:27 hi @ init.js:85 (anonymous) @ main.js:22 signaling.js:1177 Not connected to signaling server yet, defer joining room juy332nq ```

Server configuration

Operating system: Docker

Web server: Nginx

Database: MariaDB

PHP version: 8.4.20

Nextcloud Version: Nextcloud Hub 26 Winter (33.0.2)

List of activated apps:

Enabled:
  - activity: 6.0.0
  - announcementbanner: 2.4.2
  - app_api: 33.0.0
  - bruteforcesettings: 6.0.0
  - checksum: 2.1.1
  - circles: 33.0.0
  - cloud_federation_api: 1.17.0
  - command_bot: 1.1.0
  - comments: 1.23.0
  - contactsinteraction: 1.14.1
  - dashboard: 7.13.0
  - data_request: 5.0.0
  - dav: 1.36.0
  - doom_nextcloud: 1.0.8
  - drop_account: 3.0.0
  - encryption: 2.21.0
  - end_to_end_encryption: 2.1.0
  - federatedfilesharing: 1.23.0
  - federation: 1.23.0
  - files: 2.5.0
  - files_archive: 1.2.8
  - files_downloadlimit: 5.1.0
  - files_pdfviewer: 6.0.0
  - files_photospheres: 1.33.0
  - files_reminders: 1.6.0
  - files_retention: 4.0.1
  - files_sharing: 1.25.2
  - files_trashbin: 1.23.0
  - files_versions: 1.26.0
  - files_zip: 2.3.0
  - firstrunwizard: 6.0.0
  - forms: 5.2.7
  - forum: 1.0.1
  - groupfolders: 21.0.7
  - impersonate: 4.0.0
  - integration_mastodon: 5.1.0
  - logreader: 6.0.0
  - lookup_server_connector: 1.21.0
  - music: 3.0.0
  - nextcloud_announcements: 5.0.0
  - notes: 5.0.0
  - notifications: 6.0.0
  - notify_push: 1.3.1
  - oauth2: 1.21.0
  - password_policy: 5.0.0
  - photos: 6.0.0
  - previewgenerator: 5.13.0
  - privacy: 5.0.0
  - profile: 1.2.0
  - provisioning_api: 1.23.0
  - recommendations: 6.0.0
  - registration: 2.9.0
  - related_resources: 4.0.0
  - richdocuments: 10.1.2
  - richdocumentscode: 25.4.904
  - serverinfo: 5.0.0
  - settings: 1.16.0
  - sharebymail: 1.23.0
  - spreed: 23.0.4
  - support: 5.0.0
  - survey_client: 5.0.0
  - systemtags: 1.23.0
  - text: 7.0.0
  - theming: 2.8.0
  - theming_customcss: 1.20.0
  - thesearchpage: 2.1.2
  - twofactor_backupcodes: 1.22.0
  - twofactor_totp: 15.0.0
  - updatenotification: 1.23.0
  - user_migration: 10.2.0
  - user_status: 1.13.0
  - viewer: 6.0.0
  - weather_status: 1.13.0
  - webhook_listeners: 1.5.0
  - workflowengine: 2.15.0
Disabled:
  - admin_audit: 1.23.0
  - files_external: 1.25.1
  - suspicious_login: 11.0.0
  - testing: 1.23.0
  - twofactor_nextcloud_notification: 7.0.0
  - user_ldap: 1.24.0

Nextcloud configuration:

{
    "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
            }
        ],
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "password": "***REMOVED SENSITIVE VALUE***",
            "port": 0
        },
        "mail_smtpmode": "smtp",
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpport": "587",
        "mail_smtpsecure": "tls",
        "mail_smtpauth": true,
        "mail_smtpauthtype": "LOGIN",
        "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
        "upgrade.disable-web": true,
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "***REMOVED SENSITIVE VALUE***"
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "mysql",
        "version": "33.0.2.2",
        "overwrite.cli.url": "***REMOVED SENSITIVE VALUE***",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "trusted_proxies": "***REMOVED SENSITIVE VALUE***",
        "maintenance": false,
        "twofactor_enforced": "true",
        "twofactor_enforced_groups": [
            "***REMOVED SENSITIVE VALUE***"
        ],
        "twofactor_enforced_excluded_groups": [
            "Forum Only"
        ],
        "defaultapp": "dashboard,spreed",
        "app_install_overwrite": [
            "files_archive"
        ],
        "loglevel": 2
    }
}
Server log (data/nextcloud.log)

No logs are generated on pageload.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the issue with the two Mastodon URLs and inspect the link-preview description element and its display state. Compare the successful and unsuccessful previews, then verify that resolvable metadata produces a visible preview in the Talk web, desktop, and mobile clients.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
frontend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.