* attempt some sort of "usurping" system
* polling-based active video approach
* split into inner component again
* click to steal active video
* disable findAndActivateVideo on native
* new intersectionobserver approach - wip
* fix types
* disable perf optimisation to allow overflow
* make active player indicator subtler, clean up video utils
* partially fix double-playing
* start working on controls
* fullscreen API
* get buttons working somewhat
* rm source from where it shouldn't be
* use video elem as source of truth
* fix keyboard nav + mute state
* new icons, add fullscreen + time + fix play
* unmount when far offscreen + round 2dp
* listen globally to clicks rather than blur event
* move controls to new file
* reduce quality when not active
* add hover state to buttons
* stop propagation of videoplayer click
* move around autoplay effects
* increase background contrast
* add subtitles button
* add stopPropagation to root of video player
* clean up VideoWebControls
* fix chrome
* change quality based on focused state
* use autoLevelCapping instead of nextLevel
* get subtitle track from stream
* always use hlsjs
* rework hls into a ref
* render player earlier, allowing preload
* add error boundary
* clean up component structure and organisation
* rework fullscreen API
* disable fullscreen on iPhone
* don't play when ready on pause
* debounce buffering
* simplify giant list of event listeners
* update pref
* reduce prop drilling
* minimise rerenders in `ActiveViewContext`
* restore prop drilling
---------
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Hailey <me@haileyok.com>
* Broadcast the update in the same tick
The motivation for the original code is unclear. I was not able to reproduce the described behavior and have not seen it mentioned on the web. I'll assume that this was a misunderstanding.
* Remove defensive programming
The only places in this code that we can expect to throw are schema.parse(), JSON.parse(), JSON.stringify(), and localStorage.getItem/setItem/removeItem. Let's push try/catch'es where we expect them to be necessary.
* Don't write or clobber defaults
Writing defaults to local storage is unnecessary. We would write them as a part of next update anyway. So I'm removing that to reduce the number of moving pieces.
However, we do need to be wary of _state being set to defaults. Because _state gets mutated on write. We don't want to mutate the defaults object. To avoid having to think about this, let's copy on write. We don't write to this object very often.
* Refactor: extract tryParse
* Refactor: move string parsing into tryParse
* Extract tryStringify, split logging by platform
Shared data parsing/stringification errors are always logged. Storage errors are only logged on native because we trust the web APIs to work.
* Add a layer of caching to readFromStorage to web
We're going to be doing a read on every write so let's add a fast path that avoids parsing and validating.
* Fix the race condition causing clobbered writes between tabs
* Delete logic for legacy storage
* Delete superfluous tests
At this point these tests aren't testing anything useful, let's just get rid of them.
* Inline store.ts methods into persisted/index.ts
* Fork persisted/index.ts into index.web.ts
* Remove non-essential code and comments from both forks
* Remove async/await from web fork of persisted/index.ts
* Remove unused return
* Enforce that forked types match
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* add pref for large alt badge
* add to settings
* do the large badge bit
* Tweak wording
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* migrate thread mutes
* don't try and clear if not logged in yet
* migrate mutes one at a time
* write before mutating
* only migrate mutes of self posts
* use /** @deprecated */
* shouldLike -> shouldMute
* Update types
(cherry picked from commit 27deac1f367825771ba76fa098ec1b0a62dcf64a)
* Integrate into deactivate dialog
(cherry picked from commit 84f299a447259cc1fbfc7be607e28197779e4ec1)
* Integrate into Deactivated screen
(cherry picked from commit 29193f34822ecdf11e2a407197fa230285dfe846)
* Bump api sdk
(cherry picked from commit 738c622d3e5a23bfbb0d3bdce3a6bdf01e54ca60)
* Update permalink
(cherry picked from commit c10bf5c071d76c3054bc4ce9d313c10b1820f038)
* Bump sdk pkg
* Update types to match backend
* Loosen types for forwards compat
* Hydrate status from persisted data
* Refresh session when re-activating, clear query cache
* Show app password error
* Refactor dialog to clear state when closed
* Add app password error to Deactivated screen
* Support for Flickr album and group pool embeds
* Oops, forgot to add flickr to the persisted externalEmbeds schema
* Need a bigint since our id can have more than 52 bits...
* Remove unexpected trailing / from test data to match the expected behavior
* nits
---------
Co-authored-by: Hailey <me@haileyok.com>
* Update persisted schema for new source of truth, implement in existing session
(cherry picked from commit b1e5f12baee932721d66c60dd51c981b46b0c274)
* Improve toasts, log caught error, during switch account
(cherry picked from commit fe0d1507063d2e532b7b1a447670b689292d1dc3)
* Handle thrown errors from initSession during login
(cherry picked from commit 2c85c045917e923901284b9ba310a82e28f37b5c)
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* fix: store PDS URL for session resumption
* fix: handle a few more cases
* fix: blocking resumption should also use pds url
* refactor: do it in the construct itself
* fix: revert ce96223
* Add email 2fa toggle
* Add UI elements needed for 2fa codes in login
* Wire up to the server
* Give a better failure message for bad 2fa code
* Handle enter key in login form 2fa field
* Trim spaces
* Improve error message
* add autoplay preference
* group accessibility settings into a dedicated page
* fix gray background on web
* Put a11y first
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* improve android haptics, offer toggle for haptics
* update haptics.ts
* default to false
* simplify to `playHaptic`
* just leave them as `feedInfo`
* use a hook for `playHaptic`
* missed one of them
* Replace the ServerInput modal with a new dialog based on alf that remembers your server address history and doesnt put staging and localdev in the options
* Update the server selector during account creation
* dont apply capitalization, use url keyboard
* Apply insets to dialog top
* Improve padding of dialogs on native
* Fix race condition in dialog close; also fix fire of the onClose event in dialogs
---------
Co-authored-by: Hailey <me@haileyok.com>
* add dark theme selection to settings/schema
* use `useThemePrefs` where needed
* adjust theme providers to support various themes
* update storybook
* handle web themes
* better themeing for web
* dont show dark theme prefs when color mode is light
* drop the inverted text change on oled theme
* get the color mode inside of `useColorModeTheme`
* use `ThemeName` type everywhere
* typo
* use dim/dark instead of dark/oled
* prevent any fickers on web
* fix styles
* use `dim` for dark default
* more cleanup
* 🤔
* set system background color
* ts
* Add deactivated-account tracking
* Center button text
* Add Deactivated screen
* Add icon to Deactivated screen
* Abort session resumption if the session is deactivated
* Implement deactivated screen status checks
* Bump api@0.9.5
* Use new typo-fixed scope
* UI refinements
* add expo web browser + modal
* add in app browser option to settings
* don't show toggle on web
* Tweak browser-choice UIs
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* add apple music embed
* add vimeo embed
* add logic for tenor and giphy embeds
* keep it simple, use playerUri for images too
* add gif embed player
* lint, fix tests
* remove links that can't produce a thumb
* Revert "remove links that can't produce a thumb"
This reverts commit 985b92b4e622db936bb0c79fdf324099b9c8fcd8.
* Revert "Revert "remove links that can't produce a thumb""
This reverts commit 4895ded8b5120c4fc52b43ae85c9a01ea0b1a733.
* Revert "Revert "Revert "remove links that can't produce a thumb"""
This reverts commit 36d04b517ba5139e1639f2eda28d7f9aaa2dbfb6.
* properly obtain giphy metadata regardless of used url
* test fixes
* adjust gif player
* add all twitch embed types
* support m.youtube links
* few logic adjustments
* adjust spotify player height
* prefetch gif before showing
* use memory-disk cache policy on gifs
* use `disk` cachePolicy on ios - can't start/stop animation
* support pause/play on web
* onLoad fix
* remove extra pressable, add accessibility, fix scale issues
* improve size of embed
* add settings
* fix(?) settings
* add source to embed player params
* update tests
* better naming and settings options
* consent modal
* fix test id
* why is webstorm adding .tsx
* web modal
* simplify types
* adjust snap points
* remove unnecessary yt embed library. just use the webview always
* remove now useless WebGifStill 😭
* more type cleanup
* more type cleanup
* combine parse and prefs check in one memo
* improve dimensions of youtube shorts
* oops didn't commit the test 🫥
* add shorts as separate embed type
* fix up schema
* shorts modal
* hide gif details
* support localized spotify embeds
* more cleanup
* improve look and accessibility of gif embeds
* Update routing for the external embeds settings page
* Update and simplify the external embed preferences screen
* Update copy in embedconsent modal and add 'allow all' button
---------
Co-authored-by: Hailey <me@haileyok.com>
* Set up hidden posts persisted state
* Wrap moderatePost
* Integrate hidden posts into moderation
* Complete hide-post behaviors
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* get basic hindi support to work
* get web app language switcher in
* Refactor i18n implementation and remove unused
code
* add missing strings
* add dropdowns and modals missing strings
* complete all hindi translations
* fix merge conflicts
* fix legeacy persisted state
* fix data in RecommendedFeeds
* fix lint
* Move broadcast channel to lib
* Refactor view/com/post/Post and remove temporary 2 components
* Add useModerationOpts hook
* Refactor notifications to use react-query
* Fix: only trigger updates in useModerationOpts when the values have changed
* Implement unread notification tracking
* Add moderation filtering to notifications
* Handle native/push notifications
* Remove dead code
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* Add persistent state provider
* Catch write error
* Handle read errors, update error msgs
* Fix lint
* Don't provide initial state to loader
* Remove colorMode from shell state
* Idea: hook into persisted context from other files
* Migrate settings to new hook
* Rework persisted state to split individual contexts
* Tweak persisted schema and validation
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>