Commit graph

67 commits

Author SHA1 Message Date
infinite-persistence
f5034f74ca Batch resolve pin urls in 2 ways
Expanded homepage pins to support 2 types of input (if both are passed in, pinnedUrls take precedence):
  (1) pinnedUrls     --> uses doResolveUris (resolve)
  (2) pinnedClaimIds --> uses doResolveClaimIds (claim_search)

Instead of injecting the pinned URLs directly, we inject from `resolvedPinUris`, which will be blank until the uris are resolved, thus preventing it from being resolved individually from the tiles.

There's additional complexity with the `claim_search` method, as the rest of the code deals with uris instead of IDs. Fortunately, it's all contained with `useResolvePins`, so removal would be easier when the batch `resolve` issue is fixed.
2022-03-31 15:58:10 -04:00
infinite-persistence
dd5f4872fc Minor cleanup, no functional change
- Self-documenting variable.
- Remove incorrect comments.
- Remove redundant variables.
2022-03-31 15:58:10 -04:00
infinite-persistence
1366f8d3ce Force reposts in Homepage + Category Page, except Following & WW
Ticket: 1220
2022-03-30 09:39:06 -04:00
mayeaux
fb3a73d8a7
Membership subscriptions (#812)
Enter: Odysee Premium.
2022-03-09 13:05:37 -05:00
Anthony
af8d742b75 add some comments for documentation 2022-03-08 10:53:52 -05:00
infinite-persistence
0143b63c74 Ads: replace DOM manipulations with React components
- Instead of 2 ways to display ads (DOM injection + React method) and having both of them clash, just do it the predictable React way.
    - Augment the existing React version to support tile layout + ability to place in last visible slot.
    - Consolidate styling code to scss ... DOM manipulations were making it even harder to maintain.
    - Removed the need to check for ad-blockers for now. It was being executed every time an ad is displayed, and now that we are displaying ads in more places, the gains doesn't justify the performance loss. Also, it wasn't being done for Recommended ads anyway, so the inconsistency probably means it's not needed in the first place.

Other known issues fixed:
- double ad injection when changing language via nag.
- additional "total-blocking-time" due to ads at startup removed.
- fixed ads not appearing in mobile homepage until navigated away and back to homepage.
- enable ads in channel page.
- support for both List and Tile layout.
2022-03-08 10:53:52 -05:00
mayeaux
0c4f85fe53
MAKE ODYSEE EVEN MORE BEAUTIFUL (#539)
WE LOVE YOU RAPHAEL FOR MAKING THIS HAPPEN!
2022-02-11 13:50:55 -05:00
infinite-persistence
c50cc422b7 Don't refresh tiles while fetching and if same results
## Ticket
555 Don't refresh tiles/claim search after blocking results are in + don't change
2021-12-29 09:32:01 -05:00
infinite-persistence
b0bea66b1d ClaimTilesDiscover: optimize props to reduce renders
Props: either use primitives, stable references or memoized objects to reduce renders. This update will simplify the existing `areEqual`. It is still needed though as some props are hard to memoize from where they are called, or should simply be ignore.
2021-12-29 09:32:01 -05:00
infinite-persistence
3b87f0aba6 Remove content_tags and related functions
No longer necessary.

Also removed a few doToggleTagFollowDesktop props (unused by the View).
2021-12-13 11:54:53 -05:00
Merge
30023422b8
Desktop cherry-pick: "7240 Integrate lbry redux and lbryinc" 2021-10-19 20:40:07 +08:00
infinite-persistence
a8149fe9bb
Memoize 'mutedAndBlockedChannelIds'
It was being recalculated repeatedly.

This memoizes it, although it still re-calculates occasionally despite none of the source arrays changed. I think it is due to the state change in the Preference Sync.

Note: input selectors to `createSelector` needs to be extractions-only (i.e. must not have transformations). I think most of our `makeSelect*` selectors violate this and broke memoization.
2021-09-29 21:55:01 +08:00
infinite-persistence
b796ab3207
Fix missed render when blocklist is fetched
## Issue
7176

## Changes
Pitfalls of pausing render via React.memo:
  - We'll miss the `doClaimSearch()` since that is sparked by an `useEffect`.

Seems like we can't avoid having a redundant copy of the previously-displayed URIs.
2021-09-29 16:33:18 +08:00
infinite-persistence
3b47edc3b9
Livestream category improvements (#7115)
*  Remove old method of displaying active livestreams

Completely remove it for now to make the commit deltas clearer.
We'll replace it with the new method at the end.

* Fetch and store active-livestream info in redux

* Tiles can now query active-livestream state from redux instead of getting from parent.

*  ClaimTilesDiscover: revert and cleanup

## Simplify
- Simplify to just `uris` instead of having multiple arrays (`uris`, `modifiedUris`, `prevUris`)
- The `prevUris` is for CLS prevention. With this removal, the CLS issue is back, but we'll handle it differently later.
- Temporarily disable the view-count fetching. Code is left there so that I don't forget.

## Fix
- `shouldPerformSearch` was never true when `prefixUris` is present. Corrected the logic.
- Aside: prefix and pin is so similar in function. Hm ....

* ClaimTilesDiscover: factor out options

## Change
Move the `option` code outside and passed in as a pre-calculated prop.

## Reason
To skip rendering while waiting for `claim_search`, we need to add `React.memo(areEqual)`. However, the flag that determines if we are fetching `claim_search` (fetchingClaimSearchByQuery[]) depends on the derived options as the key.

Instead of calculating `options` twice, we moved it to the props so both sides can use it.

It also makes the component a bit more readable.

The downside is that the prop-passing might not be clear.

* ClaimTilesDiscover: reduce ~17 renders at startup to just 2.

* ClaimTilesDiscover: fill with placeholder while waiting for claim_search

## Issue
Livestream claims are fetched seperately, so they might already exists. While claim_search is running, the list only consists of livestreams (collapsed).

## Fix
Fill up the space with placeholders to prevent layout shift.

* Add 'useFetchViewCount' to handle fetching from lists

This effect also stashes fetched uris, so that we won't re-fetch the same uris during the same instance (e.g. during infinite scroll).

*  ClaimListDiscover: revert and cleanup

## Revert
- Removed the 'finalUris' stuff that was meant to "pause" visual changes when fetching. I think it'll be cleaner to use React.memo to achieve that.

## Alterations
- Added `renderUri` to make it clear which array that this component will render.
- Re-do the way we fetch view counts now that 'finalUris' is gone. Not the best method, but at least correct for now.

* ClaimListDiscover: add prefixUris, similar to ClaimTilesDiscover

This will be initially used to append livestreams at the top.

*  Re-enable active livestream tiles using the new method

* doFetchActiveLivestreams: add interval check

- Added a default minimum of 5 minutes between fetches. Clients can bypass this through `forceFetch` if needed.

* doFetchActiveLivestreams: add option check

We'll need to support different 'orderBy', so adding an "options check" when determining if we just made the same fetch.

* WildWest: limit livestream tiles + add ability to show more

Most likely this behavior will change in the future, so we'll leave `ClaimListDiscover` untouched and handle the logic at the page level.

This solution uses 2 `ClaimListDiscover` -- if the reduced livestream list is visible, it handles the header; else the normal list handles the header.

* Use better tile-count on larger screens.

Used the same method as how the homepage does it.
2021-09-24 10:26:21 -04:00
infinite-persistence
663ae2762f
Don't fetch view_count on empty list.
Also guard against null array.
2021-09-09 22:05:48 +08:00
infinite-persistence
093c427b83
Show content view counts on channel pages
## Issue
3587 Show content view counts on channel pages

## Notes
Limited to just "channel pages" for now as specified in the ticket.

Can be enabled for all claim previews, as long as there's an efficient spot to run the batch fetching. Either make `fetchViewCount` prop default to true, or add the parameter in places that need it.
2021-09-09 18:31:48 +08:00
infinite-persistence
89a0d5e597
Reorganize; no functional change 2021-09-09 17:09:28 +08:00
Thomas Zarebczan
c6ad44d1e5
Consider more live streams (#6974)
and order by release time always

f
2021-08-27 10:57:54 -04:00
Thomas Zarebczan
4586fbc34b
Revert "Fix stream type for livestreams (#6967)" (#6972)
This reverts commit ee609c654f.
2021-08-26 11:50:57 -04:00
Thomas Zarebczan
ee609c654f
Fix stream type for livestreams (#6967)
* Fix stream type for livestreams

Was picking up collections 

+ other tweaks

* Update search.js
2021-08-26 11:04:24 -04:00
zeppi
26b1c901c8 no limit on stream types for following 2021-08-02 16:14:33 -04:00
zeppi
ed0387d94a pinning 2021-07-22 23:24:55 -04:00
jessopb
5a04d0fea0
some recon (#6532) 2021-07-18 13:06:52 -04:00
zeppi
dfc013d423 more recon 2021-07-18 11:27:05 -04:00
zeppi
b2b88b466e fix colon handling 2021-07-15 17:48:02 -04:00
zeppi
0bb9c520ff fix livestream display 2021-07-08 15:08:53 -04:00
jessopb
be879ae90a
Recon 7 6 b (#6418)
* changes

* clean

* showNoSourceClaims
2021-07-07 14:21:11 -04:00
infinite-persistence
6043b6101b ClaimTilesDiscover: pause visual update until new results are fetched
## Issue
GUI fix for 5979 `claim search runs twice sometimes and "refreshes" view`

The search query might encounter minor alterations after rendered (e.g. for the case of 5979, the `moderation.Blocklist` data came late). The code currently resets the result to 0 before initiating `claim_search`, so we see the GUI blink.

## Idea
There is a possibility that the query-change does not alter the final results in the end. Instead of reseting to the results to zero, hold on to the previous results until the fetch is done.

## Known issue
The tiles no longer blink if there is no change, but the "LIVE" indicator still does. I didn't want to propagate the info too deep, so leaving as is for now. It can be considered a feature ("blinking LIVE indicator" :))

## Results
- No blinking if results stay the same.
- Minimal tile-shifting if new ones are added or removed.
- In the current Odysee homepage, reduced React commits from 88 to 76 (save some CPU cycles).
2021-05-27 13:50:59 -04:00
infinite-persistence
c85d7f12c8
Livestream-only query cleanup. (#6036)
This completes the change in c24c016e, covering ClaimListDiscover as well.
2021-05-15 01:52:24 -04:00
zeppi
c24c016eb7 livestream fixes from odysee 2021-05-04 23:00:43 -04:00
Thomas Zarebczan
09ee081218 remove stream_types from live
and fix homepage too
2021-04-30 17:55:33 -04:00
Sean Yesmunt
b9a7f9673d remove has_source param from livestream claim_search on homepage 2021-04-30 16:53:17 -04:00
infinite-persistence
742110c81c Homepage|Discover: hide livestreams, then append active livestreams at the top.
This essentially hides inactive livestreams from the list.
2021-04-30 14:11:42 -04:00
infinite-persistence
8919cba43c Refactor livestream sorting into 'prioritizeActiveLivestreams' 2021-04-30 14:11:42 -04:00
infinite-persistence
6ef42cd121 Run 'claim_search' with 'has_no_source' to bring up buried active livestreams.
Scenarios where active livestreams will not appear:
- creation date is way back.
- homepage section options excludes livestreams.

Make an explicit `claim_search` but with `has_no_source` if the client wants `liveLivestreamsFirst`.

If there are lots of channels with livestreams, there's a possibility that the final list will be larger than what was requested. We could trim it to be within the original `options.pageSize` range, but I left that out for now.
2021-04-30 14:11:42 -04:00
infinite-persistence
41380d20df Homepage: move "LIVE" livestreams to the front. 2021-04-30 14:11:42 -04:00
Sean Yesmunt
7531a2c21a add back blocked/muted channels to homepage claim_search 2021-04-24 01:00:02 -04:00
Sean Yesmunt
6d89f0df7e hyperchats 2021-04-23 16:20:17 -04:00
Sean Yesmunt
27b1101d12 don't pass streamTypes to homepage following section
so the following section shows all file types
2021-04-19 15:55:11 -04:00
Thomas Zarebczan
9689ef72a1
Odysee audio support (#5897) 2021-04-15 22:52:41 -04:00
zeppi
f091da3c54 use new isLivestream (placeholder stream) selector 2021-03-25 20:14:24 -04:00
Sean Yesmunt
e5fc28821a add ENABLE_NO_SOURCE_CLAIMS to config
this sets has_source:true if the variable is true to non-odysee apps won't be shown livestream claims
2021-03-22 15:30:15 -07:00
Sean Yesmunt
a8cc4cefb0 remove has_source param until wallet server bug is fixed 2021-03-19 11:57:10 -04:00
Sean Yesmunt
e967f2e1ad add ENABLE_NO_SOURCE_CLAIMS to config
this sets has_source:true if the variable is true to non-odysee apps won't be shown livestream claims
2021-03-18 12:07:27 -04:00
Sean Yesmunt
88c5552352 don't pass blocked/muted to claim_search on the homepage to prevent double claim_search calls
if blockedList takes a while to return, the app would call claim_search once without the blocked list, then again with the block list. just hide them in the ui
2021-03-05 16:51:38 -05:00
Sean Yesmunt
ea74a66dbd
New moderation tools: block & mute (#5572)
* initial support for block/mute

* hide blocked + muted content everywhere

* add info message for blocked/muted characteristics

* sort blocked list by most recent block first

* add 'blocked' message on channel page for channels that you have blocked

* cleanup

* delete unused files

* always pass mute/block list to claim_search on homepage

* PR cleanup
2021-03-03 13:50:16 -05:00
Sean Yesmunt
489a4855e9 alignment with odysee branch 2020-10-05 13:56:43 -04:00
Sean Yesmunt
dd5636c2b3 prevent multiple claim_search's happening on the homepage 2020-09-29 17:12:32 -04:00
Jeremy Kauffman
9c6b7bd280 add languages parameter to ClaimTilesDiscover 2020-09-11 14:21:02 -04:00
Sean Yesmunt
84084a7c41 use limit_claims_per_channel on homepage 2020-08-20 11:31:35 -04:00