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

[FR]: Gemini protocol support #1550

Closed
duncan-bayne opened this issue Dec 12, 2024 · 13 comments
Closed

[FR]: Gemini protocol support #1550

duncan-bayne opened this issue Dec 12, 2024 · 13 comments
Assignees
Labels
Component-Core Component-Network Status-Fixed Ticket is resolved. Type-Enhancement This is request for brand new feature.
Milestone

Comments

@duncan-bayne
Copy link

Brief description of the feature request

I've just switched to RSS Guard and it's great ❤️

The one thing it's missing though for my use is support for the Gemini protocol.

If this is something you'd like to see added to RSS Guard, would you be interested in a PR that adds it?

@duncan-bayne duncan-bayne added the Type-Enhancement This is request for brand new feature. label Dec 12, 2024
@martinrotter
Copy link
Owner

Well, I usually do no read crazy ass lengthy documentations, which are distracting.

Pull requests are always welcomed, can you share URL or some actual example of "gemini" online resource which RSS Guard should/could consume once gemini support is added.

I know literally nothing about gemini. Is it some kind of specially formatted file downloaded over HTTP/TCP?

@duncan-bayne
Copy link
Author

Gemini is an alternative protocol to HTTP - Gemini sites are usually referred to as "capsules".

Key features of Gemini are its simplicity, always-on encryption, and lack of scripting or client state. Most content served over Gemini is in Gemtext format, which is similar to (but simpler than) Markdown.

If you don't have a Gemini browser installed you can use a Web gateway. Here are some Gemini resources via such a gateway:

@martinrotter
Copy link
Owner

I downloaded gemini client and navigated to some "hyperlinks" found in here: https://github.com/kr1sp1n/awesome-gemini?tab=readme-ov-file#services

So it is basically protocol distributing markup files which can contain simple hyperlinks to other files (markup, images, videos, whatever) while keeping things simple.

I would actually be interested in implementing as an author of RSS Guard myself.

Now here is my key question: What exactly should such a plugin/support do? Should it be similar to "RSS/ATOM" classic plugin, so that it takes some GEMINI link (the same thing which is "feed" in classical ATOM/RSS terminology) as input and somehow provides "articles" from that link?

OR by gemini protocol support you simply and ONLY mean to add "gemini:" protocol support to internal browser? So that when user clicks on "gemini:" link or navigates to "gemini:" directly, it just works, same as "http" currently does?

@duncan-bayne
Copy link
Author

Ah that's a great question. Very happy to hear you're interested in implementing 😁

As far as implementation goes, I was imagining it doing just what you suggest in the first option: treating Gemini as just another protocol to get RSS/Atom feeds from, and then displaying the summary and link in the individual feed entries.

Inline Gemini browsing would certainly be nice! But I don't think it's in any way essential.

@martinrotter
Copy link
Owner

I will try to use Kristall as reference implementation and take gemini-related network stuff from them.

I will try to make some PoC and return back.

@martinrotter
Copy link
Owner

OK, I made very experimental stuff and RSS Guard downloaded this:

gemini://geminiprotocol.net/news/

# Official Project Gemini news feed

=> atom.xml	Atom feed

## 2024 News

=> 2024_10_24.gmi	2024-10-24 - Some more GitLab issues closed
=> 2024_09_08.gmi	2024-09-08 - Gemini app developer's guide published
=> 2024_08_28.gmi	2024-08-28 - Specification changes (0.24.1)
=> 2024_08_15.gmi	2024-08-18 - Progress on closing GitLab issues
=> 2024_07_30.gmi	2024-07-30 - Moving slowly and breaking things
=> 2024_06_20.gmi	2024-06-20 - Five years of Gemini!
=> 2024_04_19.gmi	2024-04-19 - Refining the quarterly release system
=> 2024_04_10.gmi	2024-04-10 - geminiprotocol.net outage, late news
=> 2024_03_31.gmi	2024-03-31 - Specification changes, quarterly release numbering, and more plans
=> 2024_02_28.gmi	2024-02-28 - Closing the spec gap: mandatory <META> and exponential back-off
=> 2024_02_21.gmi	2024-02-21 - Introducing "Apollo days", some rough scheduling
=> 2024_01_27.gmi	2024-01-27 - Updates to in-progress separated specifications

## 2023 News

=> 2023_12_30.gmi	2023-12-30 - The year behind and the year ahead
=> 2023_10_03.gmi	2023-10-03 - Separated specifications and copyright updates
=> 2023_09_21.gmi	2023-09-21 - World Gratitude Day
=> 2023_09_09.gmi	2023-09-09 - Project Gemini has officially moved to geminiprotocol.net
=> 2023_09_03.gmi	2023-09-03 - Domain name switch next weekend
=> 2023_08_27.gmi	2023-08-27 - Project Gemini history section added
=> 2023_08_14.gmi	2023-08-14 - Changing domain names
=> 2023_07_30.gmi	2023-07-30 - Second round of FAQ updates
=> 2023_07_22.gmi	2023-07-22 - Some plans
=> 2023_07_15.gmi	2023-07-15 - Extensive FAQ updates, more to come!
=> 2023_06_28.gmi	2023-06-28 - CAPCOM updates
=> 2023_06_20.gmi	2023-06-20 - Four years of Gemini!
=> 2023_04_16.gmi	2023-04-16 - CAPCOM changes
=> 2023_03_01.gmi	2023-03-01 - Molly Brown upgrade
=> 2023_02_14.gmi	2023-02-14 - Empty user capsules removed
=> 2023_01_14.gmi	2023-01-14 - Tidying up gemini.circumlunar.space user capsules
=> 2023_01_08.gmi	2023-01-08 - Changing DNS server

## 2022 News

=> 2022_06_20.gmi	2022-06-20 - Three years of Gemini!
=> 2022_01_30.gmi	2022-01-30 - Minor specification update (0.16.1)
=> 2022_01_22.gmi	2022-01-22 - Mailing list archives, Atom feed for official news
=> 2022_01_16.gmi	2022-01-16 - Mailing list downtime, official news feed

I guess this is some kind of gemini markup (based on markdown?)? It was also able to download gemini://geminiprotocol.net/news/atom.xml just fine. I will make some very basic implementation so you can test.

As for "rendering" gemini, I would need some documentation.

Is this up-to-date gemtext documentation? https://geminiprotocol.net/docs/gemtext-specification.gmi

@martinrotter
Copy link
Owner

martinrotter commented Dec 18, 2024

OK. IT WORKS.

image
image

@martinrotter
Copy link
Owner

Internal web browser (lite version so far) works too. So far no formatting.

image

@martinrotter
Copy link
Owner

image

@martinrotter
Copy link
Owner

So, it is there, everything should work except gemini integration into webengine-based internal web browser, but that will be added soon. ATOM (and other types) of feeds via gemini protocol itself should work fine.

@martinrotter martinrotter added the Status-Partially-Fixed Part of bug/feature is fixed/implemented. label Dec 18, 2024
@martinrotter
Copy link
Owner

Added bit enhanced state base gemtext parser which displays bit more nice.

@martinrotter
Copy link
Owner

image

@martinrotter
Copy link
Owner

Added gemini renderer to non-lite WebEngine web view too.

image

So now the support is complete. I will enhance some bits here and there. Can you maybe spread the word in Gemini community about this?

@martinrotter martinrotter added Status-Fixed Ticket is resolved. and removed Status-Partially-Fixed Part of bug/feature is fixed/implemented. labels Dec 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Component-Core Component-Network Status-Fixed Ticket is resolved. Type-Enhancement This is request for brand new feature.
Projects
None yet
Development

No branches or pull requests

2 participants