From f371f5795cc846a727a5cf6fca273c28d19f5c40 Mon Sep 17 00:00:00 2001
From: Peder Bergebakken Sundt <pbsds@hotmail.com>
Date: Sun, 20 Feb 2022 00:14:44 +0100
Subject: [PATCH] Scope constants into namespaces

---
 grzegorz_clients/constants.py | 74 ++++++++++++++++++-----------------
 grzegorz_clients/remi_ui.py   | 52 ++++++++++++------------
 2 files changed, 65 insertions(+), 61 deletions(-)

diff --git a/grzegorz_clients/constants.py b/grzegorz_clients/constants.py
index 8deed6c..ef804d3 100644
--- a/grzegorz_clients/constants.py
+++ b/grzegorz_clients/constants.py
@@ -1,36 +1,40 @@
-# Colors
-COLOR_BLUE = "rgb(33, 150, 243)"
-COLOR_BLUE_SHADOW = "rgba(33, 150, 243, 0.75)"
-COLOR_LIGHT_BLUE = "#e3f2fd"
-COLOR_INDIGO = "#6610f2"
-COLOR_PURPLE = "#6f42c1"
-COLOR_PINK = "#e83e8c"
-COLOR_RED = "#dd2c00"
-COLOR_ORANGE = "#fd7e14"
-COLOR_YELLOW = "#ffc107"
-COLOR_GREEN = "#28a745"
-COLOR_TEAL = "#20c997"
-COLOR_CYAN = "#17a2b8"
-COLOR_WHITE = "#fff"
-COLOR_GRAY_LIGHT = "#abc"
-COLOR_GRAY = "#6c757d"
-COLOR_GRAY_DARK = "#343a40"
-COLOR_PRIMARY = "#007bff"
-COLOR_SECONDARY = "#6c757d"
-COLOR_SUCCESS = "#28a745"
-COLOR_INFO = "#17a2b8"
-COLOR_WARNING = "#ffc107"
-COLOR_DANGER = "#dc3545"
-COLOR_LIGHT = "#f8f9fa"
-COLOR_DARK = "#343a40"
+@(lambda x: x()) # singleton
+class colors:
+    BLUE        = "rgb(33, 150, 243)"
+    BLUE_SHADOW = "rgba(33, 150, 243, 0.75)"
+    LIGHT_BLUE  = "#e3f2fd"
+    INDIGO      = "#6610f2"
+    PURPLE      = "#6f42c1"
+    PINK        = "#e83e8c"
+    RED         = "#dd2c00"
+    ORANGE      = "#fd7e14"
+    YELLOW      = "#ffc107"
+    GREEN       = "#28a745"
+    TEAL        = "#20c997"
+    CYAN        = "#17a2b8"
+    WHITE       = "#fff"
+    GRAY_LIGHT  = "#abc"
+    GRAY        = "#6c757d"
+    GRAY_DARK   = "#343a40"
+    PRIMARY     = "#007bff"
+    SECONDARY   = "#6c757d"
+    SUCCESS     = "#28a745"
+    INFO        = "#17a2b8"
+    WARNING     = "#ffc107"
+    DANGER      = "#dc3545"
+    LIGHT       = "#f8f9fa"
+    DARK        = "#343a40"
 
