* actually register token on permissions change
* actually register token on permissions change
* get updated permissions every time
* remove all usages of `usePermissions`
* skip perms check on granted result from request
* cleanup the current logic
* add statsig logs
* implement requests for permissions where needed
* oops
* let `addPushTokenListener` handle the token registration
* place new log event type with the other `notifications` type
* place registration next to handler
* more organization
* only call `gate()` if permission is not yet granted
* be more specific to prevent gate pollution
* nit
* make `token` non-optional in `registerToken`
* remove `prevDid`, move `registerPushToken` into `useEffect`
* keep it outside actually
* nit
* download CAR file using AtpAgent instead of building URL
* add loader icon on download car button
* actually save to disk on android
* style nits
* bottom margin nit
* localize toast
* remove fallback so back button works correctly
* keep throwing an error if mime type isn't used
* be more explicit with toasts
* send errors to sentry when encountered
---------
Co-authored-by: Hailey <me@haileyok.com>
* Lower seen threshold to 1.5s
* Send feedContext for replies
* Use a simpler and more reliable feedContext fallback
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Onboarding avatar creator or upload (#2860)
* add screen to onboarding flow
* update base
* add icon
* fix icon
* fix after merge
* create flatlist
* add emoji list
* add state context, pressables
* select/update
* add camera icon
* add photo selection button
* image selection
* cleanup
* add most needed icons
* fix icon naming
* add icons
* export path strings for emoji
* canvas drawing for web
* types
* move breakpoints to individual steps
* create canvas
* canvas working 🎉
* update state
* it works!
* working on both platforms
* remove comments
* remove log
* remove unused web canvas
* animate picture selection/removal
* compress images on web correctly
* add times icon
* scrollable horizontal flatlist on web
* prefetch
* adjustments
* add more assets
* remove unused smiles
* add all the icons
* adjust color options
* animate grow/shrink selections
* change layout on tablet/desktop
* better web layout
* fix path
* adjust web layout
* organize
* organize imports and cleanup styles
* make generated images smaller
* implement design changes
use row for buttons on web
use RNGH FlatList
random color at start
improve logic
update dialog for web
update dialog style on mobile
some more progress
create dialog
simplify context
start implementing design
* rm change
* cleanup imports
* trigger a pr label
* Formatting
---------
Co-authored-by: Eric Bailey <git@esb.lol>
(cherry picked from commit 087186e3867b0eefb11a056b0b644f5585fa16bd)
* UI tweaks
* Revert layout change
* Gate avi upload
* Support returning to profile step
* Add Statsig
---------
Co-authored-by: Hailey <me@haileyok.com>
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Handle home algo with backwards compat
* Remove todo, fix pwi view
* Simplify filter logic
* Handle edge case
* Handle home algo in FeedSourceCard
* Fix handling of pinned feed if home algo is disabled
* Handle home algo on ProfileFeed screen
* Rename
* Fix pinned feeds key
* Improve perf of pinned feeds with primary algo
* Update statsig API
* Revert unneeded changes
* Support following feed as well
* Better formatting
* Clarify primary algo usage
* Better comment
* Handle saved feed screen edge case
* Restore Feeds sparkle, fix line height
* Move gate call down
* Filter out primary algo from feeds page
* Filter dupe from Feeds screen
* Simplify logic
* Missing following handling
* Hide primary feed setting outside exp
* Revert testing change
* Migrate usePinnedFeedInfos
* Migrate FeedSourceCard
* Migrate Feeds screen
* Migrate SavedFeeds screen
* Handle timeline in feed infos
* Finish migrating ProfileFeed, FeedSourceCard
* Migrate ProfileList
* Finalize mutation hooks
* Allow unsaving lists
* Handle following feed on Feeds screen
* Handle following on SavedFeeds
* Get rid of deprecated interface usages
* Handle no pinned feeds
* Handle no feeds on Feeds screen
* Reuse component on SavedFeeds screen
* Handle no following feed
* Remove primary algo references
* Migrate to new plural APIs
* Remove unused event
* Prevent duplicate keys
* Make handling much more clear
* Dedupe useHeaderOffset
* Filter unknown feed types at source
* Use just following
* Immprove key handling
* Resume from last tab
* Bump sdk
* Revert Gemfile
* Additional protection in FeedSourceCard
* Fix ProfileList save/unsave handling
* Translate
* Translate
* Match existing handling post-signup
* Ensure onboarding results in correct selected feeds
* Some testing tweaks on create/onboarding
* Revert primary algo consderations
* Remove comment
* Handle default feed setting
* Rm unnecessary type cast
* Remove premature gate check
* Remove nullable check in onPageSelecting, assume the pager checks bounds
* Use null for default selected feed
* Rm unrelated change
* Remove the concept of __key__
I don't think this concept is consistent.
It's introduced on FeedSourceInfo which is used both by pinned feeds and by useFeedSourceInfoQuery. Pinned feeds use the pinning ID there. But there is no pinning ID for useFeedSourceInfoQuery. So this means this field is sometimes one thing and sometimes some other thing. That is a decent sign that it shouldn't be on that type at all.
It's not used anywhere except the desktop feed enumeration. It seems reasonable to assume there that we wouldn't want to show the same feed URL twice. (And if it does occur in the array twice, IMO we should solve that at the API level and dedupe it on read or next write.) So I think we should just use the URL in that place. (I used the descriptor, which is equivalent.)
* Dedupe pinned feeds by URL on read
* Filter timeline out of mergefeed sources
* Put FeedDescriptor into FeedSourceInfo
* Group saved info with feed for pins
This removes a loop within a loop within a loop.
* Fix Feeds link on native
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* some initial tweaks
* tweaks
* more tweaks
* tweak chat header
* properly align placeholders
* tweak web header
* one more...
* remove extra loading states from chat
* limit line count for display name
* Tweaks styles (#3949)
* Adjust sizing
* Consistent font size
* Adjust header
* oops
* fix accessibility in list
* don't use `identifier` for notifications, use `dates` instead
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* add some better handling for notifications
prep merge
move `useNotificationsListener` into shell
progress
better structure
only show messages notifications while using app if it is the current account
progress
only emit on native
current chat emitter
only show alerts for the current chat
type
add logs
setup handlers
* remove event emitter
* just needs cleanup
* oops
* remove unnecessary `queryClient` param
* few fixes
* cleanup
* nit
* remove folds
* remove comment
* simplify if
* add back invalidate
* comment out other navigations for now
* rename type
* handle various navigation cases
* push to conversation from notification
* update badge in all cases except `chat-message`
* ensure no duplicate notifications
* rm unused `animationOnReplace`
* revert to using `goBack` in the conversation header
* add todo comment
* Split utils into files
* Move reducer to another file
* Write types explicitly
* Remove unnnecessary check
* Move things around a bit
* Move more stuff into agent factories
* Move more stuff into agent
* Fix gates await
* Clarify comments
* Enforce more via types
* Nit
* initSession -> resumeSession
* Protect against races
* Make agent opaque to reducer
* Check using plain condition
* Replace pluralize with plural or Plural
* Replace all pluralize (defined by src/lib/strings/helpers.ts) with plural or Plural (defined by @lingui/macro) to make some UI elements translatable.
* Delete pluralize() and related test.
* Import @formatjs polyfill libraries for plural on ios and android
- ios and andorid: import `@formtjs/intl-locale` and `@formatjs/intl-pluralrules` to polyfill `Intl.Locale` and `Intl.PluralRules` which are used in `plural()` and '<Plural />'.
- update `plural` use in notification messages for better translation.
* Rewrite to pass lint
* Add Catalan plural polyfill
* more replacement
* import zh plural data for zh-CN
* Refactor feed header components (#2964)
* Move home-related files to view/com/home
* Add HomeHeader in front of FeedTabBar
* Move isDekstop check outside FeedsTabBar
* Remove PWI logic from tabbar
* Separate platform-specific layout from shared logic
* Rename Home Feed Prefs to Following Feed Prefs (#2965)
* use `useOpenLink` hook for links in ALF (#2975)
* use `useOpenLink` hook for links in ALF
* web only for `outline`
* increase timeout to 15s (#2958)
* Normalize relative day (#2874)
* fix: normalize relative date
* chore: add comments
* refactor: skip flooring normalized diff
* refactor: let -> const
* fix: get own copy of date to prevent mutating
* refactor: rounding does the same trick
* Add handle validation to create account UI (#2959)
* show uiState errors in the box as well
simplify copy
update ui for only letters and numbers
add ui validation to handle selection
* simplify names
* Fix accidental text-node render
---------
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
* Make dim theme dim (#2966)
* Make dim color scheme dim
* Tweaks
* Overall tweaks
* We have to go darker
* Tweak saturation of blues in dim
* Increase contrast on dark-dark mode
* adjust dim
---------
Co-authored-by: Eric Bailey <git@esb.lol>
Co-authored-by: Paul Frazee <pfrazee@gmail.com>
Co-authored-by: Hailey <me@haileyok.com>
* Fix dim mode unread notif color
* use `showControls` to show/hide live text icon on ios (#2982)
* Update .po files
* fix reversed icons in validator 🤦 (#2991)
* Adjust `windowSize` on `PostThread` `FlatList` (#2989)
* adjust window size, cells batching period
* rm batching period change
* Pluralize 'follow(s)'
* Include a space between the msgid count and "follower(s)/following(s)" so the translator can adjust the translated count line to fit within the Drawer.
* pluralie '# following'
* Fix & Update
* Rewrite to use Plural
* rmeove unused import
* When commiting changes, disable 'simple-import-sort' plugin in .eslintrc.js to sync with bluesky-social:main
* Revert simple-import-sort/imports related changes
* Move ProfileHoverCard web to plural util
* Followings -> following
* Add plural following to hovercard
* Followings -> Following
---------
Co-authored-by: Takayuki KUSANO <kusano@tkusano.jp>
Co-authored-by: Takayuki KUSANO <65759+tkusano@users.noreply.github.com>
Co-authored-by: dan <dan.abramov@gmail.com>
Co-authored-by: Hailey <me@haileyok.com>
Co-authored-by: Mary <148872143+mary-ext@users.noreply.github.com>
Co-authored-by: Eric Bailey <git@esb.lol>
* add bundle identifiers to `app-info`
* add them to the `.env.example`
* add environment variables for docker build
* add environment variables for native builds and bundles
* also include the hour in bundle date
* organize app info better in settings
* Move ThemeProvider to the top
* Move RootSiblingParent above the remounted part
* Move ToastContainer outside the remounted part
* Remove setTimeout around toasts
* Consistently handle dropped session
* 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>
* WIP
* Fix constructors
* Clean up
* Tweak
* Rm extra assignment
* Narrow down the argument
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Add optional momentum events to scroll context
* If there is a velocity, don't snap until momentum end
* Don't show bar on scroll down
* Rm onMomentumBegin
* delete image on each iteration of compression
* replace a few other instances of `unlink()`
* ensure that moving to the permanent path will succeed
* use `cacheDirectory`
* missing file extension?
* assert
* Remove extra .
* Extract safeDeleteAsync, fix normalization
* Normalize everywhere
* Use safeDeleteAsync in more places
* Delete .bin too
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* ios player
autoplay after recycle
remove all items from AVPlayer queue
recurururururursion
use managers in the view
add prefetch
make sure player items stay in order
add controller and item managers
start of the view
create module, ios
* android player
smoother
basic caching
prep cache
somewhat works
backup
other files
android impl
blegh
lets go
touchup
add prefetch to js
use caching
* bogus testing commit
* add dims to type
* save
* add the dimensions to the embed info
* add a new case
* add a new case
* limit this case to giphy
* use gate
* Revert "bogus testing commit"
This reverts commit b3c8751b71f7108de9aa843b22ded4e0249fa854.
* add web player base
* flip mp4/webp
* basic mp4 player for web
* move some stuff into `ExternalLinkEmbed` instead
* use a class component for web
* remove extra component
* add `onPlayerStateChange` event type on web
* layer properly
* fix tests
* add new test
* about ready. native portions done, a few touch ups on web needed
show placeholder on ios
fix type
rm log
display thumbnail until video is ready to play
add oncanplay, playsinline
remove unused method
add `isLoaded` change event
release player when finished
apply gc to the view
cleanup logs
android gc
rm log
automatic gc for assets
make `nativeRef` private
remove unnecessary `await`
cleanup
rev log
only play on prepare whenever needed
rm unused
perfperfperf
rm var
comment + android width
native height calculations
rm pressable
add event dispatcher on android
add event dispatcher on ios
* ready to test ios
fix autoplay ios
clean
oops
* autoplay on web
* normalize across all platforms
add check for `ALT:`
separate gif embed logic to another file
handle permissions requests
flatten web styles
normalize styles
normalize styles
prefetch functions
pause animatable on foreground android
nits
one more oops
idk where that code went
lint
rethink the usage
wrap up
android
clear bg
update gradle
more android
rename dir
update android namespace
web
ios
add deps
use webp
rm unused
update types
use webp on mobile
* rm gate from types
* remove unused event param
* only start placeholder op if doesn't exist in disk cache
* fix gifs animating on app resume android
* remove comment
* add `isLoaded` for ios
* add `isLoaded` to Android
* onload for web
* add visual loading state
* rm a log
* implement isloaded for android
* dialogs
* replace `webpSource` with `source`
* update prop name
* Move to Tenor for GIFs (#3654)
* update some urls
* right order for dimensions
* add GIF coder for ios
* remove giphy check
* rewrite tenor urls
* remove all the unnecessary stuff for consent
* rm print
* rm log
* check if id and filename are strings
* full size playback controls
* pass tests
* add accessibility to gifs
* use `onPlay` and `onPause`
* rm unused logic for description
* add accessibility label to the controls
* add gif into to external embed in composer
* make it optional
* gif dimensions
* make the jsx look nicer
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* properly close the switch account dialog
* use it for switch account as well
* ensure dialog is closed on unmount
Revert "properly check if the ref is null"
This reverts commit 8f563808a5d39389b0bc47a31e73cd147d1e7e8b.
properly check if the ref is null
ensure dialog is closed on unmount
* Revert "ensure dialog is closed on unmount"
This reverts commit a48548fd8ed53ae3eb08a0e05bb89f641c112b95.
* add dims to type
* save
* add the dimensions to the embed info
* add a new case
* add a new case
* limit this case to giphy
* use gate
* flip mp4/webp
* fix tests
* add new test
* 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>
* create dialog with flatlist in it
* use alf for composer photos/camera/gif buttons
* add gif icons
* focus textinput on gif dialog close
* add giphy API + gif grid
* web support
* add consent confirmation
* track gif select
* desktop web consent styles
* use InlineLinkText instead of Link
* add error/loading state
* hide sideborders on web
* disable composer buttons where necessary
* skip cardyb and set thumbnail directly
* switch legacy analytics to statsig
* remove autoplay prop
* disable photo/gif buttons if external media is present
* memoize listmaybeplaceholder
* fix pagination
* don't set `value` of TextInput, clear via ref
* remove console.log
* close modal if press escape
* pass alt text in the description
* Fix typo
* Rm dialog
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* Poll both current and other accounts
* Make createStatsigOptions a function
* Pass prefetchUsers with the initial request
* Add initializeCalled check
* Be resilient to object identity changes
* Decrease poll interval to 1 minute
* cleanup images after uploading from the composer
cleanup external embed images as well
cleanup files after upload
add `expo-file-system`
* remove test log
* await
* Revert "await"
This reverts commit 771814b40ce1395cac4f56853d8a9e793ca92c2f.
* just log an error if it throws
* Handle leftnav overflow with longer languages' copy
* Update the language dropdown to set ALL language prefs
* Add hackfix to language cachebusting on PWI
* Reset feeds on language change
* add embed option to post dropdown menu
* put embed post button behind a gate
* increase line height in dialog
* add gate to gate name union
* hide embed button if PWI optout
* Ungate embed button
* Escape HTML, align implementations
* Make dialog conditionally rendered
* Memoize EmbedDialog
* Render dialog lazily
---------
Co-authored-by: Dan Abramov <dan.abramov@gmail.com>
* feat: initial user card hover
* feat: flesh it out some more
* fix: initialize middlewares once
* chore: remove floating-ui react-native
* chore: clean up
* Update moderation apis, fix lint
* Refactor profile hover card to alf
* Clean up
* Debounce, fix positioning when loading
* Fix going away
* Close on all link presses
* Tweak styles
* Disable on mobile web
* cleanup some of the changes pt. 1
* cleanup some of the changes pt. 2
* cleanup some of the changes pt. 3
* cleanup some of the changes pt. 4
* Re-revert files
* Fix handle presentation
* Don't follow yourself, silly
* Collapsed notifications group
* ProfileCard
* Tree view replies
* Suggested follows
* Fix hover-back-on-card edge case
* Moar
---------
Co-authored-by: Mary <git@mary.my.id>
Co-authored-by: Hailey <me@haileyok.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
* add extra tab to search and translate tab names
* add feature gate
* flatten pager children
* Revert "flatten pager children"
This reverts commit 0050d42558c2c9b7bc4f2ad2df4ae2908fa26f65.
* have pager children as array
* move gate to custom hook
* bundle titles and pages together
* remove comment
* Fix a crash
* Use Views as children
---------
Co-authored-by: dan <dan.abramov@gmail.com>
* uitextview use library w/ fixes
bump
bump
multiple uitextview fixes
* bump
* Open share sheet on link long press
* rm package manager field
* add link warning to longpress
---------
Co-authored-by: Hailey <me@haileyok.com>
* simplify list logic further
more simplification
simplify by removing `isEmpty`
use `isFetchingNextPage` everywhere for clarity
change `isFetching` to `isFetchingNextPage` for clarity
remove some useless `useMemo`s
move `renderItem` and `keyExtractor` out of component
* clean bundle size check
* update deploy
* adjust
* adjust
* one test
* try now
* test it
* done
* Move QueryProvider inside the key
* Pull useQueryClient-dependent code down in App.native
* Remove useQueryClient dependency from session provider
* Scope query client per DID