Fix inability to unblock and unsubscribe an abandoned claim (#405)
This commit is contained in:
commit
dd96d1222d
3 changed files with 35 additions and 4 deletions
|
@ -7,6 +7,7 @@ import { lazyImport } from 'util/lazyImport';
|
|||
import classnames from 'classnames';
|
||||
import { isURIValid } from 'util/lbryURI';
|
||||
import * as COLLECTIONS_CONSTS from 'constants/collections';
|
||||
import { isChannelClaim } from 'util/claim';
|
||||
import { formatLbryUrlForWeb } from 'util/url';
|
||||
import { formatClaimPreviewTitle } from 'util/formatAriaLabel';
|
||||
import FileThumbnail from 'component/fileThumbnail';
|
||||
|
@ -180,7 +181,7 @@ const ClaimPreview = forwardRef<any, {}>((props: Props, ref: any) => {
|
|||
claim.value.stream_type &&
|
||||
// $FlowFixMe
|
||||
(claim.value.stream_type === 'audio' || claim.value.stream_type === 'video');
|
||||
const isChannelUri = claim ? claim.value_type === 'channel' : false;
|
||||
const isChannelUri = isChannelClaim(claim, uri);
|
||||
const signingChannel = claim && claim.signing_channel;
|
||||
const repostedChannelUri =
|
||||
claim && claim.repost_channel_url && claim.value_type === 'channel'
|
||||
|
|
|
@ -9,7 +9,7 @@ import {
|
|||
selectClaimForUri,
|
||||
} from 'redux/selectors/claims';
|
||||
import { swapKeyAndValue } from 'util/swap-json';
|
||||
import { getChannelFromClaim } from 'util/claim';
|
||||
import { getChannelFromClaim, isChannelClaim } from 'util/claim';
|
||||
|
||||
// Returns the entire subscriptions state
|
||||
const selectState = (state) => state.subscriptions || {};
|
||||
|
@ -114,14 +114,21 @@ export const makeSelectChannelInSubscriptions = (uri) =>
|
|||
createSelector(selectSubscriptions, (subscriptions) => subscriptions.some((sub) => sub.uri === uri));
|
||||
|
||||
export const selectIsSubscribedForUri = createCachedSelector(
|
||||
(state, uri) => uri,
|
||||
selectClaimForUri,
|
||||
selectSubscriptions,
|
||||
(claim, subscriptions) => {
|
||||
(uri, claim, subscriptions) => {
|
||||
const channelClaim = getChannelFromClaim(claim);
|
||||
if (channelClaim) {
|
||||
const uri = channelClaim.permanent_url;
|
||||
const permanentUrl = channelClaim.permanent_url;
|
||||
return subscriptions.some((sub) => isURIEqual(sub.uri, permanentUrl));
|
||||
}
|
||||
|
||||
// If it failed, it could be an abandoned channel. Try parseURI:
|
||||
if (isChannelClaim(claim, uri)) {
|
||||
return subscriptions.some((sub) => isURIEqual(sub.uri, uri));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
)((state, uri) => String(uri));
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// @flow
|
||||
import { MATURE_TAGS } from 'constants/tags';
|
||||
import { parseURI } from 'util/lbryURI';
|
||||
|
||||
const matureTagMap = MATURE_TAGS.reduce((acc, tag) => ({ ...acc, [tag]: true }), {});
|
||||
|
||||
|
@ -66,6 +67,28 @@ export function filterClaims(claims: Array<Claim>, query: ?string): Array<Claim>
|
|||
return claims;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the claim is a channel.
|
||||
*
|
||||
* @param claim
|
||||
* @param uri An abandoned claim will be null, so provide the `uri` as a fallback to parse.
|
||||
*/
|
||||
export function isChannelClaim(claim: ?Claim, uri?: string) {
|
||||
// 1. parseURI can't resolve a repost's channel, so a `claim` will be needed.
|
||||
// 2. parseURI is still needed to cover the case of abandoned claims.
|
||||
if (claim) {
|
||||
return claim.value_type === 'channel';
|
||||
} else if (uri) {
|
||||
try {
|
||||
return Boolean(parseURI(uri).isChannel);
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export function getChannelIdFromClaim(claim: ?Claim) {
|
||||
if (claim) {
|
||||
if (claim.value_type === 'channel') {
|
||||
|
|
Loading…
Reference in a new issue