-# Font Awesome
-ICON_PARTY = '<i class="fas fa-hat-wizard"></i>'
-ICON_PREV = '<i class="fas fa-step-backward"></i>'
-ICON_NEXT = '<i class="fas fa-step-forward"></i>'
-ICON_PLAY = '<i class="fas fa-play"></i>'
-ICON_PAUSE = '<i class="fas fa-pause"></i>'
-ICON_TRASH = '<i class="fas fa-trash"></i>'
-ICON_GOTO = '<i class="fas fa-play-circle"></i>'
-ICON_DOWN = '<i class="fas fa-arrow-down"></i>'
-ICON_UP = '<i class="fas fa-arrow-up"></i>'
+@(lambda x: x()) # singleton
+class icons:
+
+    # Font Awesome
+    PARTY = '<i class="fas fa-hat-wizard"></i>'
+    PREV  = '<i class="fas fa-step-backward"></i>'
+    NEXT  = '<i class="fas fa-step-forward"></i>'
+    PLAY  = '<i class="fas fa-play"></i>'
+    PAUSE = '<i class="fas fa-pause"></i>'
+    TRASH = '<i class="fas fa-trash"></i>'
+    GOTO  = '<i class="fas fa-play-circle"></i>'
+    DOWN  = '<i class="fas fa-arrow-down"></i>'
+    UP    = '<i class="fas fa-arrow-up"></i>'
diff --git a/grzegorz_clients/remi_ui.py b/grzegorz_clients/remi_ui.py
index c935a17..f79f4e4 100644
--- a/grzegorz_clients/remi_ui.py
+++ b/grzegorz_clients/remi_ui.py
@@ -1,10 +1,10 @@
-import random, os, time, shutil, sys
+import os
 from threading import Timer
 import remi.gui as gui
 from remi import App
 from .utils import Namespace, call_as_thread, seconds_to_timestamp
 from . import api
-from .constants import *
+from .constants import colors, icons
 
 #globals:
 WIDTH_L = 400
@@ -27,14 +27,14 @@ class RemiApp(App):
 
 		self.playback.playing = gui.Label("Now playing: None")# (TODO): update this
 
-		self.playback.party = gui.Button(ICON_PARTY)
+		self.playback.party = gui.Button(icons.PARTY)
 		self.playback.party.attributes["onclick"] = "document.body.classList.toggle('dancing');"
 		self.playback.party.attributes["title"] = "ENABLE PARTY MODE" # hover text
-		self.playback.previous = gui.Button(ICON_PREV)
+		self.playback.previous = gui.Button(icons.PREV)
 		self.playback.previous.set_on_click_listener(self.playback_previous)
-		self.playback.play = gui.Button(ICON_PLAY)
+		self.playback.play = gui.Button(icons.PLAY)
 		self.playback.play.set_on_click_listener(self.playback_play)
-		self.playback.next = gui.Button(ICON_NEXT)
+		self.playback.next = gui.Button(icons.NEXT)
 		self.playback.next.set_on_click_listener(self.playback_next)
 
 		self.playback.volume_label = gui.Label("Volume:")
@@ -78,10 +78,10 @@ class RemiApp(App):
 
 		# Playback:
 		self.playback.party.style["background"] \
-			= f"linear-gradient(40deg,{COLOR_PINK},{COLOR_TEAL})"
+			= f"linear-gradient(40deg,{colors.PINK},{colors.TEAL})"
 
 		self.playback.play.style["background"] \
-			= f"linear-gradient(40deg,{COLOR_BLUE},{COLOR_PURPLE})"
+			= f"linear-gradient(40deg,{colors.BLUE},{colors.PURPLE})"
 
 
 		self.playback.volume_label.style["font-size"] = "0.8em"
@@ -101,9 +101,9 @@ class RemiApp(App):
 			.style["width"] = "100%"
 
 		self.playlist.clear.style["background"] \
-			= f"linear-gradient(40deg,{COLOR_RED},{COLOR_ORANGE})"
+			= f"linear-gradient(40deg,{colors.RED},{colors.ORANGE})"
 		self.playlist.shuffle.style["background"] \
-			= f"linear-gradient(40deg,{COLOR_TEAL},{COLOR_GREEN})"
+			= f"linear-gradient(40deg,{colors.TEAL},{colors.GREEN})"
 
 		for i in (self.playlist.shuffle, self.playlist.clear):
 			i.style["height"] = "1.8em"
@@ -114,8 +114,8 @@ class RemiApp(App):
 		# Input field:
 		self.input.field.style["height"] = "20px"
 		self.input.field.style["margin"] = "5px"
