Discover URI encoding/decoding, now iris:discover:ENCODED,ENCODED

This commit is contained in:
James Barnsley
2021-04-23 22:03:54 +12:00
parent f41646b4da
commit d181856f43
10 changed files with 62 additions and 71 deletions

View File

@ -357,7 +357,7 @@ export class App extends React.Component {
<Route
exact
path="/discover/recommendations/:seeds?"
path="/discover/recommendations/:uri?"
component={DiscoverRecommendations}
/>
<Route

View File

@ -29,7 +29,7 @@ import * as mopidyActions from '../services/mopidy/actions';
import * as lastfmActions from '../services/lastfm/actions';
import * as spotifyActions from '../services/spotify/actions';
import { I18n, i18n } from '../locale';
import { collate } from '../util/format';
import { collate, encodeUri } from '../util/format';
class ContextMenu extends React.Component {
constructor(props) {
@ -540,7 +540,9 @@ class ContextMenu extends React.Component {
} = this.props;
hideContextMenu();
push(`/discover/recommendations/${arrayOf('uri', items).join(',')}`);
const uris = arrayOf('uri', items);
const discoverUri = encodeUri(`iris:discover:${uris.map((uri) => encodeUri(uri)).join(',')}`);
push(`/discover/recommendations/${discoverUri}`);
}
goToArtist = () => {

View File

@ -26,7 +26,7 @@ import {
import { arrayOf, indexToArray } from '../../util/arrays';
import { i18n, I18n } from '../../locale';
import Button from '../../components/Button';
import { decodeUri } from '../../util/format';
import { decodeUri, encodeUri } from '../../util/format';
class Discover extends React.Component {
constructor(props) {
@ -160,14 +160,14 @@ class Discover extends React.Component {
},
match: {
params: {
seeds,
uri,
},
},
} = this.props;
setWindowTitle(i18n('discover.recommendations.title'));
if (seeds) {
if (uri) {
this.handleURLSeeds();
}
}
@ -175,18 +175,18 @@ class Discover extends React.Component {
componentDidUpdate = ({
match: {
params: {
seeds: prevSeeds,
uri: prevUri,
},
},
}) => {
const {
match: {
params: {
seeds,
uri,
},
},
} = this.props;
if (prevSeeds !== seeds) this.handleURLSeeds();
if (prevUri !== uri) this.handleURLSeeds();
}
handleContextMenu = (e) => {
@ -218,14 +218,16 @@ class Discover extends React.Component {
},
match: {
params: {
seeds: seedsProp,
uri: uriProp,
},
},
} = this.props;
const uri = decodeUri(uriProp);
if (!uri) return;
const seeds = seedsProp.split(',').map((uri) => decodeUri(uri));
const seeds = uri.replace('iris:discover:', '').split(',').map((seed) => decodeUri(seed));
console.debug({ uri, uriProp, seeds })
loadUris(seeds);
this.setState(
{ seeds },
() => this.getRecommendations(),
@ -233,22 +235,8 @@ class Discover extends React.Component {
}
uri = () => {
const {
seeds,
} = this.state;
let uri = 'iris:discover';
if (seeds) {
uri += ':';
for (let i = 0; i < seeds.length; i++) {
if (i > 0) {
uri += ',';
}
uri += seeds[i].split(':').join('_');
}
}
return uri;
const { seeds } = this.state;
return `iris:discover${seeds ? `:${seeds.map((s) => encodeUri(s)).join(',')}` : ''}`;
}
getRecommendations = () => {
@ -533,8 +521,8 @@ class Discover extends React.Component {
return (
<div className="view discover-view preserve-3d">
{theme === 'dark' && <Parallax image="/iris/assets/backgrounds/discover.jpg" />}
<div className="intro preserve-3d">
{theme === 'dark' && <Parallax image="/iris/assets/backgrounds/discover.jpg" />}
<div className="intro__liner">
<h1><I18n path="discover.recommendations.body_title" /></h1>
<h2><I18n path="discover.recommendations.body_subtitle" /></h2>