cross-posted from: [dubvee.org/post/1381314](https://dubvee.org/post/1381314 )
#
Changelog for 1.4.x Series (Intrepid)
##
1.4.0
This is the first release which completely drops “legacy” support for 0.18.x and below. The minimum required API level is now 0.19.3 (though it will work with any 0.19.x series, there will be broken features that require 0.19.3).
None of the 0.19.4 features are implemented yet. Updating my instance to 0.19.4 is not on my priority list at the moment, though I *really* wished the media listing was present when I added the new media handling stuff. :sigh:
I’ll probably be working on the 0.19.4 features sometime soon as I would like to finish what I had in mind for the media handling, and 0.19.4 provides the missing piece.
Anyway, here’s what’s new and improved:
###
New Features
<summary>Zoomable Images</summary><p>Most images are now zoomable: post images, user/site/community avatars, images posted in comments, etc.<br>
All the pan/zoom libraries I tried <em>suuuuuuucked</em>, so I ended up rolling my own from scratch. The pinch zoom isn’t <em>quite</em> where I want it, but it’s a start. If anyone wants to contribute some code for improving that, please let me know.<br>
- Support zoom, pan, and rotate
- Mouse scroll to zoom
- Click/grab to pan
- Rotate via on-screen buttons
- Double-click to quick zoom in/out by 2x
- Gesture support
- Pinch zoom in/out
- Swipe up to zoom in
- Swipe down to zoom out
- Swipe left or right to close the zoom modal
- Other gestures may be added once I figure out a clean way to differentiate them from conflicting mouse events
</p>
<summary>Basic Gesture Support</summary><p>First, I should point out that I am <em>not</em> a fan of gesture navigation; absolutely hate it as a primary method of interaction. I’m old and hate having to guess whether my fingers need to do the Macarena or the Hokey-Pokey to perform what <em>should be</em> an intuitive action.
That said, I <em>do</em> like waving things (and people) away.
To that end, I’ve added some gesture recognition in a few places, mostly modals. Any modal can now be dismissed with a left or right swipe in an area not bound by other event handlers.
- e.g. You can’t swipe in the text field to dismiss an edit/report/ban/remove modal; you have to swipe outside of that.
- Left/right swipe was chosen as to not interfere with scrolling so it could be used consistently across all modal types.
The only other place, currently, with gesture support is the image zoom modal (described above).
I may add some additional swipe actions where it’s intuitive to do so. For now, I’m content with modals being easier to dismiss on mobile without having to reach up to the close button in the top corner.
</p>
<summary>User Profile Modals</summary><p>Clicking on usernames throughout the application will now load a modal with their user card and relevant action buttons. Old behavior was taking you to their profile directly.<br>
Actions include:
- Go to profile
- Message in Lemmy / Matrix
- Block User
- Search for alts / simiarly-named accounts
- Ban user from instance (admins only)
- View user on their home instance
- Copy Lemmyverse link for user
</p>
<summary>Image Management on Posts/Comments (Paste Images into Post URL and Markdown Editor)</summary><p>- Images can be pasted in the post’s URL field as well as in the markdown editor.<br>
- Images can optionally be pre-processed to webP along with a user-selectable quality level. Especially useful if your instance limits the size of uploads
- Can delete post images (only before you save the post; unfortunately there’s no way to retrieve the delete token after that even though it is stored in the DB. Yet another API limitation :sigh:)
- This is addressed in 0.19.4, but I don’t have support for that yet.
- Images pasted/uploaded into the markdown editor are tracked in a bar along the bottom of the editor. Individual images can be deleted as needed along with the corresponding markdown code for them.
</p>
<summary>Hide Posts/Comments From New Users</summary><p>In App Settings -> Filters, you can now opt to hide posts/comments made by new users. You can also set the number of days an account is considered new: 1 to 30 days. That setting also is applied to the new user badges (if you set the minimum age to 15 days, any account 15 days or younger will show the new user badge).
This setting behaves differently for mods and admins:
- <strong>Mods</strong>: Filter will be applied to all posts/comments <em>except</em> in communities of which you are a moderator.
- <strong>Admins</strong>: Filter will be applied to all posts/coments <em>except</em> those made to communities local to your instance or those made to remote communities of which you are a moderator.
Comments made by new users will be hidden, and that includes any replies (essentially behaves the same way as blocked users)
</p>
<summary>Federation State Viewer</summary><p>From the instances menu on a post, there’s a new option called “Federation Stats” which will show you the stats from your instance to the target <em>and</em> from the target to your instance. Also included in that is an estimated cacluation of the number of activities each instance is behind (useful for troubleshooting federation delays).
This information has also been added to the instance items at <code>/instances</code>
Please note that the “Activities behind” counter is only an estimate. The value for <code>newest_activity_id</code> is not provided by the API (because that would be useful, so why would the Lemmy devs include it?), so it has to be estimated. The estimation is done by looking at the <code>last_successful_id</code> of all the linked instances and grabbing the highest number and subtracting the <code>last_successful_id</code> for the selected instance. Not all of those activities would necessarily be coming to your instance (votes/posts/comments to communities yours isn’t subscribed to, etc), so it is merely an estimation. Just because it shows you are behind by <em>X</em> number doesn’t necessarily mean it’s behind by that many.
</p>
<summary>Instances Page</summary><p>Re-wrote this to do manual pagination, searching, and filtering. <em>Much</em> more responsive now that it is not rendering several thousand components each with actions items.
</p>
<summary>"Click to Play" Media Embeds</summary><p>If media is disabled in the feed, the thumbnail will now have an overlay button that will convert it to an embed on-the-fly.<br>
When loading a video via click-to-play, I’m conditionally setting the “autoplay” flag where the embed API supports it, but it doesn’t always seem to be honored. This is an attempt to not have to press “play” twice for a video. So far, the only video frontend that seems to honor it is YouTube. Invidious/Piped, so far, do not, and neither does PeerTube.<br>
Ok, so autoplay works if muted (no idea how YouTube’s player gets around this; probably some chicanery). I think that’s worse because you still have to click twice on the videos, and the “unmute” button is harder to reach than “play”. So I think I’m going to just settle on having to click play twice.
This seems to be be a Chrome/Chromium thing (and explains why YT gets to bypass this). In Firefox, the autoplay flag is respected without having to mute the video.
</p>
<summary>Re-Integrated Piped Support as an Embeddable Youtube Frontend</summary><p>Now that click to play has been added, Piped support has been added back. It was removed due to poor performance and rate limiting when used with feed embeds.<br>
If media embeds are enabed in the feed, only YouTube frontend will show direct embeds. Piped/Invidious will always be click to play regardless of embed setting due to above mentioned rate limiting / performance.
</p>
<summary>Alternate Source Dropdown / Archive Links</summary><p>Removed the <code>[Archive Link]</code> next to the post URL and replacd it with a fancy menu to the left of it.
- On posts with links, it currently has buttons to search for the article at Archive Today, Ghost Archive, and 12ft.io
- On Youtube-like posts, can select alternalte links for YouTube, Invidious, or Piped
- Invidious/Piped will open with your preferred instance (defined in settings)
- Useful if someone posts a video to an Invidious instance that performs poorly for you and you would prefer to view it on your preferred Invidious/Piped instance or canonically on YouTube.
</p>
<summary>Quick Action Menus</summary><p>On mobile, the navbar was getting cluttered, so most of the discrete dropdowns there have been moved into Quick Actions menus.
- Main, Community, and User feed pages: Quick Actions has replaced all discrete menus
- Search Page, Modlog, instances page, and Community Browser: All of the filtering options are in a quick action menu
</p>
<summary>Users Can Now Add Their Own Preferred Invidious/Piped Instances</summary><p>Prior to this release, any Piped or Invidious instances needed to be added by the administrator via environment variables. In addition to that, users can now add any number of custom Invidious and/or Piped instances in the app settings.
These will be combined with the built-in list and the admin-extended list and be available for use as your preferred YT frontend and for detection of Piped/Invidious links in posts.
Be aware that those custom instances will only render as embeds for you; they will be thumbnails for anyone else who hasn’t added them to Tesseract. If you feel that instance should be added to Tesseract’s built-in list, please submit a Github issue with the details.
Tesseract is pre-populated with the official list of public instances for each, but it can get out of date easily.
<strong>Note</strong>: As of 6/20/2024, I’ve noticed a lot of Invidious/Piped instances are now requiring login, and embeds through them no longer work. I believe if you have an account with one, log in, and enable 3rd party cookies for that domain, the embeds <em>should</em> work. I have not tried that, but it does work with Spotify. This isn’t a Tesseract bug, unfortunately, or I’d fix it.<br>
</p>
<summary>Can Disable Infinite Scroll if you Want</summary><p>If you’re not a fan of the infinite scroll, you can go to App Settings -> Feed and disable infinite scroll.<br>
</p>
<summary>TOTP 2FA Setup</summary><p>Can now enable and enroll in 2FA as well as disable it.
</p>
<summary>Account Icons Now Use Your Profile Avatar</summary><p>Icons in the account switcher and account screens now sync to your profile avatar, if defined.
</p>
<summary>New Placeholder User Avatars</summary><p>Instead of the initials as used previously on accounts without avatars, now uses Dicebear Adventurer pseudorandom avatars. Initials are still used for placeholder community icons when the community mods haven’t set one.
</p>
<summary>Passwords Can Now Be Revealed</summary><p>All password elements will now allow you to toggle them to reveal. Should make a big improvement when logging-in on mobile.
</p>
<summary>Vote Viewer (Admins Only)</summary><p>Admins can now see votes like in Lemmy-UI. Uses infinite scroll and deduplication to compensate for the stupid API that returns multiple/duplicate votes on each page.
</p>
###
Bugfixes and Enhancements
<summary>Removed 0.18.x Backwards Compatibility</summary><p>- Or, more specifically, removed 0.18.x JS client and the extensions I wrote to make that compatible with 0.19.x. Now uses the 0.19.3 JS client.
- Removed the image upload proxy which was needed in 0.18x due to CORS restrictions.
</p>
<summary>Various Enhancements to Auth Module.</summary><p>- Added safety check so that the auth token is only ever sent to the profile’s associated instance and cannot accidentally send to non-home instance (e.g. when browsing communities on a remote instance).
- Fixed a few chicken/egg situations where the profile store needed to be accessed before it was initialized
- If your auth token is invalid, such as after changing your password on another device, you will get a toast message you can click to take you to the login screen.
- If a profile exists for a username/instance combo, logging in will update the auth token for that existing profile rather than creating a new one.
- User avatars are now fetched when logging in.
</p>
<summary>Grace Period Before Media Embeds are Destroyed When Scrolling out of Viewport</summary><p>- Embeds now have a short timeout when leaving the viewport before they’re removed from the DOM and turn back into thumbnails. Fixes annoyance when resizing the window while a video is playing and the video temporarily leaves the viewport and is destroyed. Timeout is 2 seconds and will reset/disarm if the post returns to the viewport before it expires.
</p>
<summary>Community Creation / Editing</summary><p>- Uses new upload handler for banner/icon
- Can pre-process the banner/icon to webP before uploading
- Shows a live preview of how the community card will look
</p>
<summary>General</summary><p>- Slightly darkened background color in light mode cards (bg-white->bg-slate-100) for better contrast. Did similarly for some button colors
- Added “OpenDyslexic” as a UI font option
- Can now close modals with Escape key, close button, or by swiping left/right
- Added button to reveal password fields
- Some modals can be closed by clicking out of them.
- I need to disable this or make it more consistent. Some workflows utilize nested modals, so I do need to be able to keep them open when interacting with a child modal.
- Added “share” link for searches.
- Will generate a URL with the current search params and copy to your clipboard.
</p>
###
Other Stuff
####
Peertube Follows
On my last release post, someone mentioned that following Peertube channels may be broken. At the time I was still on 0.18.5 and had followed a PT channel, and *seemed* to be getting updates from it. Then I wasn’t sure.
I can say that I *have* been getting at least some updates to the PT channel I follow (mostly as a test). While there have been videos posted there that did not come through to Lemmy, I don’t know enough about PeerTube to know if they were published differently or what. However, I have gotten at least 2-3 that someone posted to Lemmy that would absolutely had to have come in via Federation.
Also confirmed that commenting on a PT video (from the channel feed, not an embed to a Lemmy community) does federate out and show up on Peertube’s side along with any votes you give in Lemmy.
This isn’t really a Tesseract issue since the Lemmy backend handles that. Just figured since I do support Peertube, it would be worth mentioning that it seems to work.
###
What Didn’t Make the Cut This Release
<li>User profile import/export</li>
<li>Link previews</li>
<li>Custom feed rewrite</li>
<li>Custom emoji management</li>
<li>Fediseer Rewrite</li>
I keep kicking the can on the custom feed and infinite scroll re-writes, but for a good reason. I want to start using IndexedDB to get around storage constraints in the browser’s LocalStorage API. I need to write and integrate a library for this (or find one I don’t hate), and that’s going to take some dedicated development time. Switching to IndexDB is also a step in the direction I want to go towards providing offline support. So, at some point, there will be a release that only focuses on that. Not sure if it’ll be in the 1.4.x series or later, but ultimately, that is where I want to go.
###
Get Tesseract
<li><a href="https://tesseract.dubvee.org">Hosted Instance: Unlocked to allow login to any Lemmy instance</a></li>
<li><a href="https://github.com/asimons04/Tesseract/">Github</a></li>
<li><a href="https://github.com/asimons04/tesseract/blob/main/ChangeLog.md">Changelog</a></li>
<li><a href="https://github.com/asimons04/tesseract/tree/main/docs">Docs</a></li>
<li><a href="https://matrix.to/#/#tesseract:ptznetwork.org">Matrix Support</a></li>
<li><a href="https://dubvee.org/c/tesseract">Lemmy Community</a></li>
<li>Docker: <code>ghcr.io/asimons04/tesseract:v1.4.0</code> (<em>Should</em> have images for amd64 and arm64 now that the Github actions are fixed)</li>