-		self.input.field.style["border"] = "1px solid %s" % COLOR_BLUE
-		self.input.field.style["box-shadow"] = "0px 0px 5px 0px %s" % COLOR_BLUE_SHADOW
+		self.input.field.style["border"] = "1px solid %s" % colors.BLUE
+		self.input.field.style["box-shadow"] = "0px 0px 5px 0px %s" % colors.BLUE_SHADOW
 		self.input.field.style["align-self"] = "flex-start"
 
 		self.input.submit.style["margin"] = "0px 5px"
@@ -333,10 +333,10 @@ class RemiApp(App):
 				playlist_item["index"],
 				name,
 				seconds_to_timestamp(length) if length else "--:--",
-				ICON_GOTO,
-				ICON_UP,
-				ICON_DOWN,
-				ICON_TRASH,
+				icons.GOTO,
+				icons.UP,
+				icons.DOWN,
+				icons.TRASH,
 			])
 
 		this_playlist = list(zip(table, [i.get("current", False) for i in playlist])) # ew, but it works...
@@ -355,9 +355,9 @@ class RemiApp(App):
 			if playlist_item.get("current", False):
 				self.playback.previous.set_enabled(playlist_item.get("index") != 0)
 				self.playback.next.set_enabled(playlist_item.get("index") != N-1)
-				row_widget.style["background-color"] = COLOR_LIGHT_BLUE
+				row_widget.style["background-color"] = colors.LIGHT_BLUE
 			else:
-				row_widget.style["color"] = COLOR_GRAY_DARK
+				row_widget.style["color"] = colors.GRAY_DARK
 
 
 			# for each item element in this row:
@@ -366,38 +366,38 @@ class RemiApp(App):
 
 				if item_index == 1 and "failed" in playlist_item.get("data", {}):
 					item_widget.style["width"] = "1.1em"
-					item_widget.style["color"] = COLOR_RED
+					item_widget.style["color"] = colors.RED
 
 				if item_index >= 3:
 					item_widget.style["width"] = "1.1em"
 
 				if item_index == 3: # seek here
-					item_widget.style["color"] = COLOR_GREEN#COLOR_RED if playlist_item.get("current", False) else
+					item_widget.style["color"] = colors.GREEN#colors.RED if playlist_item.get("current", False) else
 					item_widget.set_on_click_listener(self.on_table_item_play_item, playlist_item)
 					item_widget.attributes["title"] = "Play this item"
 
 				if item_index == 4: # move up
 					item_widget.set_on_click_listener(self.on_table_item_move_click, playlist_item, False)
 					if playlist_item["index"] == 0:
-						item_widget.style["color"] = COLOR_GRAY_LIGHT
+						item_widget.style["color"] = colors.GRAY_LIGHT
 					else:
-						item_widget.style["color"] = COLOR_TEAL
+						item_widget.style["color"] = colors.TEAL
 					item_widget.attributes["title"] = "Move this item up the playlist"
 				if item_index == 5: # move down
 					item_widget.set_on_click_listener(self.on_table_item_move_click, playlist_item, True)
 					if playlist_item["index"] == N-1:
-						item_widget.style["color"] = COLOR_GRAY_LIGHT
+						item_widget.style["color"] = colors.GRAY_LIGHT
 					else:
-						item_widget.style["color"] = COLOR_TEAL
+						item_widget.style["color"] = colors.TEAL
 					item_widget.attributes["title"] = "Move this item down the playlist"
 
 				if item_index == 6: # remove from playlist
-					item_widget.style["color"] = COLOR_RED
+					item_widget.style["color"] = colors.RED
 					item_widget.set_on_click_listener(self.on_table_item_remove_click, playlist_item)
 					item_widget.attributes["title"] = "Remove this item from the playlist"
 
 				#print(index, key, item_widget)
 
 	def set_playing(self, is_playing:bool): # Only updates GUI elements!
-		self.playback.play.set_text(ICON_PAUSE if is_playing else ICON_PLAY)
+		self.playback.play.set_text(icons.PAUSE if is_playing else icons.PLAY)
 		self.playback.seek_slider.set_enabled(is_playing)