Release v2.3.0
This commit is contained in:
commit
4cb98a5624
16
README.rst
16
README.rst
@ -34,7 +34,6 @@ Features
|
|||||||
- Save the current queue to an easily accessible playlist.
|
- Save the current queue to an easily accessible playlist.
|
||||||
- Search for tracks, albums, or artists from specific backends or all of Mopidy.
|
- Search for tracks, albums, or artists from specific backends or all of Mopidy.
|
||||||
- Shows detailed track and album information during playback, with album cover retrieval from Last.fm.
|
- Shows detailed track and album information during playback, with album cover retrieval from Last.fm.
|
||||||
- Seek tracks during playback.
|
|
||||||
- Support for all of the Mopidy playback controls (consume mode, repeat, shuffle, etc.)
|
- Support for all of the Mopidy playback controls (consume mode, repeat, shuffle, etc.)
|
||||||
- Deep integration with, and additional features for, the `Pi MusicBox <http://www.pimusicbox.com/>`_.
|
- Deep integration with, and additional features for, the `Pi MusicBox <http://www.pimusicbox.com/>`_.
|
||||||
- Fullscreen mode.
|
- Fullscreen mode.
|
||||||
@ -82,16 +81,14 @@ The following configuration values are available should you wish to customize yo
|
|||||||
- ``musicbox_webclient/enabled``: If the MMW extension should be enabled or not. Defaults to ``true``.
|
- ``musicbox_webclient/enabled``: If the MMW extension should be enabled or not. Defaults to ``true``.
|
||||||
|
|
||||||
- ``musicbox_webclient/musicbox``: Set this to ``true`` if you are connecting to a Mopidy instance running on a
|
- ``musicbox_webclient/musicbox``: Set this to ``true`` if you are connecting to a Mopidy instance running on a
|
||||||
Pi Musicbox. Expands the MMW user interface to include features for rebooting the Pi, changing configuration values
|
Pi Musicbox. Expands the MMW user interface to include system control/configuration functionality.
|
||||||
via a web interface, etc.
|
|
||||||
|
|
||||||
- ``musicbox_webclient/websocket_host``: Optional setting that can be used to specify the target host for Mopidy websocket connections.
|
- ``musicbox_webclient/websocket_host``: Optional setting to specify the target host for Mopidy websocket connections.
|
||||||
|
|
||||||
- ``musicbox_webclient/websocket_port``: Optional setting that can be used to specify the target port for Mopidy websocket connections.
|
- ``musicbox_webclient/websocket_port``: Optional setting to specify the target port for Mopidy websocket connections.
|
||||||
|
|
||||||
- ``musicbox_webclient/on_track_click``: Specifies the default action that should be performed when the user clicks on
|
- ``musicbox_webclient/on_track_click``: The action performed when clicking on a track. Valid options are:
|
||||||
a track that is displayed in the Browse pane or as part of Search results. Valid options are: ``PLAY_NOW``,
|
``PLAY_ALL`` (default), ``PLAY_NOW``, ``PLAY_NEXT``, ``ADD_THIS_BOTTOM``, ``ADD_ALL_BOTTOM``, and ``DYNAMIC`` (repeats last action).
|
||||||
``PLAY_NEXT``, ``ADD_THIS_BOTTOM``, ``ADD_ALL_BOTTOM``, ``PLAY_ALL`` (default), and ``DYNAMIC`` (repeats last action).
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
@ -110,7 +107,7 @@ Project resources
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
v2.3.0 (UNRELEASED)
|
v2.3.0 (2016-05-15)
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
- Enhance build workflow to include style checks and syntax validation for HTML, CSS, and Javascript.
|
- Enhance build workflow to include style checks and syntax validation for HTML, CSS, and Javascript.
|
||||||
@ -147,6 +144,7 @@ v2.3.0 (UNRELEASED)
|
|||||||
(Fixes: `#191 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/191>`_).
|
(Fixes: `#191 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/191>`_).
|
||||||
- Clearing the queue should no longer trigger an album cover image lookup.
|
- Clearing the queue should no longer trigger an album cover image lookup.
|
||||||
(Fixes: `#201 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/201>`_).
|
(Fixes: `#201 <https://github.com/pimusicbox/mopidy-musicbox-webclient/issues/201>`_).
|
||||||
|
- Update icons and labels for podcast, podcast-gpodder, and podcast-itunes backends.
|
||||||
|
|
||||||
v2.2.0 (2016-03-01)
|
v2.2.0 (2016-03-01)
|
||||||
-------------------
|
-------------------
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import os
|
|||||||
|
|
||||||
from mopidy import config, ext
|
from mopidy import config, ext
|
||||||
|
|
||||||
__version__ = '2.2.0'
|
__version__ = '2.3.0'
|
||||||
|
|
||||||
|
|
||||||
class Extension(ext.Extension):
|
class Extension(ext.Extension):
|
||||||
|
|||||||
@ -79,6 +79,8 @@ var uriClassList = [
|
|||||||
['file', 'fa-folder-o'],
|
['file', 'fa-folder-o'],
|
||||||
['m3u', 'fa-file-sound-o'],
|
['m3u', 'fa-file-sound-o'],
|
||||||
['podcast', 'fa-rss-square'],
|
['podcast', 'fa-rss-square'],
|
||||||
|
['podcast+file', 'fa-rss-square'],
|
||||||
|
['podcast+itunes', 'fa-apple'],
|
||||||
['dirble', 'fa-microphone'],
|
['dirble', 'fa-microphone'],
|
||||||
['tunein', 'fa-headphones'],
|
['tunein', 'fa-headphones'],
|
||||||
['soundcloud', 'fa-soundcloud'],
|
['soundcloud', 'fa-soundcloud'],
|
||||||
@ -92,12 +94,18 @@ var uriClassList = [
|
|||||||
['subsonic', 'fa-folder-open']
|
['subsonic', 'fa-folder-open']
|
||||||
]
|
]
|
||||||
|
|
||||||
|
// TODO: It should be possible to retrieve a user-friendly name for a given Mopidy scheme dynamically by
|
||||||
|
// calling mopidy.library.browse() on the root dir:
|
||||||
|
// 1. each backend contained in the result will have a 'name' attribute that can be shown as-is in the UI.
|
||||||
|
// 2. the URI prefix of the backend result should === mopidy.getUriSchemes(), which can be used for the mapping.
|
||||||
|
// 3. only backends that cannot be 'browsed' (e.g. youtube) should have a static mapping defined here.
|
||||||
var uriHumanList = [
|
var uriHumanList = [
|
||||||
['spotify', 'Spotify'],
|
['spotify', 'Spotify'],
|
||||||
['spotifytunigo', 'Spotify browse'],
|
['spotifytunigo', 'Spotify browse'],
|
||||||
['local', 'Local files'],
|
['local', 'Local files'],
|
||||||
['m3u', 'Local playlists'],
|
['m3u', 'Local playlists'],
|
||||||
['podcast', 'Podcasts'],
|
['podcast', 'Podcasts'],
|
||||||
|
['podcast+itunes', 'iTunes Store: Podcasts'],
|
||||||
['dirble', 'Dirble'],
|
['dirble', 'Dirble'],
|
||||||
['tunein', 'TuneIn'],
|
['tunein', 'TuneIn'],
|
||||||
['soundcloud', 'SoundCloud'],
|
['soundcloud', 'SoundCloud'],
|
||||||
@ -507,7 +515,7 @@ function getMediaHuman (uri) {
|
|||||||
return uriHumanList[i][1]
|
return uriHumanList[i][1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return uri
|
return ''
|
||||||
}
|
}
|
||||||
|
|
||||||
function isServiceUri (uri) {
|
function isServiceUri (uri) {
|
||||||
|
|||||||
@ -337,7 +337,10 @@
|
|||||||
})
|
})
|
||||||
for (var i = 0; i < schemesArray.length; i++) {
|
for (var i = 0; i < schemesArray.length; i++) {
|
||||||
backendName = getMediaHuman(schemesArray[i])
|
backendName = getMediaHuman(schemesArray[i])
|
||||||
backendName = backendName.charAt(0).toUpperCase() + backendName.slice(1)
|
if (!backendName) {
|
||||||
|
// No mapping defined, revert to just showing the scheme with first letter capitalized.
|
||||||
|
backendName = schemesArray[i].charAt(0).toUpperCase() + schemesArray[i].slice(1)
|
||||||
|
}
|
||||||
$('#selectSearchService').append(new Option(backendName, schemesArray[i]))
|
$('#selectSearchService').append(new Option(backendName, schemesArray[i]))
|
||||||
}
|
}
|
||||||
$('#selectSearchService').val(searchScheme)
|
$('#selectSearchService').val(searchScheme)
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
CACHE MANIFEST
|
CACHE MANIFEST
|
||||||
|
|
||||||
# 2016-05-13:v1
|
# 2016-05-15:v1
|
||||||
|
|
||||||
NETWORK:
|
NETWORK:
|
||||||
*
|
*
|
||||||
|
|||||||
@ -17,17 +17,22 @@ describe('Library', function () {
|
|||||||
$(document.body).append('<select id="selectSearchService"></select>')
|
$(document.body).append('<select id="selectSearchService"></select>')
|
||||||
$('#selectSearchService').selectmenu()
|
$('#selectSearchService').selectmenu()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
uriHumanList = [
|
||||||
|
['mockScheme1', 'mockUriHuman1'],
|
||||||
|
['mockScheme2', 'mockUriHuman2']
|
||||||
|
]
|
||||||
|
})
|
||||||
describe('#getSearchSchemes()', function () {
|
describe('#getSearchSchemes()', function () {
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
$(selectID).empty()
|
$(selectID).empty()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should add human-readable options for backend schemes', function () {
|
it('should add human-readable options for backend schemes', function () {
|
||||||
uriHumanList = [['mockScheme2', 'mockUriHuman2']]
|
|
||||||
|
|
||||||
library.getSearchSchemes([], mopidy)
|
library.getSearchSchemes([], mopidy)
|
||||||
assert.equal($(selectID).children().length, schemesArray.length + 1)
|
assert.equal($(selectID).children().length, schemesArray.length + 1)
|
||||||
expect($(selectID).children(':eq(2)')).to.have.text('MockUriHuman2')
|
expect($(selectID).children(':eq(2)')).to.have.text('mockUriHuman2')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should get default value from cookie', function () {
|
it('should get default value from cookie', function () {
|
||||||
@ -42,9 +47,9 @@ describe('Library', function () {
|
|||||||
expect($(selectID + ' option:selected')).to.have.value('all')
|
expect($(selectID + ' option:selected')).to.have.value('all')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should capitalize first character of backend schema', function () {
|
it('should capitalize first character of backend schema if no mapping is provided', function () {
|
||||||
library.getSearchSchemes([], mopidy)
|
library.getSearchSchemes([], mopidy)
|
||||||
expect($(selectID).children(':eq(1)')).to.have.text('MockScheme1')
|
expect($(selectID).children(':eq(3)')).to.have.text('MockScheme3')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should blacklist services that should not be searched', function () {
|
it('should blacklist services that should not be searched', function () {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user