cyp/app/js/elements/playlists.js

69 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

2020-03-10 05:24:31 +08:00
import * as html from "../html.js";
import Component from "../component.js";
import Playlist from "./playlist.js";
2020-03-13 06:03:26 +08:00
import { escape } from "../mpd.js";
2019-03-28 22:23:28 +08:00
2020-03-09 16:26:10 +08:00
class Playlists extends Component {
2020-03-10 17:07:30 +08:00
constructor() {
super({selection:"single"});
this._initCommands();
}
2020-05-06 05:03:36 +08:00
handleEvent(e) {
switch (e.type) {
case "idle-change":
e.detail.includes("stored_playlist") && this._sync();
break;
}
}
_onAppLoad() {
2020-05-08 02:06:43 +08:00
this._app.addEventListener("idle-change", this);
2020-05-06 05:03:36 +08:00
this._sync();
}
2020-03-09 16:26:10 +08:00
_onComponentChange(c, isThis) {
this.hidden = !isThis;
}
2019-03-29 03:28:55 +08:00
2020-03-09 16:26:10 +08:00
async _sync() {
let lists = await this._mpd.listPlaylists();
this._buildLists(lists);
}
_buildLists(lists) {
2020-03-10 05:24:31 +08:00
html.clear(this);
2020-03-10 17:07:30 +08:00
this.selection.clear();
2019-03-28 22:23:28 +08:00
2020-03-10 05:24:31 +08:00
lists.forEach(name => this.appendChild(new Playlist(name)));
2020-03-09 16:26:10 +08:00
}
2020-03-10 17:07:30 +08:00
_initCommands() {
const sel = this.selection;
2020-03-10 17:42:13 +08:00
sel.addCommand(async item => {
const name = item.name;
2020-03-13 06:03:26 +08:00
const commands = ["clear", `load "${escape(name)}"`, "play"];
2020-03-10 17:42:13 +08:00
await this._mpd.command(commands);
2020-05-06 05:03:36 +08:00
this.selection.clear(); // fixme notification?
2020-03-10 17:07:30 +08:00
}, {label:"Play", icon:"play"});
2020-03-10 17:42:13 +08:00
sel.addCommand(async item => {
const name = item.name;
2020-03-13 06:03:26 +08:00
await this._mpd.command(`load "${escape(name)}"`);
2020-05-06 05:03:36 +08:00
this.selection.clear(); // fixme notification?
2020-03-10 17:07:30 +08:00
}, {label:"Enqueue", icon:"plus"});
2020-03-10 17:42:13 +08:00
sel.addCommand(async item => {
const name = item.name;
if (!confirm(`Really delete playlist '${name}'?`)) { return; }
2020-03-13 06:03:26 +08:00
await this._mpd.command(`rm "${escape(name)}"`);
2020-03-10 17:07:30 +08:00
}, {label:"Delete", icon:"delete"});
sel.addCommandCancel();
}
2019-03-28 22:23:28 +08:00
}
2020-03-09 16:26:10 +08:00
customElements.define("cyp-playlists", Playlists);