From 1d9321501a76dfb8bf1006f3bd08080cfc7050ff Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sun, 23 Aug 2020 14:10:28 +0200 Subject: [PATCH] Add function to add a top-level directory --- software/webradio.py | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/software/webradio.py b/software/webradio.py index 1081571..d186d4a 100755 --- a/software/webradio.py +++ b/software/webradio.py @@ -128,7 +128,8 @@ class display_selection(display): #self.img.paste(self.img_pre, (0,0)) self.img = self.img_pre - def set_entries(self, entries): + def set_entries(self, entries, left_only = False): + self.left_only = left_only self.entries = entries self.set_page(0) @@ -138,13 +139,14 @@ class display_selection(display): x = 0 y = 0 self.img_pre = Image.new('1', (self.width, self.height), color = not self.fg) - for entry in self.entries[page*6:]: + mult = 3 if self.left_only else 6 + for entry in self.entries[page*mult:]: ImageDraw.Draw(self.img_pre).text((x,y-font_shift), entry, font=self.font_info, fill=self.fg) y += self.height / 3 if (y >= self.height): y = 0 x += self.width / 2 - if (x >= self.width): + if (x >= self.width) or (self.left_only): break def set_page_relative(self, delta): @@ -160,7 +162,8 @@ class display_selection(display): if (page == -1): page = self.page try: - return self.entries[page * 6 + offset] + mult = 3 if self.left_only else 6 + return self.entries[page * mult + offset] except: return "" @@ -224,8 +227,20 @@ class radioserv: entries = [] for entry in playlists: entries.append(entry['playlist']) + self.disp_select.mode = "playlist" self.disp_select.set_entries(entries) - #self.disp_select.set_entries(["Test", "Foo", "Bar", "Meow", "Zzzzzz", "Yehaw!", "Trees", "Bees", "Flowers"]) + self.disp_mgr.set_display(self.disp_select, LIVE_SELECT) + + def open_directory_screen(self): + dirs = self.mpd.listfiles("") + entries = [] + for entry in dirs: + try: + entries.append(entry['directory']) + except: + pass + self.disp_select.mode = "directory" + self.disp_select.set_entries(entries, True) self.disp_mgr.set_display(self.disp_select, LIVE_SELECT) def handle_rx(self, rdata): @@ -241,11 +256,15 @@ class radioserv: # Handle key presses key_id = rdata[0] & 0x0F key_press_short = ((rdata[0] & 0xC0) == 128) + key_press_long = ((rdata[0] & 0xC0) == 192) + if key_press_short: + print("Press key: {}".format(key_id)) + elif key_press_long: + print("Long press key: {}".format(key_id)) # Handle rotary input rotary_delta = int(rdata[1] & 0x1F) - 16 if (self.disp_mgr.current_display == self.disp_playback): if (key_press_short): - print("Press key: {}".format(key_id)) if (key_id == 0): # Tune- print(self.status) # TODO: Only for testing purposes. This key is still free! print(self.currentsong) @@ -264,6 +283,9 @@ class radioserv: self.mpd.next() elif (key_id == 7): # PRESET self.mpd.random(int(not int(self.status['random']))) + if (key_press_long): + if (key_id == 5): # Source + self.open_directory_screen() self.handle_volume(rotary_delta, bat) elif (self.disp_mgr.current_display == self.disp_info): @@ -295,9 +317,12 @@ class radioserv: elif (sel == 100): self.disp_mgr.kill_display() else: - print("Load playlist {}.".format(self.disp_select.get_entry(sel))) + print("Load {} {}.".format(self.disp_select.mode, self.disp_select.get_entry(sel))) self.mpd.clear() - self.mpd.load(self.disp_select.get_entry(sel)) + if (self.disp_select.mode == "playlist"): + self.mpd.load(self.disp_select.get_entry(sel)) + else: + self.mpd.add(self.disp_select.get_entry(sel)) self.mpd.play(0) self.disp_mgr.kill_display()