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())
|
||||
}
|
||||
|
||||
#[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 {
|
||||
let query: IndexQuery = req.query()?;
|
||||
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").delete(delete_queue);
|
||||
app.at("/queue/move").post(post_queue_move);
|
||||
|
||||
app.at("/play").post(post_play);
|
||||
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-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 href="/static/favicon.png" rel="icon" type="image/png">
|
||||
|
||||
|
|
|
@ -29,3 +29,20 @@
|
|||
</li>
|
||||
{% endfor %}
|
||||
</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