commit
157711207b
11 changed files with 198 additions and 169 deletions
71
dist/bundle.es.js
vendored
71
dist/bundle.es.js
vendored
|
@ -1278,7 +1278,7 @@ const makeSelectMetadataItemForUri = (uri, key) => reselect.createSelector(makeS
|
||||||
const makeSelectTitleForUri = uri => reselect.createSelector(makeSelectMetadataForUri(uri), metadata => metadata && metadata.title);
|
const makeSelectTitleForUri = uri => reselect.createSelector(makeSelectMetadataForUri(uri), metadata => metadata && metadata.title);
|
||||||
|
|
||||||
const makeSelectDateForUri = uri => reselect.createSelector(makeSelectClaimForUri(uri), claim => {
|
const makeSelectDateForUri = uri => reselect.createSelector(makeSelectClaimForUri(uri), claim => {
|
||||||
const timestamp = claim && claim.timestamp ? claim.timestamp * 1000 : undefined;
|
const timestamp = claim && claim.value && (claim.value.release_time ? claim.value.release_time * 1000 : claim.meta.creation_timestamp * 1000);
|
||||||
if (!timestamp) {
|
if (!timestamp) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
@ -1977,20 +1977,33 @@ function doResolveUris(uris, returnCachedClaims = false) {
|
||||||
lbryProxy.resolve({ urls: urisToResolve }).then(result => {
|
lbryProxy.resolve({ urls: urisToResolve }).then(result => {
|
||||||
Object.entries(result).forEach(([uri, uriResolveInfo]) => {
|
Object.entries(result).forEach(([uri, uriResolveInfo]) => {
|
||||||
const fallbackResolveInfo = {
|
const fallbackResolveInfo = {
|
||||||
claim: null,
|
stream: null,
|
||||||
claimsInChannel: null,
|
claimsInChannel: null,
|
||||||
certificate: null
|
channel: null
|
||||||
};
|
};
|
||||||
|
|
||||||
// Flow has terrible Object.entries support
|
// Flow has terrible Object.entries support
|
||||||
// https://github.com/facebook/flow/issues/2221
|
// https://github.com/facebook/flow/issues/2221
|
||||||
// $FlowFixMe
|
if (uriResolveInfo) {
|
||||||
if (uriResolveInfo.error) {
|
if (uriResolveInfo.error) {
|
||||||
resolveInfo[uri] = _extends$3({}, fallbackResolveInfo);
|
resolveInfo[uri] = _extends$3({}, fallbackResolveInfo);
|
||||||
} else {
|
} else {
|
||||||
|
let result = {};
|
||||||
|
if (uriResolveInfo.value_type === 'channel') {
|
||||||
|
result.channel = uriResolveInfo;
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
const { claim, certificate, claims_in_channel: claimsInChannel } = uriResolveInfo;
|
result.claimsInChannel = uriResolveInfo.meta.claims_in_channel;
|
||||||
resolveInfo[uri] = { claim, certificate, claimsInChannel };
|
} else {
|
||||||
|
result.stream = uriResolveInfo;
|
||||||
|
if (uriResolveInfo.signing_channel) {
|
||||||
|
result.channel = uriResolveInfo.signing_channel;
|
||||||
|
result.claimsInChannel = uriResolveInfo.signing_channel.meta.claims_in_channel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// $FlowFixMe
|
||||||
|
resolveInfo[uri] = result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2104,7 +2117,7 @@ function doFetchClaimsByChannel(uri, page = 1) {
|
||||||
data: { uri, page }
|
data: { uri, page }
|
||||||
});
|
});
|
||||||
|
|
||||||
lbryProxy.claim_search({ channel_name: uri, page: page || 1, winning: true }).then(result => {
|
lbryProxy.claim_search({ channel: uri, is_controlling: true, page: page || 1, order_by: ['release_time'] }).then(result => {
|
||||||
const { items: claimsInChannel, page: returnedPage } = result;
|
const { items: claimsInChannel, page: returnedPage } = result;
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
|
@ -2270,11 +2283,13 @@ const selectSearchDownloadUris = query => reselect.createSelector(selectFileInfo
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (title) {
|
||||||
const titleParts = title.toLowerCase().split(' ');
|
const titleParts = title.toLowerCase().split(' ');
|
||||||
if (arrayContainsQueryPart(titleParts)) {
|
if (arrayContainsQueryPart(titleParts)) {
|
||||||
downloadResultsFromQuery.push(fileInfo);
|
downloadResultsFromQuery.push(fileInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (author) {
|
if (author) {
|
||||||
const authorParts = author.toLowerCase().split(' ');
|
const authorParts = author.toLowerCase().split(' ');
|
||||||
|
@ -2706,34 +2721,36 @@ const defaultState = {
|
||||||
};
|
};
|
||||||
|
|
||||||
reducers[RESOLVE_URIS_COMPLETED] = (state, action) => {
|
reducers[RESOLVE_URIS_COMPLETED] = (state, action) => {
|
||||||
const { resolveInfo } = action.data;
|
const {
|
||||||
|
resolveInfo
|
||||||
|
} = action.data;
|
||||||
const byUri = Object.assign({}, state.claimsByUri);
|
const byUri = Object.assign({}, state.claimsByUri);
|
||||||
const byId = Object.assign({}, state.byId);
|
const byId = Object.assign({}, state.byId);
|
||||||
const channelClaimCounts = Object.assign({}, state.channelClaimCounts);
|
const channelClaimCounts = Object.assign({}, state.channelClaimCounts);
|
||||||
|
|
||||||
Object.entries(resolveInfo).forEach(([uri, resolveResponse]) => {
|
Object.entries(resolveInfo).forEach(([uri, resolveResponse]) => {
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
if (resolveResponse.certificate && !Number.isNaN(resolveResponse.claimsInChannel)) {
|
if (resolveResponse.claimsInChannel) {
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
channelClaimCounts[uri] = resolveResponse.claimsInChannel;
|
channelClaimCounts[uri] = resolveResponse.claimsInChannel;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
Object.entries(resolveInfo).forEach(([uri, { certificate, claim }]) => {
|
Object.entries(resolveInfo).forEach(([uri, { channel, stream }]) => {
|
||||||
if (claim && !certificate) {
|
if (stream && !channel) {
|
||||||
byId[claim.claim_id] = claim;
|
byId[stream.claim_id] = stream;
|
||||||
byUri[uri] = claim.claim_id;
|
byUri[uri] = stream.claim_id;
|
||||||
} else if (claim && certificate) {
|
} else if (stream && channel) {
|
||||||
byId[claim.claim_id] = claim;
|
byId[stream.claim_id] = stream;
|
||||||
byUri[uri] = claim.claim_id;
|
byUri[uri] = stream.claim_id;
|
||||||
|
|
||||||
byId[certificate.claim_id] = certificate;
|
byId[channel.claim_id] = channel;
|
||||||
const channelUri = `lbry://${certificate.name}#${certificate.claim_id}`;
|
const channelUri = channel.permanent_url;
|
||||||
byUri[channelUri] = certificate.claim_id;
|
byUri[channelUri] = channel.claim_id;
|
||||||
} else if (!claim && certificate) {
|
} else if (!stream && channel) {
|
||||||
byId[certificate.claim_id] = certificate;
|
byId[channel.claim_id] = channel;
|
||||||
byUri[uri] = certificate.claim_id;
|
byUri[uri] = channel.claim_id;
|
||||||
} else {
|
} else {
|
||||||
byUri[uri] = null;
|
byUri[uri] = null;
|
||||||
}
|
}
|
||||||
|
@ -3164,16 +3181,6 @@ reducers$2[LOADING_VIDEO_FAILED] = (state, action) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
reducers$2[FETCH_DATE] = (state, action) => {
|
|
||||||
const { time } = action.data;
|
|
||||||
if (time) {
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
publishedDate: time
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
reducers$2[SET_FILE_LIST_SORT] = (state, action) => {
|
reducers$2[SET_FILE_LIST_SORT] = (state, action) => {
|
||||||
const pageSortStates = {
|
const pageSortStates = {
|
||||||
[PUBLISHED]: 'fileListPublishedSort',
|
[PUBLISHED]: 'fileListPublishedSort',
|
||||||
|
|
48
dist/flow-typed/Claim.js
vendored
48
dist/flow-typed/Claim.js
vendored
|
@ -1,49 +1,52 @@
|
||||||
// @flow
|
// @flow
|
||||||
|
|
||||||
declare type ClaimWithPossibleCertificate = {
|
declare type Claim = StreamClaim | ChannelClaim;
|
||||||
certificate?: ChannelClaim,
|
|
||||||
claim: StreamClaim,
|
|
||||||
};
|
|
||||||
|
|
||||||
declare type ChannelClaim = GenericClaim & {
|
declare type ChannelClaim = GenericClaim & {
|
||||||
|
is_channel_signature_valid?: boolean, // we may have signed channels in the future, fixes some flow issues for now.
|
||||||
|
signing_channel?: ChannelMetadata,
|
||||||
value: ChannelMetadata,
|
value: ChannelMetadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type StreamClaim = GenericClaim & {
|
declare type StreamClaim = GenericClaim & {
|
||||||
is_channel_signature_valid?: boolean,
|
is_channel_signature_valid?: boolean,
|
||||||
signing_channel?: {
|
signing_channel?: ChannelMetadata,
|
||||||
claim_id: string,
|
|
||||||
name: string,
|
|
||||||
value: {
|
|
||||||
public_key: string,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
value: StreamMetadata,
|
value: StreamMetadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type GenericClaim = {
|
declare type GenericClaim = {
|
||||||
address: string, // address associated with tx
|
address: string, // address associated with tx
|
||||||
amount: number, // bid amount at time of tx
|
amount: string, // bid amount at time of tx
|
||||||
|
canonical_url: string, // URL with short id, includes channel with short id
|
||||||
claim_id: string, // unique claim identifier
|
claim_id: string, // unique claim identifier
|
||||||
claim_sequence: number,
|
claim_sequence: number, // not being used currently
|
||||||
claim_op: 'create' | 'update',
|
claim_op: 'create' | 'update',
|
||||||
confirmations: number, // This isn't the most stable atm: https://github.com/lbryio/lbry/issues/2000
|
confirmations: number,
|
||||||
decoded_claim: boolean, // claim made in accordance with sdk protobuf types
|
decoded_claim: boolean, // Not available currently https://github.com/lbryio/lbry/issues/2044
|
||||||
effective_amount: number, // bid amount + supports
|
timestamp?: number, // date of last transaction
|
||||||
timestamp?: number, // date of transaction
|
|
||||||
has_signature: boolean,
|
|
||||||
height: number, // block height the tx was confirmed
|
height: number, // block height the tx was confirmed
|
||||||
hex: string, // `value` hex encoded
|
|
||||||
name: string,
|
name: string,
|
||||||
channel_name?: string,
|
|
||||||
normalized_name: string, // `name` normalized via unicode NFD spec,
|
normalized_name: string, // `name` normalized via unicode NFD spec,
|
||||||
nout: number, // index number for an output of a tx
|
nout: number, // index number for an output of a tx
|
||||||
permanent_url: string, // name + claim_id
|
permanent_url: string, // name + claim_id
|
||||||
supports: Array<{}>, // TODO: add support type once we start using it
|
short_url: string, // permanent_url with short id, no channel
|
||||||
txid: string, // unique tx id
|
txid: string, // unique tx id
|
||||||
type: 'claim' | 'update' | 'support',
|
type: 'claim' | 'update' | 'support',
|
||||||
valid_at_height?: number, // BUG: this should always exist https://github.com/lbryio/lbry/issues/1728
|
|
||||||
value_type: 'stream' | 'channel',
|
value_type: 'stream' | 'channel',
|
||||||
|
meta: {
|
||||||
|
activation_height: number,
|
||||||
|
claims_in_channel?: number,
|
||||||
|
creation_height: number,
|
||||||
|
creation_timestamp: number,
|
||||||
|
effective_amount: string,
|
||||||
|
expiration_height: number,
|
||||||
|
is_controlling: boolean,
|
||||||
|
support_amount: string,
|
||||||
|
trending_global: number,
|
||||||
|
trending_group: number,
|
||||||
|
trending_local: number,
|
||||||
|
trending_mixed: number,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type GenericMetadata = {
|
declare type GenericMetadata = {
|
||||||
|
@ -59,6 +62,7 @@ declare type GenericMetadata = {
|
||||||
|
|
||||||
declare type ChannelMetadata = GenericMetadata & {
|
declare type ChannelMetadata = GenericMetadata & {
|
||||||
public_key: string,
|
public_key: string,
|
||||||
|
public_key_id: string,
|
||||||
cover_url?: string,
|
cover_url?: string,
|
||||||
email?: string,
|
email?: string,
|
||||||
website_url?: string,
|
website_url?: string,
|
||||||
|
|
13
dist/flow-typed/Lbry.js
vendored
13
dist/flow-typed/Lbry.js
vendored
|
@ -66,8 +66,8 @@ declare type VersionResponse = {
|
||||||
declare type ResolveResponse = {
|
declare type ResolveResponse = {
|
||||||
// Keys are the url(s) passed to resolve
|
// Keys are the url(s) passed to resolve
|
||||||
[string]:
|
[string]:
|
||||||
| { error: {}, certificate: ChannelClaim, claims_in_channel: number }
|
| Claim
|
||||||
| { error?: {}, claim: StreamClaim, certificate?: ChannelClaim },
|
| { error?: {} },
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type GetResponse = FileListItem;
|
declare type GetResponse = FileListItem;
|
||||||
|
@ -86,18 +86,19 @@ declare type GenericTxResponse = {
|
||||||
declare type PublishResponse = GenericTxResponse & {
|
declare type PublishResponse = GenericTxResponse & {
|
||||||
// Only first value in outputs is a claim
|
// Only first value in outputs is a claim
|
||||||
// That's the only value we care about
|
// That's the only value we care about
|
||||||
outputs: Array<StreamClaim>,
|
outputs: Array<Claim>,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type ClaimSearchResponse = {
|
declare type ClaimSearchResponse = {
|
||||||
items: Array<StreamClaim>,
|
items: Array<Claim>,
|
||||||
page: number,
|
page: number,
|
||||||
page_size: number,
|
page_size: number,
|
||||||
page_number: number,
|
total_items: number,
|
||||||
|
total_pages: number,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type ClaimListResponse = {
|
declare type ClaimListResponse = {
|
||||||
claims: Array<ChannelClaim | StreamClaim>,
|
claims: Array<ChannelClaim | Claim>,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type ChannelCreateResponse = GenericTxResponse & {
|
declare type ChannelCreateResponse = GenericTxResponse & {
|
||||||
|
|
48
flow-typed/Claim.js
vendored
48
flow-typed/Claim.js
vendored
|
@ -1,49 +1,52 @@
|
||||||
// @flow
|
// @flow
|
||||||
|
|
||||||
declare type ClaimWithPossibleCertificate = {
|
declare type Claim = StreamClaim | ChannelClaim;
|
||||||
certificate?: ChannelClaim,
|
|
||||||
claim: StreamClaim,
|
|
||||||
};
|
|
||||||
|
|
||||||
declare type ChannelClaim = GenericClaim & {
|
declare type ChannelClaim = GenericClaim & {
|
||||||
|
is_channel_signature_valid?: boolean, // we may have signed channels in the future, fixes some flow issues for now.
|
||||||
|
signing_channel?: ChannelClaim,
|
||||||
value: ChannelMetadata,
|
value: ChannelMetadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type StreamClaim = GenericClaim & {
|
declare type StreamClaim = GenericClaim & {
|
||||||
is_channel_signature_valid?: boolean,
|
is_channel_signature_valid?: boolean,
|
||||||
signing_channel?: {
|
signing_channel?: ChannelClaim,
|
||||||
claim_id: string,
|
|
||||||
name: string,
|
|
||||||
value: {
|
|
||||||
public_key: string,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
value: StreamMetadata,
|
value: StreamMetadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type GenericClaim = {
|
declare type GenericClaim = {
|
||||||
address: string, // address associated with tx
|
address: string, // address associated with tx
|
||||||
amount: number, // bid amount at time of tx
|
amount: string, // bid amount at time of tx
|
||||||
|
canonical_url: string, // URL with short id, includes channel with short id
|
||||||
claim_id: string, // unique claim identifier
|
claim_id: string, // unique claim identifier
|
||||||
claim_sequence: number,
|
claim_sequence: number, // not being used currently
|
||||||
claim_op: 'create' | 'update',
|
claim_op: 'create' | 'update',
|
||||||
confirmations: number, // This isn't the most stable atm: https://github.com/lbryio/lbry/issues/2000
|
confirmations: number,
|
||||||
decoded_claim: boolean, // claim made in accordance with sdk protobuf types
|
decoded_claim: boolean, // Not available currently https://github.com/lbryio/lbry/issues/2044
|
||||||
effective_amount: number, // bid amount + supports
|
timestamp?: number, // date of last transaction
|
||||||
timestamp?: number, // date of transaction
|
|
||||||
has_signature: boolean,
|
|
||||||
height: number, // block height the tx was confirmed
|
height: number, // block height the tx was confirmed
|
||||||
hex: string, // `value` hex encoded
|
|
||||||
name: string,
|
name: string,
|
||||||
channel_name?: string,
|
|
||||||
normalized_name: string, // `name` normalized via unicode NFD spec,
|
normalized_name: string, // `name` normalized via unicode NFD spec,
|
||||||
nout: number, // index number for an output of a tx
|
nout: number, // index number for an output of a tx
|
||||||
permanent_url: string, // name + claim_id
|
permanent_url: string, // name + claim_id
|
||||||
supports: Array<{}>, // TODO: add support type once we start using it
|
short_url: string, // permanent_url with short id, no channel
|
||||||
txid: string, // unique tx id
|
txid: string, // unique tx id
|
||||||
type: 'claim' | 'update' | 'support',
|
type: 'claim' | 'update' | 'support',
|
||||||
valid_at_height?: number, // BUG: this should always exist https://github.com/lbryio/lbry/issues/1728
|
|
||||||
value_type: 'stream' | 'channel',
|
value_type: 'stream' | 'channel',
|
||||||
|
meta: {
|
||||||
|
activation_height: number,
|
||||||
|
claims_in_channel?: number,
|
||||||
|
creation_height: number,
|
||||||
|
creation_timestamp: number,
|
||||||
|
effective_amount: string,
|
||||||
|
expiration_height: number,
|
||||||
|
is_controlling: boolean,
|
||||||
|
support_amount: string,
|
||||||
|
trending_global: number,
|
||||||
|
trending_group: number,
|
||||||
|
trending_local: number,
|
||||||
|
trending_mixed: number,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type GenericMetadata = {
|
declare type GenericMetadata = {
|
||||||
|
@ -59,6 +62,7 @@ declare type GenericMetadata = {
|
||||||
|
|
||||||
declare type ChannelMetadata = GenericMetadata & {
|
declare type ChannelMetadata = GenericMetadata & {
|
||||||
public_key: string,
|
public_key: string,
|
||||||
|
public_key_id: string,
|
||||||
cover_url?: string,
|
cover_url?: string,
|
||||||
email?: string,
|
email?: string,
|
||||||
website_url?: string,
|
website_url?: string,
|
||||||
|
|
13
flow-typed/Lbry.js
vendored
13
flow-typed/Lbry.js
vendored
|
@ -66,8 +66,8 @@ declare type VersionResponse = {
|
||||||
declare type ResolveResponse = {
|
declare type ResolveResponse = {
|
||||||
// Keys are the url(s) passed to resolve
|
// Keys are the url(s) passed to resolve
|
||||||
[string]:
|
[string]:
|
||||||
| { error: {}, certificate: ChannelClaim, claims_in_channel: number }
|
| Claim
|
||||||
| { error?: {}, claim: StreamClaim, certificate?: ChannelClaim },
|
| { error?: {} },
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type GetResponse = FileListItem;
|
declare type GetResponse = FileListItem;
|
||||||
|
@ -86,18 +86,19 @@ declare type GenericTxResponse = {
|
||||||
declare type PublishResponse = GenericTxResponse & {
|
declare type PublishResponse = GenericTxResponse & {
|
||||||
// Only first value in outputs is a claim
|
// Only first value in outputs is a claim
|
||||||
// That's the only value we care about
|
// That's the only value we care about
|
||||||
outputs: Array<StreamClaim>,
|
outputs: Array<Claim>,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type ClaimSearchResponse = {
|
declare type ClaimSearchResponse = {
|
||||||
items: Array<StreamClaim>,
|
items: Array<Claim>,
|
||||||
page: number,
|
page: number,
|
||||||
page_size: number,
|
page_size: number,
|
||||||
page_number: number,
|
total_items: number,
|
||||||
|
total_pages: number,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type ClaimListResponse = {
|
declare type ClaimListResponse = {
|
||||||
claims: Array<ChannelClaim | StreamClaim>,
|
claims: Array<ChannelClaim | Claim>,
|
||||||
};
|
};
|
||||||
|
|
||||||
declare type ChannelCreateResponse = GenericTxResponse & {
|
declare type ChannelCreateResponse = GenericTxResponse & {
|
||||||
|
|
|
@ -34,8 +34,8 @@ export function doResolveUris(uris: Array<string>, returnCachedClaims: boolean =
|
||||||
|
|
||||||
const resolveInfo: {
|
const resolveInfo: {
|
||||||
[string]: {
|
[string]: {
|
||||||
claim: ?StreamClaim,
|
stream: ?StreamClaim,
|
||||||
certificate: ?ChannelClaim,
|
channel: ?ChannelClaim,
|
||||||
claimsInChannel: ?number,
|
claimsInChannel: ?number,
|
||||||
},
|
},
|
||||||
} = {};
|
} = {};
|
||||||
|
@ -43,20 +43,34 @@ export function doResolveUris(uris: Array<string>, returnCachedClaims: boolean =
|
||||||
Lbry.resolve({ urls: urisToResolve }).then((result: ResolveResponse) => {
|
Lbry.resolve({ urls: urisToResolve }).then((result: ResolveResponse) => {
|
||||||
Object.entries(result).forEach(([uri, uriResolveInfo]) => {
|
Object.entries(result).forEach(([uri, uriResolveInfo]) => {
|
||||||
const fallbackResolveInfo = {
|
const fallbackResolveInfo = {
|
||||||
claim: null,
|
stream: null,
|
||||||
claimsInChannel: null,
|
claimsInChannel: null,
|
||||||
certificate: null,
|
channel: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Flow has terrible Object.entries support
|
// Flow has terrible Object.entries support
|
||||||
// https://github.com/facebook/flow/issues/2221
|
// https://github.com/facebook/flow/issues/2221
|
||||||
// $FlowFixMe
|
if (uriResolveInfo) {
|
||||||
if (uriResolveInfo.error) {
|
if (uriResolveInfo.error) {
|
||||||
resolveInfo[uri] = { ...fallbackResolveInfo };
|
resolveInfo[uri] = { ...fallbackResolveInfo };
|
||||||
} else {
|
} else {
|
||||||
|
let result = {};
|
||||||
|
if (uriResolveInfo.value_type === 'channel') {
|
||||||
|
result.channel = uriResolveInfo;
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
const { claim, certificate, claims_in_channel: claimsInChannel } = uriResolveInfo;
|
result.claimsInChannel = uriResolveInfo.meta.claims_in_channel;
|
||||||
resolveInfo[uri] = { claim, certificate, claimsInChannel };
|
} else {
|
||||||
|
result.stream = uriResolveInfo;
|
||||||
|
if (uriResolveInfo.signing_channel) {
|
||||||
|
result.channel = uriResolveInfo.signing_channel;
|
||||||
|
result.claimsInChannel =
|
||||||
|
(uriResolveInfo.meta && uriResolveInfo.meta.claims_in_channel) || 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// $FlowFixMe
|
||||||
|
resolveInfo[uri] = result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -94,7 +108,7 @@ export function doAbandonClaim(txid: string, nout: number) {
|
||||||
|
|
||||||
return (dispatch: Dispatch, getState: GetState) => {
|
return (dispatch: Dispatch, getState: GetState) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const myClaims: Array<ChannelClaim | StreamClaim> = selectMyClaimsRaw(state);
|
const myClaims: Array<Claim> = selectMyClaimsRaw(state);
|
||||||
const mySupports: { [string]: Support } = selectSupportsByOutpoint(state);
|
const mySupports: { [string]: Support } = selectSupportsByOutpoint(state);
|
||||||
|
|
||||||
// A user could be trying to abandon a support or one of their claims
|
// A user could be trying to abandon a support or one of their claims
|
||||||
|
@ -182,8 +196,12 @@ export function doFetchClaimsByChannel(uri: string, page: number = 1) {
|
||||||
data: { uri, page },
|
data: { uri, page },
|
||||||
});
|
});
|
||||||
|
|
||||||
Lbry.claim_search({ channel_name: uri, page: page || 1, winning: true }).then(
|
Lbry.claim_search({
|
||||||
(result: ClaimSearchResponse) => {
|
channel: uri,
|
||||||
|
is_controlling: true,
|
||||||
|
page: page || 1,
|
||||||
|
order_by: ['release_time'],
|
||||||
|
}).then((result: ClaimSearchResponse) => {
|
||||||
const { items: claimsInChannel, page: returnedPage } = result;
|
const { items: claimsInChannel, page: returnedPage } = result;
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
|
@ -194,8 +212,7 @@ export function doFetchClaimsByChannel(uri: string, page: number = 1) {
|
||||||
page: returnedPage || undefined,
|
page: returnedPage || undefined,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,9 @@ import { buildURI, parseURI } from 'lbryURI';
|
||||||
type State = {
|
type State = {
|
||||||
channelClaimCounts: { [string]: number },
|
channelClaimCounts: { [string]: number },
|
||||||
claimsByUri: { [string]: string },
|
claimsByUri: { [string]: string },
|
||||||
byId: { [string]: StreamClaim | ChannelClaim },
|
byId: { [string]: Claim },
|
||||||
resolvingUris: Array<string>,
|
resolvingUris: Array<string>,
|
||||||
pendingById: { [string]: StreamClaim | ChannelClaim },
|
pendingById: { [string]: Claim },
|
||||||
myChannelClaims: Set<string>,
|
myChannelClaims: Set<string>,
|
||||||
abandoningById: { [string]: boolean },
|
abandoningById: { [string]: boolean },
|
||||||
fetchingChannelClaims: { [string]: number },
|
fetchingChannelClaims: { [string]: number },
|
||||||
|
@ -46,37 +46,38 @@ const defaultState = {
|
||||||
};
|
};
|
||||||
|
|
||||||
reducers[ACTIONS.RESOLVE_URIS_COMPLETED] = (state: State, action: any): State => {
|
reducers[ACTIONS.RESOLVE_URIS_COMPLETED] = (state: State, action: any): State => {
|
||||||
const { resolveInfo }: { [string]: ClaimWithPossibleCertificate } = action.data;
|
const {
|
||||||
|
resolveInfo,
|
||||||
|
}: {
|
||||||
|
[string]: {
|
||||||
|
stream: ?StreamClaim,
|
||||||
|
channel: ?ChannelClaim,
|
||||||
|
claimsInChannel: ?number,
|
||||||
|
},
|
||||||
|
} = action.data;
|
||||||
const byUri = Object.assign({}, state.claimsByUri);
|
const byUri = Object.assign({}, state.claimsByUri);
|
||||||
const byId = Object.assign({}, state.byId);
|
const byId = Object.assign({}, state.byId);
|
||||||
const channelClaimCounts = Object.assign({}, state.channelClaimCounts);
|
const channelClaimCounts = Object.assign({}, state.channelClaimCounts);
|
||||||
|
|
||||||
Object.entries(resolveInfo).forEach(
|
Object.entries(resolveInfo).forEach(([uri: string, resolveResponse: Claim]) => {
|
||||||
([uri: string, resolveResponse: ClaimWithPossibleCertificate]) => {
|
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
if (resolveResponse.certificate && !Number.isNaN(resolveResponse.claimsInChannel)) {
|
if (resolveResponse.claimsInChannel) {
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
channelClaimCounts[uri] = resolveResponse.claimsInChannel;
|
channelClaimCounts[uri] = resolveResponse.claimsInChannel;
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
// $FlowFixMe
|
// $FlowFixMe
|
||||||
Object.entries(resolveInfo).forEach(([uri, { certificate, claim }]) => {
|
Object.entries(resolveInfo).forEach(([uri, { channel, stream }]) => {
|
||||||
if (claim && !certificate) {
|
if (stream) {
|
||||||
byId[claim.claim_id] = claim;
|
byId[stream.claim_id] = stream;
|
||||||
byUri[uri] = claim.claim_id;
|
byUri[uri] = stream.claim_id;
|
||||||
} else if (claim && certificate) {
|
}
|
||||||
byId[claim.claim_id] = claim;
|
if (channel) {
|
||||||
byUri[uri] = claim.claim_id;
|
byId[channel.claim_id] = channel;
|
||||||
|
byUri[stream ? channel.permanent_url : uri] = channel.claim_id;
|
||||||
byId[certificate.claim_id] = certificate;
|
}
|
||||||
const channelUri = `lbry://${certificate.name}#${certificate.claim_id}`;
|
if (!stream && !channel) {
|
||||||
byUri[channelUri] = certificate.claim_id;
|
|
||||||
} else if (!claim && certificate) {
|
|
||||||
byId[certificate.claim_id] = certificate;
|
|
||||||
byUri[uri] = certificate.claim_id;
|
|
||||||
} else {
|
|
||||||
byUri[uri] = null;
|
byUri[uri] = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -95,15 +96,12 @@ reducers[ACTIONS.FETCH_CLAIM_LIST_MINE_STARTED] = (state: State): State =>
|
||||||
});
|
});
|
||||||
|
|
||||||
reducers[ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED] = (state: State, action: any): State => {
|
reducers[ACTIONS.FETCH_CLAIM_LIST_MINE_COMPLETED] = (state: State, action: any): State => {
|
||||||
const { claims }: { claims: Array<StreamClaim | ChannelClaim> } = action.data;
|
const { claims }: { claims: Array<Claim> } = action.data;
|
||||||
const byId = Object.assign({}, state.byId);
|
const byId = Object.assign({}, state.byId);
|
||||||
const byUri = Object.assign({}, state.claimsByUri);
|
const byUri = Object.assign({}, state.claimsByUri);
|
||||||
const pendingById: { [string]: StreamClaim | ChannelClaim } = Object.assign(
|
const pendingById: { [string]: Claim } = Object.assign({}, state.pendingById);
|
||||||
{},
|
|
||||||
state.pendingById
|
|
||||||
);
|
|
||||||
|
|
||||||
claims.forEach((claim: StreamClaim | ChannelClaim) => {
|
claims.forEach((claim: Claim) => {
|
||||||
const uri = buildURI({ claimName: claim.name, claimId: claim.claim_id });
|
const uri = buildURI({ claimName: claim.name, claimId: claim.claim_id });
|
||||||
|
|
||||||
if (claim.type && claim.type.match(/claim|update/)) {
|
if (claim.type && claim.type.match(/claim|update/)) {
|
||||||
|
|
|
@ -161,16 +161,6 @@ reducers[ACTIONS.LOADING_VIDEO_FAILED] = (state, action) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
reducers[ACTIONS.FETCH_DATE] = (state, action) => {
|
|
||||||
const { time } = action.data;
|
|
||||||
if (time) {
|
|
||||||
return Object.assign({}, state, {
|
|
||||||
publishedDate: time,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
reducers[ACTIONS.SET_FILE_LIST_SORT] = (state, action) => {
|
reducers[ACTIONS.SET_FILE_LIST_SORT] = (state, action) => {
|
||||||
const pageSortStates = {
|
const pageSortStates = {
|
||||||
[PAGES.PUBLISHED]: 'fileListPublishedSort',
|
[PAGES.PUBLISHED]: 'fileListPublishedSort',
|
||||||
|
|
|
@ -190,7 +190,12 @@ export const makeSelectDateForUri = (uri: string) =>
|
||||||
createSelector(
|
createSelector(
|
||||||
makeSelectClaimForUri(uri),
|
makeSelectClaimForUri(uri),
|
||||||
claim => {
|
claim => {
|
||||||
const timestamp = claim && claim.timestamp ? claim.timestamp * 1000 : undefined;
|
const timestamp =
|
||||||
|
claim &&
|
||||||
|
claim.value &&
|
||||||
|
(claim.value.release_time
|
||||||
|
? claim.value.release_time * 1000
|
||||||
|
: claim.meta.creation_timestamp * 1000);
|
||||||
if (!timestamp) {
|
if (!timestamp) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
@ -368,7 +373,7 @@ export const makeSelectClaimIsNsfw = (uri: string): boolean =>
|
||||||
// Or possibly come from users settings of what tags they want to hide
|
// Or possibly come from users settings of what tags they want to hide
|
||||||
// For now, there is just a hard coded list of tags inside `isClaimNsfw`
|
// For now, there is just a hard coded list of tags inside `isClaimNsfw`
|
||||||
// selectNaughtyTags(),
|
// selectNaughtyTags(),
|
||||||
(claim: StreamClaim) => {
|
(claim: Claim) => {
|
||||||
if (!claim) {
|
if (!claim) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,11 +164,13 @@ export const selectSearchDownloadUris = query =>
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (title) {
|
||||||
const titleParts = title.toLowerCase().split(' ');
|
const titleParts = title.toLowerCase().split(' ');
|
||||||
if (arrayContainsQueryPart(titleParts)) {
|
if (arrayContainsQueryPart(titleParts)) {
|
||||||
downloadResultsFromQuery.push(fileInfo);
|
downloadResultsFromQuery.push(fileInfo);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (author) {
|
if (author) {
|
||||||
const authorParts = author.toLowerCase().split(' ');
|
const authorParts = author.toLowerCase().split(' ');
|
||||||
|
|
|
@ -5,7 +5,7 @@ const naughtyTags = ['porn', 'nsfw', 'mature', 'xxx'].reduce(
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const isClaimNsfw = (claim: StreamClaim): boolean => {
|
export const isClaimNsfw = (claim: Claim): boolean => {
|
||||||
if (!claim) {
|
if (!claim) {
|
||||||
throw new Error('No claim passed to isClaimNsfw()');
|
throw new Error('No claim passed to isClaimNsfw()');
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue