Oddbean new post about | logout
 #Amethyst v0.86.0: Draft Support

This version adds support for draft notes autosaved on your relays, a new simplified UI choice on Settings, changes the Discover tab algorithm to show the latest of chats and communities and much more.

Features:
- Draft notes for feeds, replies, live streams, public chats, NIP-04 DMs, GiftWrap DMs, polls and classifieds by @greenart7c3
- Adds autosave for Drafts by @greenart7c3
- Adds edit draft in the dropdown menu and the long press popup by @greenart7c3
- Adds a Draft feed screen for all posts
- Adds new algorithm to parse OpenGraph tags by @jiftechnify
- Adds a Simplified UI setting to both feeds and chats
- Moves the username play button to the profile page.
- Adds link to the version notes when clicking in the version in the drawer
- Brings new git Issues and Patches to the Notification
- Filters out too many reposts of the same note when on the main feed
- Updates the bootstrap relay list
- Adds missing classes to support WebServer connections in the Video Playback
- Slightly reduces line height for improved readability
- Reduces the space between chat bubbles.
- Migrates shareable links from habla.news to njump.me
- Restructures the Discover Tab to show the Chats and Communities with the most recent new content. 
- Adds a bot field to the user info
- Adds k-tag to the Deletion events
- Adds button to load Zap Splits from the cited users in the text
- Several accessibility improvements by @⚡ Dee Kay ⚡🇸🇪🇬🇧🇨🇿🇧🇷...

Bug Fixes:
- Fixes the post cut-off when the post has massive string chars without spaces or new lines
- Fixes missing Fhir Classes on Release
- Don't show the button to edit the post if the author of the original post is not the logged in user
- Fixes crash parsing multiple results from Amber by @greenart7c3
- Fixes the load of edits on a new edit proposal
- Fixes forking information kept from a previous post
- Fixes search on binary content
- Fixes space after clickable user display
- Centers Blank Note when post was hidden by the user.
- Accepts JSON events with escaping errors
- Fixes the parsing of user metadata events several times due to large coroutine backlog
- Fixes Scheduled Tag in LiveStreams
- Fixes the isOnlineCheck for nostr nests.
- Fixes sorting contract issues when follow status and user names are the same between keys
- Fixes tickmarks on dropdowns
- Checks if a Classified is wellformed before rendering
- Fixes size and alignment of the text when the live stream video is not present.
- Fixes some imports for benchmarks
- Fixes infinite Quotation issue (3 quotes are allowed).
- Fixes crashing with too many videos in quoted posts. 
- Fixes double Show More when the user has hidden a post and ALSO the user's followers have reported the post.
- Only shows OTS to the respective Edit
- Fixes a bug with the latest version of jackson
- Avoids showing machine-code errors when paying for zaps on external wallets
- Fixes too strict timing constraints for new posts (accepts up to a minute in the future)
- Fixes following of geotags
- Fixes lack of zap amount refresh after zapping a note.
- Fixes videos not being able to seekTo the zero position.
- Fixes layout issues of Blog Post summaries when images are not present.
- Doesn't show edits of blog posts in the User's Profile
- Fixes Amber's deep sleep: Adds a lifeCycleOwner listener to register external signers on resume
- Fixes missing context in some replies to blog posts.
- Adds a space after the Channel header in the reply rows
- Centralizes the counter after the list of participants in a live event.
- Fixes double mention to Community headers when seeing a reply to a community post.
- Fixes Chat preview images when no image has been set.
- Fixes the display or Zap Events when All Follows is selected in Notifications
- Fixes the reply event finder for the reply row of text notes
- Makes hidden cards full width on the discovery feed
- Fixes the width of muted messages on chat feeds.
- Fixes the feed updates after list selections on the Discovery pages.
- Realigns the reaction icons and texts between main feed and video feed.
- Fixes garbled URL preview for non-UTF-8 HTML by @jiftechnify
- Adjusts icon sizes on the galleries
- Avoids publishing with two equal `t` hashtags when the user already writes them in lowercase
- Limits the size of image previews from opengraph from being too big
- Fixes NPE with the cached state.
- Increases the push notification max delay to 15 minutes
- Fixes controller comparison for keep playing
- Fixes tag markers for replies in DMs
- Fixes layout of the reply row in chats
- Fixes lack of blurhash preview in some videos
- Fixes the lack of following mark on user pictures in chats
- Fixes the UI spacing for channels
- Fixes the use of filters that didn't discriminate the relay type setup
- Holds the state of Show More when switching edits and translations
- Renders DMs and live chats in the feed if they show up there
- Fixes contract violation when sorting users

Updated translations: 
- Spanish by @⚡₿it₿y₿it⚡
- French by @Anthony 🇫🇷
- Dutch by @Bartus
- Swahili by @Turiz
- Chinese by @rasputin
- Bengali by @Cats
- Hungarian by @Zoltan
- Czech, German, Swedish and Portuguese by @⚡ Dee Kay ⚡🇸🇪🇬🇧🇨🇿🇧🇷...
- Arabic by @Cats
- Thai by @siamstr.com and @123🦈ปลาฉลามขึ้นบก

