diff --git a/src/js/components/ContextMenu.js b/src/js/components/ContextMenu.js index b00ff20b..1c14eb23 100755 --- a/src/js/components/ContextMenu.js +++ b/src/js/components/ContextMenu.js @@ -1340,7 +1340,7 @@ class ContextMenu extends React.Component { } } -const librarySelector = makeLibrarySelector('playlists'); +const librarySelector = makeLibrarySelector('playlists', false); const providersSelector = makeProvidersSelector('playlists'); const processProgressSelector = makeProcessProgressSelector(processKeys); diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index afb868db..1dde1d6b 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -29,6 +29,7 @@ import { sortItems, indexToArray, } from '../../util/arrays'; +import { getProvider } from '../../util/selectors'; const mopidyActions = require('./actions.js'); const coreActions = require('../core/actions.js'); @@ -1357,7 +1358,10 @@ const MopidyMiddleware = (function () { store.dispatch(uiActions.createNotification({ content: i18n('actions.created', { name: i18n('playlist.title') }), })); - store.dispatch(coreActions.addToLibrary('mopidy:library:playlists', playlist)); + store.dispatch(coreActions.addToLibrary( + getProvider('playlists', 'm3u:')?.uri, + playlist, + )); }); break; diff --git a/src/js/services/spotify/actions.js b/src/js/services/spotify/actions.js index 699d6b0e..777f0cc5 100755 --- a/src/js/services/spotify/actions.js +++ b/src/js/services/spotify/actions.js @@ -22,7 +22,7 @@ import { injectSortId, } from '../../util/format'; import URILink from '../../components/URILink'; -import { getItem } from '../../util/selectors'; +import { getItem, providers, getProvider } from '../../util/selectors'; const coreActions = require('../core/actions'); const uiActions = require('../ui/actions'); @@ -1171,10 +1171,10 @@ export function createPlaylist(name, description, is_public, is_collaborative) { tracks: [], })); - dispatch({ - type: 'LIBRARY_PLAYLISTS_LOADED', - uris: [response.uri], - }); + dispatch(coreActions.addToLibrary( + getProvider('playlists', 'spotify:')?.uri, + response, + )); dispatch(uiActions.createNotification({ content: 'Created playlist' })); }, diff --git a/src/js/util/selectors.js b/src/js/util/selectors.js index 9ea5c246..f688f4a0 100755 --- a/src/js/util/selectors.js +++ b/src/js/util/selectors.js @@ -52,10 +52,10 @@ const queueHistorySelector = createSelector( ); const getLibrarySource = (state, name) => state.ui[`library_${name}_source`] || 'all'; -const makeLibrarySelector = (name) => createSelector( +const makeLibrarySelector = (name, filtered = true) => createSelector( [getLibraries, getItems, getLibrarySource], (libraries, items, source) => { - const selectedLibraries = source === 'all' + const selectedLibraries = !filtered || source === 'all' ? indexToArray(libraries).filter((l) => l.type === name) : indexToArray(libraries, [source]); @@ -183,6 +183,7 @@ const providers = { }, ], }; +const getProvider = (type, scheme) => providers[type]?.find((p) => p.scheme === scheme); const getUriSchemes = (state) => state.mopidy.uri_schemes || []; const makeProvidersSelector = (context) => createSelector( [getUriSchemes], @@ -206,4 +207,5 @@ export { makeProcessProgressSelector, queueHistorySelector, makeProvidersSelector, + getProvider, }; diff --git a/src/js/views/modals/AddToPlaylist.js b/src/js/views/modals/AddToPlaylist.js index 02b54a76..112b97f2 100755 --- a/src/js/views/modals/AddToPlaylist.js +++ b/src/js/views/modals/AddToPlaylist.js @@ -120,7 +120,7 @@ class AddToPlaylist extends React.Component { } } -const librarySelector = makeLibrarySelector('playlists'); +const librarySelector = makeLibrarySelector('playlists', false); const processProgressSelector = makeProcessProgressSelector(processKeys); const providersSelector = makeProvidersSelector('playlists'); const mapStateToProps = (state, ownProps) => {