Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Link previews #820

Open
or-else opened this issue Jan 17, 2023 · 9 comments
Open

Link previews #820

or-else opened this issue Jan 17, 2023 · 9 comments

Comments

@or-else
Copy link
Contributor

or-else commented Jan 17, 2023

Embedded previews of URLs

Screenshot 2023-01-16 at 18 07 38

@yinebebt
Copy link

Hello, is there someone working on this? if no, I am going to work on it.

Thanks!

@or-else
Copy link
Contributor Author

or-else commented Oct 29, 2024

No one is working on it. You are welcome to take a shot.

Before you start, please describe how you are going to do it:

  • which component fetches the web site: sender client, receiver client, server.
  • how you render it: drafty or image.
  • which parts of the website you are going to use for preview, i.e. <meta property=og:description>, <meta property=og:image>, <meta property=og:title>, if these are missing then ..., then ...

@yinebebt
Copy link

I am planning to proceed with these points in mind:

  • Data Fetching: Perform URL fetching on the server side.
  • Rendering Format: Use image-based previews with HTML templates.
  • Data Extraction: Prioritize og:title, og:description, and og:image tags for previews. If these are missing, fall back on the <title>, meta description, or a default image (e.g., placeholder icon).
  • Fallback Strategy: Where no Open Graph tags exist, provide generic descriptions or favicon for minimal preview details.
  • Additional Considerations: Sanitize fetched content and use caching to avoid redundant network calls.

Thanks!

@or-else
Copy link
Contributor Author

or-else commented Oct 29, 2024

Perform URL fetching on the server side.

As a separate service which gets called by a client?

Please keep in mind that the server-proper does not do any message parsing right now and we do not want it to do the parsing. There is parsing in the push notifications module only. The server does not rewrite the messages and we don't want it to so.

Rendering Format: Use image-based previews with HTML templates.

Please expand on it a bit more. Also, keep in mind that the tinode clients do not have the ability to handle HTML right now and we have no plans to add such ability.

use caching

What kind of caching do you want to use?

Thanks.

@yinebebt
Copy link

ok, I will take some time on this and will update you. But if you have plan let me know.

@or-else
Copy link
Contributor Author

or-else commented Oct 29, 2024

I see two options:

  1. Server fetching, sender-client rendering: the server provides an API for fetching a site description: takes a URL, returns JSON with title, description, and image URL. The sender-client appends the site description to a message in drafty format. Client-receiver just renders the message, no changes needed.
  2. Sender-client fetching and rendering: same as above but the sender-client does the fetching too. Server would have to implement HTTP proxy functionality for CORS avoidance.

The option 1 is somewhat simpler, but will encounter captcha a lot more than 2. And it would require request throttling and caching.

The option 2 is a bit more complex, because fetching and HTML parsing would have to be implemented independently for each client. And it won't just work for Javascript because of CORS: server would have to act as a proxy for requests from the JS clients.

@yinebebt
Copy link

I prefer to go with Option 1 (Server fetching, sender-client rendering). If I understand correctly, the client itself will detect the link(s) and then fetch the preview details from the server, right?

Also, would it be better for the message to wait until the server returns the preview data, or should the message text be sent immediately, with the preview appended later as an update?

@or-else
Copy link
Contributor Author

or-else commented Oct 29, 2024

Yes, the client would detect the link. It does so already.

I just checked: it looks like both Telegram and Whatsapp fetch site info while the message is being composed.

@yinebebt
Copy link

Hello @or-else, can you check a PR at #929

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants