From 3a63301f01f6b4d3b279b85019da940b956464e2 Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 23 Nov 2021 23:15:09 +0000 Subject: [PATCH 01/11] Added repeat and shuffle commands --- bin/miniplayer | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/bin/miniplayer b/bin/miniplayer index 5c673d2..6705147 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -56,7 +56,9 @@ default_bindings = {">": "next_track", "i": "toggle_info", "down": "select_down", "up": "select_up", - "enter": "select" + "enter": "select", + "x": "shuffle", + "r": "repeat" } if "keybindings" not in config.sections(): @@ -244,6 +246,15 @@ class Player: self.last_song = None + # Set repeat flag + current_status = self.client.status() + + if "repeat" in current_status.keys(): + self.repeat = current_status["repeat"] + + else: + self.repeat = 0 + # Album art HTTP server if art_config.get("http_base_url"): @@ -788,6 +799,13 @@ class Player: self.update_needed = True self.last_song = None + elif action == "repeat": + self.repeat = int(not self.repeat) + self.client.repeat(self.repeat) + + elif action == "shuffle": + self.client.shuffle() + key = self.stdscr.getch() @@ -838,6 +856,14 @@ class Player: curses.color_pair(2) ) + # Repeat string + if self.repeat: + repeat_string = "r" + self.art_win.addstr( + self.text_start + 3, 0, + repeat_string, + ) + self.art_win.refresh() From 10e168ee0e26e9368a0d5a6239075409b9d0f081 Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 23 Nov 2021 23:15:47 +0000 Subject: [PATCH 02/11] Disabled playlist keys (up/down/select) when the playlist is not visible --- bin/miniplayer | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/miniplayer b/bin/miniplayer index 6705147..946af92 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -711,6 +711,8 @@ class Player: anytime_keys = ["quit", "help", "select_up", "select_down", "select"] + playlist_keys = ["select_up", "select_down", "select"] + special_key_map = {curses.KEY_UP: "up", curses.KEY_DOWN: "down", curses.KEY_LEFT: "left", @@ -745,6 +747,10 @@ class Player: else: action = keybindings[keyChar] + # Check if key is a playlist key but no playlist showing + if action in playlist_keys and not self.draw_playlist: + key = self.stdscr.getch() + continue if stopped and action not in anytime_keys: key = self.stdscr.getch() From 5c3c02d8ee9201f5c2cde24d5cbb7fa38d40b9cc Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 23 Nov 2021 23:40:43 +0000 Subject: [PATCH 03/11] Added delete and backspace as bindable keys --- bin/miniplayer | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/miniplayer b/bin/miniplayer index 946af92..5ed977c 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -719,7 +719,9 @@ class Player: curses.KEY_RIGHT: "right", curses.KEY_ENTER: "enter", 10: "enter", - 32: "space" + 32: "space", + 330: "delete", + 263: "backspace" } if self.checkSongUpdate() == 1: From a91749aadc454cb095b588edd7b9a567cb7efbd0 Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 23 Nov 2021 23:42:03 +0000 Subject: [PATCH 04/11] Added update_needed to repeat and shuffle --- bin/miniplayer | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/miniplayer b/bin/miniplayer index 5ed977c..4874e71 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -810,9 +810,11 @@ class Player: elif action == "repeat": self.repeat = int(not self.repeat) self.client.repeat(self.repeat) + self.update_needed = True elif action == "shuffle": self.client.shuffle() + self.update_needed = True key = self.stdscr.getch() From 694910483ba59bf33ed170268f0c93aee4f7ad0a Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 23 Nov 2021 23:42:31 +0000 Subject: [PATCH 05/11] Added "delete" keybind to remove selected song from playlist --- bin/miniplayer | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/bin/miniplayer b/bin/miniplayer index 4874e71..56a808c 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -46,19 +46,20 @@ if "theme" not in config.sections(): } # Initialise keybindings -default_bindings = {">": "next_track", - "<": "last_track", - "+": "volume_up", - "-": "volume_down", - "p": "play_pause", - "q": "quit", - "h": "help", - "i": "toggle_info", - "down": "select_down", - "up": "select_up", - "enter": "select", - "x": "shuffle", - "r": "repeat" +default_bindings = {">": "next_track", + "<": "last_track", + "+": "volume_up", + "-": "volume_down", + "p": "play_pause", + "q": "quit", + "h": "help", + "i": "toggle_info", + "down": "select_down", + "up": "select_up", + "enter": "select", + "x": "shuffle", + "r": "repeat", + "delete": "delete" } if "keybindings" not in config.sections(): @@ -711,7 +712,7 @@ class Player: anytime_keys = ["quit", "help", "select_up", "select_down", "select"] - playlist_keys = ["select_up", "select_down", "select"] + playlist_keys = ["delete", "select_up", "select_down", "select"] special_key_map = {curses.KEY_UP: "up", curses.KEY_DOWN: "down", @@ -816,6 +817,9 @@ class Player: self.client.shuffle() self.update_needed = True + elif action == "delete": + self.client.delete(self.selected_song % playlist_length) + self.update_needed = True key = self.stdscr.getch() From 4df5879df7005f3c2b062b8838cc12be0ee8cdca Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 29 Mar 2022 00:26:28 +0000 Subject: [PATCH 06/11] Made config keys case sensitive --- bin/miniplayer | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/miniplayer b/bin/miniplayer index 56a808c..8f7b0a4 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -16,6 +16,7 @@ import math # Get config config = configparser.ConfigParser() +config.optionxform = str config.read(os.path.expanduser("~/.config/miniplayer/config")) if "player" not in config.sections(): From 558eed9332106fb89fd90f56158788f1666e8874 Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 29 Mar 2022 00:28:35 +0000 Subject: [PATCH 07/11] Added Up, Down, Left, and Right (shift + up, shift + down, ...) --- bin/miniplayer | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bin/miniplayer b/bin/miniplayer index 8f7b0a4..3708975 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -719,6 +719,10 @@ class Player: curses.KEY_DOWN: "down", curses.KEY_LEFT: "left", curses.KEY_RIGHT: "right", + 337: "Up", + 336: "Down", + 393: "Left", + 402: "Right", curses.KEY_ENTER: "enter", 10: "enter", 32: "space", From c7f18f1b5b160ed3923b0cd4006344cf7ebd5831 Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 29 Mar 2022 00:29:06 +0000 Subject: [PATCH 08/11] Added move_up and move_down commands --- bin/miniplayer | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/bin/miniplayer b/bin/miniplayer index 3708975..9c763c2 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -60,7 +60,9 @@ default_bindings = {">": "next_track", "enter": "select", "x": "shuffle", "r": "repeat", - "delete": "delete" + "delete": "delete", + "Up": "move_up", + "Down": "move_down" } if "keybindings" not in config.sections(): @@ -700,20 +702,11 @@ class Player: def handleKeypress(self): """ A function to handle keypresses - - Keys: - '>' -- Next track - '<' -- Last track - '+' -- Volume up +5 - '-' -- Volume down -5 - 'p' -- Play/pause - 'q' -- Quit - 'h' -- Help """ anytime_keys = ["quit", "help", "select_up", "select_down", "select"] - playlist_keys = ["delete", "select_up", "select_down", "select"] + playlist_keys = ["delete", "select_up", "select_down", "select", "move_up", "move_down"] special_key_map = {curses.KEY_UP: "up", curses.KEY_DOWN: "down", @@ -813,6 +806,24 @@ class Player: self.update_needed = True self.last_song = None + elif action == "move_up": + self.control_cycle = 1 + + # No moving up if we're already at the top! + if self.selected_song > 0: + self.client.swap(self.selected_song, self.selected_song - 1) + self.selected_song -= 1 + self.update_needed = True + + elif action == "move_down": + self.control_cycle = 1 + + # No moving down if we're already at the bottom! + if self.selected_song < playlist_length - 1: + self.client.swap(self.selected_song, self.selected_song + 1) + self.selected_song += 1 + self.update_needed = True + elif action == "repeat": self.repeat = int(not self.repeat) self.client.repeat(self.repeat) From 492a920c772c2ce0e8098c23a371a677a7201faf Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 29 Mar 2022 00:29:27 +0000 Subject: [PATCH 09/11] Fixed progressbar not updating when song repeats --- bin/miniplayer | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/miniplayer b/bin/miniplayer index 9c763c2..e65f66a 100755 --- a/bin/miniplayer +++ b/bin/miniplayer @@ -873,7 +873,9 @@ class Player: self.art_win.addstr( self.text_start + 2, 0, - self.bar_body*(int((self.art_window_width - 1) * self.progress)) + self.bar_head, + self.bar_body * int((self.art_window_width - 1) * self.progress) + + self.bar_head + + " " * int(self.art_window_width * (1 - self.progress)), curses.color_pair(3) ) From 1da2e98d50a88e7de7c7c520507ec7f48e9df3ec Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 29 Mar 2022 00:29:41 +0000 Subject: [PATCH 10/11] Added new commands to config.example --- config.example | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/config.example b/config.example index f2b4121..4852d82 100644 --- a/config.example +++ b/config.example @@ -18,17 +18,22 @@ port = 6600 # pass = example # [keybindings] -# > = next_track -# < = last_track -# + = volume_up -# - = volume_down -# p = play_pause -# q = quit -# h = help -# i = toggle_info -# up = select_up -# down = select_down -# enter = select +# > = next_track +# < = last_track +# + = volume_up +# - = volume_down +# p = play_pause +# q = quit +# h = help +# i = toggle_info +# up = select_up +# down = select_down +# enter = select +# Up = move_up +# Down = move_down +# delete = delete +# x = shuffle +# r = repeat # [theme] # # If a color is set to "auto", it will automatically pick the color based on the album art From c64790249771c7554ba74fd42315754b06533e5a Mon Sep 17 00:00:00 2001 From: Erica Date: Tue, 29 Mar 2022 00:30:31 +0000 Subject: [PATCH 11/11] Updated version --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index fbc46cf..9aa6694 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = miniplayer -version = 1.5.2 +version = 1.6.0 description = An mpd client with album art and basic functionality. long_description = file: README.md long_description_content_type = text/markdown