Commit Graph

4186 Commits (f3a9f874d96d8cf4e1705c8c9086949bd59b25c0)

Author SHA1 Message Date
Eric Bailey f3a9f874d9
Remove ungroup_follow_backs gate (#4893) 2024-08-08 11:48:24 -05:00
dan 4b71950d99
Remove unnecessary state update for reply gate (#4897)
* Move mobile compose prompt to inner component

* Make canReply computed

* Use same clamp we use elsewhere
2024-08-08 17:05:51 +01:00
dan 2174feed44
Include follow-based suggestions in interstitial (#4889) 2024-08-08 15:49:34 +01:00
dan f1031d100b
Cleanup flags (#4891)
* Remove launched gates

* Remove disabled gates
2024-08-08 15:25:42 +01:00
Eric Bailey 1e3b2d6f42
ALF suggested follows in profile header (#4828)
* Refactor ProfileHeaderSuggestedFollows

* Load fresh data every time

* Oops, missed a file

* Update ProfileCard.Link usage, tweak copy
2024-08-08 09:19:51 -05:00
Minseo Lee af5262682e
Added trans (#4890) 2024-08-08 13:12:23 +01:00
dan a864f69849
Keep interstitial fresh on refresh (#4888) 2024-08-08 06:20:24 +01:00
dan 00fea10782
Include popcluster in suggestion ranking (#4887) 2024-08-08 05:56:22 +01:00
Hailey b3092413dd
Add logging of selected feed preference when displaying the following feed (#4789) 2024-08-07 17:13:29 -07:00
Hailey 1b02f81cb8
[Video] Visibility detection view (#4741)
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
2024-08-07 14:45:06 -07:00
Samuel Newman fff2c079c2
[Videos] Video player - PR #2 - better web support (#4732)
* 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>
2024-08-07 18:47:51 +01:00
Samuel Newman b701e8c68c
[Video] Authed video upload (#4885)
* add service auth call

* update API package

---------

Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
2024-08-07 16:56:12 +01:00
Hailey 753a233408
Tweak feed manip to show cases of A -> B without further children (#4883) 2024-08-06 11:21:59 -07:00
dan 5845e08eee
Show own replies before follows' replies in threads (#4882) 2024-08-06 17:12:27 +01:00
dan b291a1ed8a
Show more replies in Following (different heuristic) (#4880) 2024-08-06 16:42:42 +01:00
dan 686d5ebb53
[Persisted] Make broadcast subscriptions granular by key (#4874)
* Add fast path for guaranteed noop updates

* Change persisted.onUpdate() API to take a key

* Implement granular broadcast listeners
2024-08-06 01:30:52 +01:00
dan 966f6c511f
[Persisted] Fix the race condition causing clobbered writes between tabs (#4873)
* 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
2024-08-06 01:03:27 +01:00
dan 5bf7f3769d
[Persisted] Fork web and native, make it synchronous on the web (#4872)
* 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
2024-08-06 00:30:58 +01:00
dan 74b0318d89
Show replies in context of their threads (#4871)
* Don't reconstruct threads from separate posts

* Remove post-level dedupe for now

* Change repost dedupe condition to look just at length

* Delete unused isThread

* Delete another isThread field

It is now meaningless because there's nothing special about author threads.

* Narrow down slice item shape so it does not need reply

* Consolidate slice validation criteria in one place

* Show replies in context

* Make fallback marker work

* Remove misleading and now-unused property

It was called rootUri but it was actually the leaf URI. Regardless, it's not used anymore.

* Add by-thread dedupe to non-author feeds

* Add post-level dedupe

* Always count from the start

This is easier to think about.

* Only tuner state need to be untouched on dry run

* Account for threads in reply filtering

* Remove repost deduping

This is already being taken care of by item-level deduping. It's also now wrong and removing too much (since it wasn't filtering for reposts directly).

* Calculate rootUri correctly

* Apply Following settings to all lists

* Don't dedupe intentional reposts by thread

* Show reply parent when ambiguous

* Explicitly remove orphaned replies from following/lists

* Fix thread dedupe to work across pages

* Mark grandparent-blocked as orphaned

* Guard tuner state change by dryRun

* Remove dead code

* Don't dedupe feedgen threads

* Revert "Apply Following settings to all lists"

This reverts commit aff86be6d37b60cc5d0ac38f22c31a4808342cf4.

Let's not do this yet and have a bit more discussion. This is a chunky change already.

* Reason belongs to a slice, not item

* Logically feedContext belongs to the slice

* Update comment to reflect latest behavior
2024-08-05 20:51:41 +01:00
Hailey 18b423396b
Add `PlatformInfo` module (#4877) 2024-08-05 12:21:34 -07:00
bnewbold fb278384c6
bskyweb: optional basic auth password middleware (#4759) 2024-08-02 15:57:50 -07:00
Samuel Newman 6298e6897f
tweak list header (#4870)
Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
2024-08-03 00:33:45 +02:00
Eric Bailey c3d8beee6d
Respect labels on feeds and lists (#4818)
* Prep

* Pass in optional moderation to FeedCard

* Compute moderation decision, filter contentList contexts, pass into card

* Let's go a different route

* Filter from within search queries

* Use same search query for starter packs

* Filter lists from profile tabs

* Cleanup

* Filter from profile feeds

* Moderate post embeds

* Memoize

* Use ScreenHider on lists

* Hide both list types

* Fix crash on iOS in screen hider, fix lineheight

* Memoize renderItem

* Reuse objects to prevent re-renders
2024-08-02 13:05:33 -05:00
dan 293ac6fab2
Only show replies in Following if following all involved actors (#4869)
* Only show replies in Following for followed root and grandparent

* Remove now-unnecessary check

* Simplify condition
2024-08-02 17:13:31 +01:00
dan 7f292abf51
Always limit Following replies to the people you follow (#4868)
* Limit feed replies to people you follow

* Remove dead code
2024-08-01 22:05:40 +01:00
Hailey f056cb646e
Fix missing header on Likes/Reposted By, add missing perf optimizations (#4867)
* fix liked by list

* fix lists

* tweaks to style

* change string
2024-08-01 10:32:36 -07:00
Samuel Newman c78e9e3147
Move theme controls to its own screen (#4866) 2024-08-01 19:14:32 +02:00
dan 388c157c36
Display second-to-last rather than second post in a slice (#4864) 2024-08-01 17:49:43 +01:00
Eric Bailey b0e130a4d8
Update muted words dialog with `expiresAt` and `actorTarget` (#4801)
* WIP not working dropdown

* Update MutedWords dialog

* Add i18n formatDistance

* Comments

* Handle text wrapping

* Update label copy

Co-authored-by: Hailey <me@haileyok.com>

* Fix alignment

* Improve translation output

* Revert toggle changes

* Better types for useFormatDistance

* Tweaks

* Integrate new sdk version into TagMenu

* Use ampersand

Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>

* Bump SDK

---------

Co-authored-by: Hailey <me@haileyok.com>
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
2024-08-01 10:29:27 -05:00
dan d2e88cc623
Fetch enough pages to fill a page's worth of items (#4863)
* Fetch enough pages to fill a page's worth of items

* Add failsafe in case of appview bug
2024-08-01 02:27:25 +01:00
Hailey 70ffd387e3
Only show "followed you back" when appropriate (#4849)
* only show followed back when we should

* try/catch

* log

* Update FeedItem.tsx

* tweak
2024-07-31 11:16:14 -07:00
dan 576cef88b5
[Web] Retrigger onEndReached if needed when content height changes (#4859)
* Extract EdgeVisibility

* Key Visibility by container height instead of item count
2024-07-31 19:10:24 +01:00
dan c75bb65bef
Remove unused NoopFeedTuner (#4856) 2024-07-31 13:00:22 +01:00
GSMT c3e77b56ff
useDedupe callback (#4855) 2024-07-30 15:19:23 -07:00
Hailey 8ddb28d3c5
[Video] Uploads (#4754)
* state for video uploads

* get upload working

* add a debug log

* add post progress

* progress

* fetch data

* add some progress info, web uploads

* post on finished uploading (wip)

* add a note

* add some todos

* clear video

* merge some stuff

* convert to `createUploadTask`

* patch expo modules core

* working native upload progress

* platform fork

* upload progress for web

* cleanup

* cleanup

* more tweaks

* simplify

* fix type errors

---------

Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
2024-07-30 08:25:31 -07:00
Eric Bailey 43ba0f21f6
Make label required in link components (#4844) 2024-07-25 18:34:21 -05:00
Dmitrii Kartashev 4437b9a557
Boolean filter improvement alternative: TS upgrade (#4840)
* upgrade typescript and use new feature

* fix: typing error
2024-07-26 00:31:59 +01:00
Eric Bailey 50769b0b6f
Add label to profile card (#4843) 2024-07-25 18:11:31 -05:00
Eric Bailey 043e5cea64
Improve a11y on noty feed (#4842) 2024-07-25 18:11:16 -05:00
Eric Bailey 35165e3d9b
Add labels in feed card (#4836) 2024-07-25 18:07:42 -05:00
Eric Bailey 1d827cebe4
Add labels to mod details dialog (#4839) 2024-07-25 18:07:23 -05:00
Eric Bailey 783fd351ba
Add labels to a few missing places (#4838) 2024-07-25 18:07:15 -05:00
Eric Bailey e7b485f185
Add labels in list card (#4837) 2024-07-25 18:07:07 -05:00
dan ac1538baad
Refactor feed slices (#4834)
* Copy FeedViewPost into FeedSliceItem

* Explicitly construct feed slice items by copying known fields

* Type rootItem as FeedViewPost for now

Mergefeed logic relies on that.

* Unify reason and __source for slice items

* Move feedContext out of FeedSliceItem

* Remove slice.isFlattenedReply

* Remove unnused slice.ts

* Inline slice.isFullThread

* Refactor condition for clarity

* Extract slice.includesThreadRoot

* Encapsulate more usages of slice.rootItem into slice

* Rename slice.rootItem so semi-private slice._feedPost

* Move reason into slice

* Simplify slice ctor argument

* Reorder getters to reduce diff

* Make feedContext a getter to reduce diff
2024-07-25 23:02:37 +01:00
Hailey 3914025227
`true` (#4833) 2024-07-25 21:26:37 +01:00
Samuel Newman 401e92ed42
Replace `import hairlineWidth =` with const (#4831)
* replace import with const

* just use `StyleSheet.hairlineWidth`

---------

Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
2024-07-25 20:45:15 +01:00
Samuel Newman 00240b95b9
[Videos] Video player - PR #1 - basic player (#4731)
* add ffmpeg-kit-react-native

* get select video button + compression working

* up res to 1080p

* add progress component

* move logic out of compressVideo

* (WIP) add lonestar compression

* rework web compression a bit

* mess around with adding a thumbnail

* 3mbps

* replace

* use 3mbps

* add expo-video

* remove unnecessary try/catch

* rm ToastAndroid

* fix web

* wrap lazy component in suspense

* gate video select button

* rm web compression

* flip sign

* remove expo-video from web

* review nits

* add video picker permissions + rm temp buttons

* add ffmpeg-kit-react-native

* replace

* hls-capable player

* start trying to hoist up video player instance

* hoist video player and move things around

* always show native controls

* fix controls on expo video android

* gate temp video player in feed

* rm IS_DEV, doesn't do what I thought it did

* use __DEV__ instead

---------

Co-authored-by: Samuel Newman <10959775+mozzius@users.noreply.github.com>
Co-authored-by: Hailey <me@haileyok.com>
2024-07-25 20:41:50 +01:00
Hailey 4ec999cab7
Bump 1.90 (#4832) 2024-07-25 20:41:32 +01:00
dan 4291711f1d
Fix sloppy filter(Boolean) types (#4830)
* Fix sloppy filter(Boolean) in threadgate

* Fix sloppy filter(Boolean) in Explore

* Fix sloppy filter(Boolean) in post-feed

* Harden FeedPostSliceItem.reason type def

* Harden parentAuthor types

* Fix lying component types, handle blocks
2024-07-25 19:53:12 +01:00
Eric Bailey fac1af43b0
Fuggedaboudit (#4829) 2024-07-25 13:16:21 -05:00