Performance Improvements: 
- Switches Robohash to Precompiled SVGs in order to reduce the memory burned of creating Strings with SVGs on the fly
- Restructures Data Access filters and LocalCache to use a ConcurrentSkipList instead of ConcurrentHashMap
- Only download video, image and audio files in NIP-94
- Updated hashtag icons for performance
- Avoids checks if a filter has changed before generating JSon strings
- Cleans up User Metadata upon receipt instead of in every rendering
- Simpler/Faster UserDisplay renderings
- Reduces video cache from 10 to 4 videos
- Removes coroutine use for Hashtags
- Brings the ZapForwarding icon to Compose
- Simplifies the algorithm to check if chatroom sender intersects with the follow list
- Avoids serializing temporary fields on Quartz
- Refactors views to the video and chat feeds
- Restructures NoteCompose for performance
- Restructures markAsRead to minimize threading cost
- Adds a large benchmark test for duplicate events
- Optimizing the performance of Highlight rendering
- After memory cleanup, only trigger liveData when it actually changes
- Minimizes memory use to calculate zaps
- Avoids triggering an error when decoding invalid hexes
- Reduces the amount of co-routines being launched in each LiveData update
- Migrates channel list and channel notes to LargeCache
- Removes the use of data classes to speed up comparisons
- Improves Nostr filter to bring public chat messages and avoid public chat creation and metadata updates
- Removes jsoup from dependencies
- Removes the need to observe author changes to event after loaded
- Turns hashtag icons into programmable vectors
- Moves the Following Vector to a native composable
- Removes unnecessary modifier layouts from the top bar
- Uses the cached thread pool instead of the scheduled thread pool for translation services
- Avoids launching coroutines that were just launched
- Makes a cache for Media Items
- Only changes the keep playing status if different
- Reduces recompositions after video/image hash verification
- Avoiding feed jitter when pressing the notification button twice

Code Quality Improvements: 
- Breaks massive NoteCompose down into each event type
- Removes the release drafter plugin on actions. Too buggy
- Removes dependency of the Robohash from CryptoUtils
- Improves Preview helper classes
- Updates secp256k1KmpJniAndroid, compose, zoomable, media3, jackson and firebase libs
- Updates AGP to 8.3.1
- Deletes the old Settings local db
- Refactors some of the old display name structure
- Refactors Relay classes.
- Isolates the LargeCache forEach method to allow quick time measurements on filters
- Reorganizes classes in the commons lib
- Fixes test cases for nip96 uploaders
- Removes unused addMargin param
- Refactoring caching systems for the Compose layer
- Aligns the BOM between implementation and tests
- Refactors the use of dividers out of components
- Refactors composables to load events, check hidden and check report
- Fix Kotlin encryptDecryptTest to decrypt with swapped private and public keys to follow NIP-44 documentation by @tyiu
- Finishes the migration of People List updates from LiveData to Flow
- Migrates all Refreshable feeds to the Refreshable box component
- Refactors cache methods in GiftWraps
- Migrates Media3 Videos to the DefaultMediaSourceFactory

Download:
- [Play Edition](https://github.com/vitorpamplona/amethyst/releases/download/v0.86.0/amethyst-googleplay-universal-v0.86.0.apk )
- [FOSS Edition - No translations](https://github.com/vitorpamplona/amethyst/releases/download/v0.86.0/amethyst-fdroid-universal-v0.86.0.apk ) 
 How many drafts did it take to write these release notes?  
 Approx 21 :)  
 Thought so! 

Bug report: if I type fast and post fast it will post the note AND create a draft. I guess it's the autosave timing...  
 Like this: https://void.cat/nostr/6bb7a0df9dc1bc40c9dd855db7a0c46316b0270e10bf9f936a1bcea48b50039a.png 
 Happened on the note above too, ironically enough! https://void.cat/nostr/3530768d104f6c0b34f82cf996be5f5b7523ddad37d9e99bfff8bcf783ebb8d7.png 
 yep, I am still hunting down these cases. I think its a relay that is ignoring the deletion request and sending the draft back to the app anyway. I have to build a little cache for draft deletions.  
 Sorry, test account :)  
 Look at me, sending half-assed bug reports as kind1's and exposing your sock puppets at the same time! 😂 
 Not a big deal ofc, as you can delete the drafts easily. But thought I'd let you know. 

Keep up the fantastic work everyone, #Amethyst is getting better and better! 🔥💜 
 And since we adopted V4V, the team is growing.  
 Will it stop crashing now? 🙏🙏🙏 
 The links are 404. I can help with the translation into Portuguese. 
 It's coming. For the translations: https://crowdin.com/project/amethyst-social 
 “Your request has been submitted for approval.
