From 073ddf6285e488b64c8318202b2c630eaa4476a3 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Fri, 29 Jan 2021 11:14:09 +0100
Subject: [PATCH] Update README with MPD compatibility list

---
 README.md | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

diff --git a/README.md b/README.md
index f23d6474..cb7059e4 100644
--- a/README.md
+++ b/README.md
@@ -171,3 +171,83 @@ Please, refer to the [CONTRIBUTING](CONTRIBUTING.md) file.
 Lektor is almost MPD compatible, at least it uses the same protocol, which can be gotten
 [here](https://www.musicpd.org/doc/html/protocol.html#). The full support for MPD clients (like mpc
 and ncmpc) is still WIP.
+
+### Command compatibility table
+
+For the compatibility column, the possible values are the following:
+
+- `-`: has a poor compatibility, doesn't work as MPD intended it
+- `~`: basic compatibility, some arguments types / number may change
+- `+`: is compatible
+- `CHECK`: check for compatibility status
+- `FIXME`: was intended to work as in MPD but is not, fix it
+- `TODO`: marked as 'to be implemented', check the next releases if it is implemented
+- nothing: has not been implemented and is not a priority
+
+| MPD command                       | lektord command           | compatibility | compatibility note                              |
+| --------------------------------- | ------------------------- | :-----------: | ----------------------------------------------- |
+| `clearerror`                      |                                   |       | not implemented                                 |
+| `currentsong`                     | `currentsong`                     | ~     | use the lektord tags, not MPD once              |
+| `idle [subsistem]`                | `idle [subsistem]`                | +     |                                                 |
+| `status`                          | `status`                          | ~     | slight differencies in the duration and time, not working with mpc |
+| `stats`                           | `stats`                           | ~     | don't send all the stats, only `db_update`      |
+| `consume {state}`                 | `consume {state}`                 | +     |                                                 |
+| `crossfade {seconds}`             |                                   |       | not implemented                                 |
+| `mixrampdb {dB}`                  | `mixrampdb {dB}`                  |       | not implemented                                 |
+| `mixrampdelay {seconds}`          |                                   |       | not implemented                                 |
+| `random {state}`                  | `random {state}`                  | +     |                                                 |
+| `repeat {state}`                  | `repeat {state}`                  | +     |                                                 |
+| `setvol {vol}`                    | `setvol {vol}`                    | +     | won't display the correct volume, mpv properties flush issue... |
+| `getvol`                          | `getvol`                          | +     | will display the correct value after the end of the kara |
+| `single {state}`                  | `single {state}`                  | +     |                                                 |
+| `replay_gain_mode {mode}`         |                                   |       | not implemented                                 |
+| `replay_gain_status`              |                                   |       | not implemented                                 |
+| `next`                            | `next`                            | +     |                                                 |
+| `pause {state}`                   | `pause {state}`                   | CHECK | check compat state                              |
+| `play [songpos]`                  | `play [songpos]`                  | +     | if no `songpos` passed, defaults to `0`         |
+| `playid [songid]`                 | `playid {songid}`                 | +     | get the first found `songid` in the queue       |
+| `previous`                        | `previous`                        | +     |                                                 |
+| `seek {songpos} {time}`           |                                   |       | not implemented                                 |
+| `seekid {songid} {time}`          |                                   |       | not implemented                                 |
+| `seekcur {time}`                  | `seekcur {time}`                  |       | not implemented                                 |
+| `stop`                            | `stop`                            | +     |                                                 |
+| `add {uri}`                       | `add {uri}`                       | +     |                                                 |
+| `addid {id} [pos]`                | `addid {id...}`                   | ~     | can add multiple songs, but no position support |
+| `clear`                           | `clear`                           | +     |                                                 |
+| `delete [{POS}|{start:end}]`      |                                   | TODO  | not implemented                                 |
+| `deleteid {songid}`               | `deleteid {songid}`               | +     | delete all kara with that id, skip the current kara if needed |
+| `move [{from}|{start:end}] {to}`  |                                   | TODO  | not implemented                                 |
+| `moveid {from} {to}`              | `moveid {from} {to}`              | ~     | `to` is always an absolute position             |
+| `playlist`                        | `playlist`                        | +     |                                                 |
+| `playlistfind {tag} {needle}`     | `playlistfind {uri}`              | ~     | uses lektord URIs                               |
+| `playlistid {songid}`             |                                   | TODO  | not implemented                                 |
+| `playlistinfo [[songpos]|[start:end]]` |  `playlistinfo`              | -     | is an alias to `playlist`                       |
+| `playlistsearch {taf} {needle}`   | `playlistsearch {uri}`            | ~     | uses lektord URIs                               |
+| `plchanges {version} [start:end]` |                                   |       | not implemented                                 |
+| `plchangesposid {version} [start:end]` |                              |       | not implemented                                 |
+| `prio {prio} {start:end}`         |                                   |       | not implemented                                 |
+| `prioid {prio} {id...}`           |                                   |       | not implemented                                 |
+| `rangeid {id} {start:end}`        |                                   |       | not implemented                                 |
+| `shuffle [start:end]`             | `shuffle`                         | ~     | shuffles all the queue                          |
+| `swap {song1} {song2}`            |                                   | TODO  | not implemented                                 |
+| `swap {songid1} {songid2}`        |                                   |       | not implemented                                 |
+| `addtagid {songid} {tag} {val}`   |                                   |       | not implemented                                 |
+| `cleartagid {songid} [tag]`       |                                   |       | not implemented                                 |
+| `listplaylist {name}`             | `listplaylist {name}`             | +     |                                                 |
+| `listplaylistinfo {name}`         | `listplaylistinfo {name} {uri}`   | -     | do a search in the playlist                     |
+| `listplaylists`                   | `listplaylists`                   | +     |                                                 |
+| `load {name} [start:end]`         |                                   |       | not implemented, use `add {uri}` to do that     |
+| `playlistadd {name} {uri}`        | `playlistadd {name} {uri}`        | ~     | uses lektord URIs                               |
+| `playlistclear {name}`            | `playlistclear {name}`            | +     |                                                 |
+| `playlistdelete {name} {songpos}` | `playlistdelete {name} [songid]`  | ~     | delete all the playlist if `songpos` is not spesified, uses kara ids, not pos |
+| `playlistmove {name} {from} {to}` |                                   |       | not implemented                                 |
+| `rename {name} {newname}`         | `rename {name} {newname}`         | ~     | will fail if the `newplaylist` already exists   |
+| `rm {name}`                       | `rm {name}`                       | +     |                                                 |
+| `save {name}`                     | `save {name} {destdb}`            | -     | export a part of the db into as sqlite3 db      |
+| `albumart {uri} {offset}`         |                                   |       | not implemted                                   |
+| `count {filt} [group {grptype}]`  |                                   |       | not implemted                                   |
+| `getfingerprint {uri}`            |                                   |       | not implemted                                   |
+| `find {filt} [sort {type}] [window {START:END}]` | `find {uri}`       | -     | do a simple search in the db with lektord's URIs |
+| `findadd {filt} [sort {type}] [window {start:end}]` | `findadd {uri}` | -     | same remarks as `find`                          |
+| `list {type} {filt} [group {grptype}]` |                              |       | not implemented                                 |
+| `listall [uri]`                   |                                   |       | not implemented                                 |
-- 
GitLab