refactoring

This commit is contained in:
2022-10-23 02:08:53 -05:00
parent 1f08770f6e
commit 8f2c202393
12 changed files with 216 additions and 104 deletions

View File

@@ -0,0 +1,22 @@
# Python imports
# Lib imports
# Application imports
class EndpointRegistry():
def __init__(self):
self._endpoints = {}
def register(self, rule, **options):
def decorator(f):
self._endpoints[rule] = f
return f
return decorator
def get_endpoints(self):
return self._endpoints

30
src/utils/event_system.py Normal file
View File

@@ -0,0 +1,30 @@
# Python imports
from collections import defaultdict
# Lib imports
# Application imports
class EventSystem:
""" Create event system. """
def __init__(self):
self.subscribers = defaultdict(list)
def subscribe(self, event_type, fn):
self.subscribers[event_type].append(fn)
def emit(self, event_type, data = None):
if event_type in self.subscribers:
for fn in self.subscribers[event_type]:
if data:
if hasattr(data, '__iter__') and not type(data) is str:
fn(*data)
else:
fn(data)
else:
fn()

56
src/utils/logger.py Normal file
View File

@@ -0,0 +1,56 @@
# Python imports
import os, logging
# Application imports
class Logger:
"""
Create a new logging object and return it.
:note:
NOSET # Don't know the actual log level of this... (defaulting or literally none?)
Log Levels (From least to most)
Type Value
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
:param loggerName: Sets the name of the logger object. (Used in log lines)
:param createFile: Whether we create a log file or just pump to terminal
:return: the logging object we created
"""
def __init__(self, config_path: str, _ch_log_lvl = logging.CRITICAL, _fh_log_lvl = logging.INFO):
self._CONFIG_PATH = config_path
self.global_lvl = logging.DEBUG # Keep this at highest so that handlers can filter to their desired levels
self.ch_log_lvl = _ch_log_lvl # Prety much the only one we ever change
self.fh_log_lvl = _fh_log_lvl
def get_logger(self, loggerName: str = "NO_LOGGER_NAME_PASSED", createFile: bool = True) -> logging.Logger:
log = logging.getLogger(loggerName)
log.setLevel(self.global_lvl)
# Set our log output styles
fFormatter = logging.Formatter('[%(asctime)s] %(pathname)s:%(lineno)d %(levelname)s - %(message)s', '%m-%d %H:%M:%S')
cFormatter = logging.Formatter('%(pathname)s:%(lineno)d] %(levelname)s - %(message)s')
ch = logging.StreamHandler()
ch.setLevel(level=self.ch_log_lvl)
ch.setFormatter(cFormatter)
log.addHandler(ch)
if createFile:
folder = self._CONFIG_PATH
file = f"{folder}/application.log"
if not os.path.exists(folder):
os.mkdir(folder)
fh = logging.FileHandler(file)
fh.setLevel(level=self.fh_log_lvl)
fh.setFormatter(fFormatter)
log.addHandler(fh)
return log

View File

