Merge pull request #153 from lbryio/38

updates for sdk@38
This commit is contained in:
Sean Yesmunt 2019-06-09 21:38:40 -04:00 committed by GitHub
commit 157711207b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 198 additions and 169 deletions

71
dist/bundle.es.js vendored
View file

@ -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',

View file

@ -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,

View file

@ -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
View file

@ -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
View file

@ -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 & {

View file

@ -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,
}, },
}); });
} });
);
}; };
} }

View file

@ -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/)) {

View file

@ -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',

View file

@ -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;
} }

View file

@ -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(' ');

View file

@ -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()');
} }