Merge branch 'master' into develop

This commit is contained in:
James Barnsley
2022-09-04 08:25:07 +12:00
16 changed files with 43 additions and 87 deletions

1
.gitignore vendored
View File

@ -17,6 +17,7 @@ docker/mopidy.conf
docker/data/
docker/jellyfin/
docker/icecast2.xml
docker/meta_mopidy.py
docker-compose.yml
/.tox/
/__tests__/__pycache__/

View File

@ -1 +1 @@
3.64.0
3.64.1

View File

@ -2,7 +2,7 @@
exports[`<GridItem /> should handle album 1`] = `
<div
className="grid__item grid__item--album"
className="grid__item grid__item--album "
data-qa-file="GridItem"
data-qa-node="div"
>
@ -96,7 +96,7 @@ exports[`<GridItem /> should handle album 1`] = `
exports[`<GridItem /> should handle artist 1`] = `
<div
className="grid__item grid__item--artist"
className="grid__item grid__item--artist "
data-qa-file="GridItem"
data-qa-node="div"
>
@ -174,7 +174,7 @@ exports[`<GridItem /> should handle artist 1`] = `
exports[`<GridItem /> should handle playlist 1`] = `
<div
className="grid__item grid__item--playlist"
className="grid__item grid__item--playlist "
data-qa-file="GridItem"
data-qa-node="div"
>

View File

@ -3,7 +3,7 @@ import pathlib
from mopidy import config, ext
__version__ = "3.64.0"
__version__ = "3.64.1"
logger = logging.getLogger(__name__)

View File

@ -154771,7 +154771,12 @@ var ContextMenuItems = function ContextMenuItems(_ref) {
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Divider, {
"data-qa-node": "Divider",
"data-qa-file": "ContextMenuItems"
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Copy, {
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Refresh, {
uri: item.uri,
action: _services_core_actions__WEBPACK_IMPORTED_MODULE_7__["loadTrack"],
"data-qa-node": "Refresh",
"data-qa-file": "ContextMenuItems"
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Copy, {
uris: [item.uri],
"data-qa-node": "Copy",
"data-qa-file": "ContextMenuItems"
@ -166686,7 +166691,6 @@ var Snapcast = function Snapcast(props) {
uiActions = props.uiActions,
match = props.match,
history = props.history,
config = props.config,
_props$snapcast = props.snapcast,
host = _props$snapcast.host,
port = _props$snapcast.port,
@ -166694,26 +166698,6 @@ var Snapcast = function Snapcast(props) {
enabled = _props$snapcast.enabled,
streaming_enabled = _props$snapcast.streaming_enabled,
connected = _props$snapcast.connected;
var restoreDefaults = function restoreDefaults() {
var _ref = config || {},
_ref$snapcast_enabled = _ref.snapcast_enabled,
snapcast_enabled = _ref$snapcast_enabled === void 0 ? false : _ref$snapcast_enabled,
_ref$snapcast_host = _ref.snapcast_host,
snapcast_host = _ref$snapcast_host === void 0 ? 'localhost' : _ref$snapcast_host,
_ref$snapcast_port = _ref.snapcast_port,
snapcast_port = _ref$snapcast_port === void 0 ? '1780' : _ref$snapcast_port,
_ref$snapcast_ssl = _ref.snapcast_ssl,
snapcast_ssl = _ref$snapcast_ssl === void 0 ? false : _ref$snapcast_ssl;
actions.setEnabled(snapcast_enabled);
actions.setConnection({
host: snapcast_host,
port: snapcast_port,
ssl: snapcast_ssl
});
};
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "snapcast",
"data-qa-node": "div",
@ -166797,17 +166781,7 @@ var Snapcast = function Snapcast(props) {
path: "snapcast.show_disconnected_clients",
"data-qa-node": "I18n",
"data-qa-file": "Snapcast"
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Button__WEBPACK_IMPORTED_MODULE_8__["default"], {
onClick: restoreDefaults,
size: "small",
className: "no-margin",
"data-qa-node": "Button",
"data-qa-file": "Snapcast"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_7__["I18n"], {
path: "services.restore_defaults",
"data-qa-node": "I18n",
"data-qa-file": "Snapcast"
})))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
}))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "field",
"data-qa-node": "div",
"data-qa-file": "Snapcast"
@ -166926,7 +166900,6 @@ var Snapcast = function Snapcast(props) {
var mapStateToProps = function mapStateToProps(state) {
return {
snapcast: state.snapcast,
config: state.pusher.config,
show_disconnected_clients: state.ui.snapcast_show_disconnected_clients !== undefined ? state.ui.snapcast_show_disconnected_clients : false
};
};
@ -196158,6 +196131,7 @@ var Queue = function Queue(_ref5) {
}
}
var current_track_name = (current_track === null || current_track === void 0 ? void 0 : current_track.name) || stream_title || '-';
var options = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, spotify_enabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Button__WEBPACK_IMPORTED_MODULE_18__["default"], {
noHover: true,
discrete: true,
@ -196245,18 +196219,15 @@ var Queue = function Queue(_ref5) {
className: "current-track__title",
"data-qa-node": "div",
"data-qa-file": "Queue"
}, stream_title && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
"data-qa-node": "span",
"data-qa-file": "Queue"
}, stream_title), !stream_title && current_track && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_URILink__WEBPACK_IMPORTED_MODULE_11__["default"], {
}, (current_track === null || current_track === void 0 ? void 0 : current_track.uri) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_URILink__WEBPACK_IMPORTED_MODULE_11__["default"], {
type: "track",
uri: current_track.uri,
"data-qa-node": "URILink",
"data-qa-file": "Queue"
}, current_track.name), !stream_title && !current_track && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
}, current_track_name) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
"data-qa-node": "span",
"data-qa-file": "Queue"
}, "-")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_LinksSentence__WEBPACK_IMPORTED_MODULE_8__["default"], {
}, current_track_name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_LinksSentence__WEBPACK_IMPORTED_MODULE_8__["default"], {
className: "current-track__artists",
items: current_track ? current_track.artists : null,
"data-qa-node": "LinksSentence",
@ -196362,7 +196333,7 @@ var mapStateToProps = function mapStateToProps(state) {
if (queue_metadata["tlid_".concat(track.tlid)] !== undefined) {
track = _objectSpread(_objectSpread({}, track), queue_metadata["tlid_".concat(track.tlid)]);
track = _objectSpread(_objectSpread({}, queue_metadata["tlid_".concat(track.tlid)]), track);
} // Siphon off this track if it's a full representation of our current track

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -140,8 +140,8 @@
// Release details
// These are automatically injected to built HTML
var build = "1655543382";
var version = "3.64.0";
var build = "1659229755";
var version = "3.64.1";
// Construct the script tag
var js = document.createElement("script");

View File

@ -1,5 +1,5 @@
{
"manifest_version": "3.64.0",
"manifest_version": "3.64.1",
"short_name": "Iris",
"name": "Iris",
"icons": [

View File

@ -1,6 +1,6 @@
{
"name": "mopidy-iris",
"version": "3.64.0",
"version": "3.64.1",
"description": "Mopidy HTTP interface",
"repository": "https://github.com/jaedb/iris",
"author": "James Barnsley <james@barnsley.nz>",

View File

@ -1,6 +1,6 @@
[metadata]
name = Mopidy-Iris
version = 3.64.0
version = 3.64.1
url = https://github.com/jaedb/iris
author = James Barnsley
author_email = james@barnsley.nz

View File

@ -6,6 +6,7 @@ import { I18n } from '../../locale';
import Link from '../Link';
import Icon from '../Icon';
import {
loadTrack,
loadAlbum,
loadArtist,
loadPlaylist,
@ -163,6 +164,7 @@ const ContextMenuItems = ({
<Divider />
</>
)}
<Refresh uri={item.uri} action={loadTrack} />
<Copy uris={[item.uri]} />
{can_edit && (
<>

View File

@ -167,6 +167,10 @@ const Group = ({
const Outputs = () => {
const snapcastEnabled = useSelector((state) => state.snapcast.enabled);
const allGroups = indexToArray(useSelector((state) => state.snapcast.groups || {}));
const allStreams = useSelector((state) => state.snapcast.streams || {});
const allServers = indexToArray(useSelector((state) => state.mopidy.servers || {}));
const groupsByStream = groupBy(allGroups, 'stream_id');
if (!snapcastEnabled) {
return (
<p className="no-results">
@ -175,11 +179,6 @@ const Outputs = () => {
);
}
const allGroups = indexToArray(useSelector((state) => state.snapcast.groups || {}));
const allStreams = useSelector((state) => state.snapcast.streams || {});
const allServers = indexToArray(useSelector((state) => state.mopidy.servers || {}));
const groupsByStream = groupBy(allGroups, 'stream_id');
return (
<ErrorBoundary>
{map(groupsByStream, (groups, id) => {

View File

@ -15,7 +15,6 @@ const Snapcast = (props) => {
uiActions,
match,
history,
config,
snapcast: {
host,
port,
@ -26,18 +25,6 @@ const Snapcast = (props) => {
},
} = props;
const restoreDefaults = () => {
const {
snapcast_enabled = false,
snapcast_host = 'localhost',
snapcast_port = '1780',
snapcast_ssl = false,
} = config || {};
actions.setEnabled(snapcast_enabled);
actions.setConnection({ host: snapcast_host, port: snapcast_port, ssl: snapcast_ssl });
}
return (
<div className="snapcast">
@ -80,9 +67,6 @@ const Snapcast = (props) => {
<I18n path="snapcast.show_disconnected_clients" />
</span>
</label>
<Button onClick={restoreDefaults} size="small" className="no-margin">
<I18n path="services.restore_defaults" />
</Button>
</div>
</div>
@ -148,7 +132,6 @@ const Snapcast = (props) => {
const mapStateToProps = (state) => ({
snapcast: state.snapcast,
config: state.pusher.config,
show_disconnected_clients: (
state.ui.snapcast_show_disconnected_clients !== undefined
? state.ui.snapcast_show_disconnected_clients

View File

@ -277,7 +277,7 @@ class Tracks extends React.Component {
return (
<div className="view library-tracks-view">
<Header options={options} uiActions={uiActions}>
<Icon name="album" type="material" />
<Icon name="music_note" type="material" />
<I18n path="library.tracks.title" />
</Header>
{this.renderView()}

View File

@ -151,6 +151,7 @@ const Queue = ({
current_track_image = current_track.images.large;
}
}
const current_track_name = current_track?.name || stream_title || '-'
const options = (
<>
@ -186,15 +187,14 @@ const Queue = ({
/>
<div className="current-track__details">
<div className="current-track__title">
{stream_title && (
<span>{stream_title}</span>
)}
{!stream_title && current_track && (
{current_track?.uri ? (
<URILink type="track" uri={current_track.uri}>
{current_track.name}
{current_track_name}
</URILink>
) : (
<span>{current_track_name}</span>
)}
{!stream_title && !current_track && (<span>-</span>)}
</div>
<LinksSentence
@ -282,8 +282,8 @@ const mapStateToProps = (state) => {
// Now merge in our queue metadata
if (queue_metadata[`tlid_${track.tlid}`] !== undefined) {
track = {
...track,
...queue_metadata[`tlid_${track.tlid}`],
...track,
};
}