@@ -11,19 +11,22 @@ from gi.repository import Gdk
# Application imports
from .logger import Logger
class Settings:
def __init__(self):
self._SCRIPT_PTH = os.path.dirname(os.path.realpath(__file__))
self._USER_HOME = os.path.expanduser('~')
self._CONFIG_PATH = f"{self._USER_HOME}/.config/{app_name.lower()}"
self._GLADE_FILE = f"{self._CONFIG_PATH}/Main_Window.glade"
self._CSS_FILE = f"{self._CONFIG_PATH}/stylesheet.css"
self._DEFAULT_ICONS = f"{self._CONFIG_PATH}/icons"
self._WINDOW_ICON = f"{self._DEFAULT_ICONS}/{app_name.lower()}.png"
self._USR_PATH = f"/usr/share/{app_name.lower()}"
self.SCREENSHOTS_DIR = f"{self._USER_HOME}/.screenshots"
self._SCRIPT_PTH = os.path.dirname(os.path.realpath(__file__))
self._USER_HOME = os.path.expanduser('~')
self._CONFIG_PATH = f"{self._USER_HOME}/.config/{app_name.lower()}"
self._GLADE_FILE = f"{self._CONFIG_PATH}/Main_Window.glade"
self._CSS_FILE = f"{self._CONFIG_PATH}/stylesheet.css"
self._DEFAULT_ICONS = f"{self._CONFIG_PATH}/icons"
self._WINDOW_ICON = f"{self._DEFAULT_ICONS}/{app_name.lower()}.png"
self._USR_PATH = f"/usr/share/{app_name.lower()}"
self._SCREENSHOTS_DIR = f"{self._USER_HOME}/.screenshots"
if not os.path.exists(self._CONFIG_PATH):
os.mkdir(self._CONFIG_PATH)
@@ -33,19 +36,19 @@ class Settings:
self._CSS_FILE = f"{self._USR_PATH}/stylesheet.css"
if not os.path.exists(self._WINDOW_ICON):
self._WINDOW_ICON = f"{self._USR_PATH}/icons/{app_name.lower()}.png"
if not os.path.isdir(self.SCREENSHOTS_DIR):
os.mkdir(self.SCREENSHOTS_DIR)
if not os.path.isdir(self._SCREENSHOTS_DIR):
os.mkdir(self._SCREENSHOTS_DIR)
# 'Filters'
self.images = ('.png', '.jpg', '.jpeg', '.gif')
self.builder = Gtk.Builder()
self.builder.add_from_file(self._GLADE_FILE)
self._images = ('.png', '.jpg', '.jpeg', '.gif')
self._builder = Gtk.Builder()
self._builder.add_from_file(self._GLADE_FILE)
self._logger = Logger(self._CONFIG_PATH, _fh_log_lvl=20).get_logger()
def create_window(self):
# Get window and connect signals
window = self.builder.get_object("Main_Window")
window = self._builder.get_object("Main_Window")
window.connect("delete-event", Gtk.main_quit)
self.set_window_data(window)
return window
@@ -65,7 +68,7 @@ class Settings:
style_context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
def get_monitor_data(self):
screen = self.builder.get_object("Main_Window").get_screen()
screen = self._builder.get_object("Main_Window").get_screen()
wdth = screen.get_width()
hght = screen.get_height()
mon0 = Gdk.Rectangle()
@@ -80,8 +83,9 @@ class Settings:
return monitors
def get_builder(self): return self.builder
def get_screenshots_dir(self): return self.SCREENSHOTS_DIR
def get_builder(self) -> Gtk.Builder: return self._builder
def get_logger(self) -> Logger: return self._logger
def get_screenshots_dir(self) -> str: return self._SCREENSHOTS_DIR
# Filter returns
def get_images_filter(self): return self.images
def get_images_filter(self): return self._images

View File

@@ -5,18 +5,16 @@ import os, time, datetime
from gi.repository import GLib
import pyscreenshot as capture
# Application imports
class Utils:
def __init__(self, _settings):
self.settings = _settings
self.builder = self.settings.get_builder()
def __init__(self):
self.builder = settings.get_builder()
self.SCREENSHOTS_DIR = self.settings.get_screenshots_dir()
self.SCREENSHOTS_DIR = settings.get_screenshots_dir()
self.file_store = self.builder.get_object("fileStore")
self.refreshing_state = False
@@ -31,6 +29,7 @@ class Utils:
@threaded
def referesh_directory_list(self):
self.refreshing_state = True
images = self.get_directory_list()
images.sort()
if len(images) != len(self.file_store):
@@ -38,11 +37,9 @@ class Utils:
for image in images:
GLib.idle_add(self.add_to_store, (image))
# self.file_store.sort()
self.refreshing_state = False
@threaded
def add_to_store(self, image):
self.file_store.append([image])
@@ -82,7 +79,7 @@ class Utils:
data = proc.stdout.read()
return data.decode("utf-8").strip()
def setClipboardData(self, data):
def set_clipboard_data(self, data):
proc = subprocess.Popen(['xclip','-selection','clipboard'], stdin=subprocess.PIPE)
proc.stdin.write(data)
proc.stdin.close()