If you would not receive a reply within 7 days, please contact a project manager”. 
 When f-droid? 
 About 2 days.  
 Wow these are some long release notes 😅
nostr:nevent1qqs2wp9pzv6w6nlxl3hwd7y9dahsqhdrxez8wpsk79phlzetfz949vgprpmhxue69uhkummnw3ezuendwsh8w6t69e3xj730qgsyvrp9u6p0mfur9dfdru3d853tx9mdjuhkphxuxgfwmryja7zsvhqrqsqqqqqp9d96a9 
 nostr:nevent1qqs2wp9pzv6w6nlxl3hwd7y9dahsqhdrxez8wpsk79phlzetfz949vgprdmhxue69uhhyetvv9ujuemjv4jkuctjwsmkxvewvdhk6q3qgcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqxpqqqqqqz7p0hj9 
 Holy, deez release notes 
 🔥🔥 
 big update 😁 
remember to zap to keep supporting development for Amethyst! 
nostr:nevent1qqs2wp9pzv6w6nlxl3hwd7y9dahsqhdrxez8wpsk79phlzetfz949vgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdupzq3svyhng9ld8sv44950j957j9vchdktj7cxumsep9mvvjthc2pjuqvzqqqqqqy6gcdxk 
 💯🥳 
 Love to see you productive. 
 Vitor delivers daily ⚡ 
 Gotta go faster than quickly obsoleting code. 
 I'd greatly appreciate specifics on what you're referring to here. 
 These days, an app that was made 6 months ago is already outdated. Your team has to move very fast otherwise the code just slowly depreciates and newer apps take your market share with faster/simpler/better features for a fraction of the effort. It's move fast or die. 
 And then, there is Nostr... 
 Thanks for the clarification. I suppose that's the beauty of a free market. You're doing one hell of a good job, for what it's worth. 
 Thank you. Let's hope more devs and designers join the project. There is a lot of work to get done.  
 I'm actually working on figuring out what I need to know to get involved. It would be cool if the top Bitcoin and Nostr devs got together and published some sort of git repo or something that points people like me in the right direction. It's been a challenge figuring out exactly what I should spend the bulk of my time learning. 
 Removing code is way more importing than adding it. Best PRs are the ones with a lot of red. 
 True that. But also refactoring things to re-do architectures that were valid in the past but are not the ideal anymore. My caching now is quite old. Same for the Relay client code we have.  
 replies for me show as reposts for me and then a normal reply 
 thanks Victor and team! 
 I’d like to nominate my friend @ianfic_👽_ to continue with the Swahili translations so he can stack more sats during up and coming splits. I hope that is okay with you Vitor. Please guide him on what to do. 

✌🏾 
 Ready and willing, thank you brother. 
 i got u 
 The worst part about being early adopter of tech is that everything is terribly broken. 

The best part is, that when something gets fixed, the dopamine rush is real.

I literally jumped and cheered when reading about the removal of reposts of the same note in the feed.

It's the little things in life.  
 omg mainfeed so clean right now. 
 Drafts appear in the UI even if the note is written and directly posted.  
 Hopefully this was just fixed on 0.86.2 
 Let me check  
 It's still there for a split second, I think.  
 It seems confused if something is a reply or a quote. My note was a reply. I've seen it in other threads as well, briefly, one of the two is removed after a few 100ms.
 https://image.nostr.build/d7aee6783fecea056186a67be9fb2a081fbd7fff904ed71ac549f9f4e9f632f0.jpg 
 Oh I only just saw the draft label. Hmm, not sure what's going on here. 
 The home feed without duplicates is so so much better now! 
 Ask & you shall receive 
nostr:nevent1qqs2wp9pzv6w6nlxl3hwd7y9dahsqhdrxez8wpsk79phlzetfz949vgpzpmhxue69uhkummnw3ezuamfdejsygzxpsj7dqha57pjk5k37gkn6g4nzakewtmqmnwryyhd3jfwlpgxtspsgqqqqqqs64fptg 
 ว้าววว คิดว่าแปลยังไม่เสร็จนะ 
 ได้เจ้าหลาม @123🦈ปลาฉลามขึ้นบก  แอบมาช่วยแปลตอนไหนกันเนี่ย 😆🙏 #siamstr 

nostr:nevent1qqs2wp9pzv6w6nlxl3hwd7y9dahsqhdrxez8wpsk79phlzetfz949vgpz3mhxue69uhhyetvv9ujuerpd46hxtnfdupzq3svyhng9ld8sv44950j957j9vchdktj7cxumsep9mvvjthc2pjuqvzqqqqqqy6gcdxk 
 Yay, my feature request with simplified feed is in 🥳 
 Is that what you were looking for? :)  
 Oh, I think I read that wrong and misunderstood the update. No, that's not what I wanted 😢
My thing was about having a single view for both new posts and posts with replies.