(
    title: "Eva 0.4 released",
    summary: Some("Eva 0.4.0 with Spartan support and various qol improvements"),
    published: Some((
        year: 2022,
        month: 6,
        day: 7,
        hour: 3,
        minute: 30,
        second: 30,
    )),
    tags: ["eva", "rust", "software"],
)
---
## Notes
* Gemini - Use colored icons to differentiate link types
* Gemini - Handle sensitive input requests
* Gopher - handle http[s] links
* Spartan - initial support (sans upload support)
* Spartan - support Spartan uploads
* Rewrite of gemtext parser in GemView
* Major refactor of actions handing, removing 293 total lines of code
=> https://codeberg.org/jeang3nie/eva/releases/tag/v0.4.0 Eva 0.4.0 release on Codeberg

## Summary
While there's still two glaring omissions (client certs and history) from Eva's feature set I consider Eva to be a solid application for browsing around the Smolweb at this point. I've put a lot of work into refining the code that doesn't factor into user facing features, but should not only make for a more stable piece of software but one that is now much easier to maintain going forward.

The actions refactor mentioned above was an interesting case. The original code had a big struct where all of it's members were the same data type. Simple static arrays aren't often used in Rust, and generally I think a lot of people tend to think of arrays as old fashioned these days, but by switching to a static array strings (the names of every gtk::SimpleAction in Eva) it's possible to just loop over all of them to create the action, associate a keybinding to it, connect a closure and add it to the main window. So yeah, sometimes a simpler data structure is a big win.

Although, had this been written in Zig, one could actually loop over struct fields...

## Plans going forward
Along with implementing the features I mentioned above, I would like to refine the way file uploads are brought into the program for Spartan. Currently when you click on a Spartan prompt line it just pops up a file chooser dialog. What I intend to have happen is to have a dialog with a text edit box, with a button on it which will open the file chooser instead, and possibly the option of using an external editor.

Somewhat longer term, I want to start incorporating completions into the address bar. The completions should include bookmarks, any configured search engines, and eventually url's from the browser history once that lands. I'd like to reach a point where Eva is as satisfying of a tool for power users as it is a program that one can just pick up and use like a "regular" web browser.

Still on the table is a possible switch to sqlite for handling bookmarks. I haven't decided. If I do go that route, then the current code which populates the bookmark creation/editor dialog will have to run in a background thread so as to not block the main thread on slow disks.

I am still undecided about adding Titan support. It seems to me that supporting Gemini, Gopher, Finger, Spartan, File and Data url's is already quite a lot. And, I'm not convinced that Titan is going to have a very large user base.

Another possible avenue to explore is gradient backgrounds. I put together a pretty nice gradient editor for Zterm a while back, and although the code is in Zig instead of Rust and is Gtk3, not Gtk4, the concepts would transfer pretty well to Eva. I have always wanted Eva to be the best looking program possible, and I think the added code complexity would add a lot of value. Images are possible as well, but I've found over a few years of using E-readers rather than physical books that every time I try to use an image background it gets distracting after a while. Gradients would be a way to give a nice dynamic feeling presentation while keeping the focus on the text, which is of course why we use Gemini in the first place.
