Add drag-and-drop queue reordering
This commit is contained in:
parent
04aee1a0d8
commit
2298922333
6 changed files with 116 additions and 50 deletions
17
src/main.rs
17
src/main.rs
|
@ -123,6 +123,22 @@ async fn post_next(_req: tide::Request<()>) -> tide::Result {
|
||||||
Ok("".into())
|
Ok("".into())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
struct UpdateQueueBody {
|
||||||
|
from: u32,
|
||||||
|
to: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn post_queue_move(mut req: tide::Request<()>) -> tide::Result {
|
||||||
|
let body: UpdateQueueBody = req.body_json().await?;
|
||||||
|
let mut mpd = mpd::connect()?;
|
||||||
|
mpd.move_range(
|
||||||
|
mpdrs::song::Range(Some(body.from), Some(body.from + 1)),
|
||||||
|
body.to as usize,
|
||||||
|
)?;
|
||||||
|
Ok("".into())
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_art(req: tide::Request<()>) -> tide::Result {
|
async fn get_art(req: tide::Request<()>) -> tide::Result {
|
||||||
let query: IndexQuery = req.query()?;
|
let query: IndexQuery = req.query()?;
|
||||||
let resp = if let Ok(art) = mpd::connect()?.albumart(&query.path) {
|
let resp = if let Ok(art) = mpd::connect()?.albumart(&query.path) {
|
||||||
|
@ -172,6 +188,7 @@ async fn main() -> tide::Result<()> {
|
||||||
|
|
||||||
app.at("/queue").post(post_queue);
|
app.at("/queue").post(post_queue);
|
||||||
app.at("/queue").delete(delete_queue);
|
app.at("/queue").delete(delete_queue);
|
||||||
|
app.at("/queue/move").post(post_queue_move);
|
||||||
|
|
||||||
app.at("/play").post(post_play);
|
app.at("/play").post(post_play);
|
||||||
app.at("/pause").post(post_pause);
|
app.at("/pause").post(post_pause);
|
||||||
|
|
50
static/vendor/LICENSES
vendored
50
static/vendor/LICENSES
vendored
|
@ -1,50 +0,0 @@
|
||||||
# htmx.min.js; htmx-sse.js
|
|
||||||
|
|
||||||
https://github.com/bigskysoftware/htmx
|
|
||||||
|
|
||||||
BSD 2-Clause "Simplified" License
|
|
||||||
|
|
||||||
Copyright (c) 2020, Big Sky Software
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
# material-symbols-outlined
|
|
||||||
|
|
||||||
https://github.com/google/material-design-icons
|
|
||||||
|
|
||||||
Apache License Version 2.0
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
77
static/vendor/LICENSES.md
vendored
Normal file
77
static/vendor/LICENSES.md
vendored
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
# htmx.min.js; htmx-sse.js
|
||||||
|
|
||||||
|
https://github.com/bigskysoftware/htmx
|
||||||
|
|
||||||
|
> BSD 2-Clause "Simplified" License
|
||||||
|
>
|
||||||
|
> Copyright (c) 2020, Big Sky Software
|
||||||
|
> All rights reserved.
|
||||||
|
>
|
||||||
|
> Redistribution and use in source and binary forms, with or without
|
||||||
|
> modification, are permitted provided that the following conditions are met:
|
||||||
|
>
|
||||||
|
> 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
> list of conditions and the following disclaimer.
|
||||||
|
>
|
||||||
|
> 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
> this list of conditions and the following disclaimer in the documentation
|
||||||
|
> and/or other materials provided with the distribution.
|
||||||
|
>
|
||||||
|
> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
# material-symbols-outlined.woff2
|
||||||
|
|
||||||
|
https://github.com/google/material-design-icons
|
||||||
|
|
||||||
|
> Apache License Version 2.0
|
||||||
|
>
|
||||||
|
> Copyright [yyyy] [name of copyright owner]
|
||||||
|
>
|
||||||
|
> Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
> you may not use this file except in compliance with the License.
|
||||||
|
> You may obtain a copy of the License at
|
||||||
|
>
|
||||||
|
> http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
>
|
||||||
|
> Unless required by applicable law or agreed to in writing, software
|
||||||
|
> distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
> See the License for the specific language governing permissions and
|
||||||
|
> limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
## Sortable.min.js
|
||||||
|
|
||||||
|
https://github.com/SortableJS/Sortable
|
||||||
|
|
||||||
|
> MIT License
|
||||||
|
>
|
||||||
|
> Copyright (c) 2019 All contributors to Sortable
|
||||||
|
>
|
||||||
|
> Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
> of this software and associated documentation files (the "Software"), to deal
|
||||||
|
> in the Software without restriction, including without limitation the rights
|
||||||
|
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
> copies of the Software, and to permit persons to whom the Software is
|
||||||
|
> furnished to do so, subject to the following conditions:
|
||||||
|
>
|
||||||
|
> The above copyright notice and this permission notice shall be included in all
|
||||||
|
> copies or substantial portions of the Software.
|
||||||
|
>
|
||||||
|
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
> SOFTWARE.
|
2
static/vendor/Sortable.min.js
vendored
Normal file
2
static/vendor/Sortable.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -8,6 +8,9 @@
|
||||||
<script src="/static/vendor/htmx.min.js"></script>
|
<script src="/static/vendor/htmx.min.js"></script>
|
||||||
<script src="/static/vendor/htmx-sse.js"></script>
|
<script src="/static/vendor/htmx-sse.js"></script>
|
||||||
|
|
||||||
|
<!-- Source: https://github.com/SortableJS/Sortable -->
|
||||||
|
<script src="/static/vendor/Sortable.min.js"></script>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/static/style.css">
|
<link rel="stylesheet" href="/static/style.css">
|
||||||
<link href="/static/favicon.png" rel="icon" type="image/png">
|
<link href="/static/favicon.png" rel="icon" type="image/png">
|
||||||
|
|
||||||
|
|
|
@ -29,3 +29,20 @@
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
htmx.onLoad(() => {
|
||||||
|
const isReduced = window
|
||||||
|
.matchMedia("(prefers-reduced-motion: reduce)")
|
||||||
|
.matches;
|
||||||
|
|
||||||
|
new Sortable(document.querySelector(".queue"), {
|
||||||
|
animation: isReduced ? 0 : 100,
|
||||||
|
onEnd: (event) => fetch("/queue/move", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {"content-type": "application/json"},
|
||||||
|
body: JSON.stringify({from: event.oldIndex, to: event.newIndex}),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Reference in a new issue