From 7a56366cbf62da1da1b6d6a94a23156adb3f28f6 Mon Sep 17 00:00:00 2001 From: Marat Fayzullin Date: Tue, 21 Feb 2023 22:52:30 -0500 Subject: [PATCH] Refactoring. --- htdocs/css/files.css | 1 - owrx/controllers/file.py | 57 ++++++++++++++++------------------------ 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/htdocs/css/files.css b/htdocs/css/files.css index 58ad79b4..3d921a49 100644 --- a/htdocs/css/files.css +++ b/htdocs/css/files.css @@ -31,4 +31,3 @@ td { img { width: 100%; } - diff --git a/owrx/controllers/file.py b/owrx/controllers/file.py index 36028e04..4ec64191 100644 --- a/owrx/controllers/file.py +++ b/owrx/controllers/file.py @@ -1,48 +1,35 @@ from owrx.controllers.template import WebpageController -from owrx.controllers.assets import ModificationAwareController -from owrx.breadcrumb import Breadcrumb, BreadcrumbItem, BreadcrumbMixin -from owrx.controllers.settings import SettingsBreadcrumb +from owrx.controllers.assets import AssetsController from owrx.config.core import CoreConfig -from datetime import datetime, timezone -import mimetypes import os import re -class FileController(ModificationAwareController): - def getModified(self, file): - return datetime.fromtimestamp(os.path.getmtime(file), timezone.utc) - - def openFile(self, file): - return open(file, "rb") - - def serve_file(self, file, content_type=None): - try: - modified = self.getModified(file) - - if not self.wasModified(file): - self.send_response("", code=304) - return - - f = self.openFile(file) - data = f.read() - f.close() - - if content_type is None: - (content_type, encoding) = mimetypes.guess_type(file) - self.send_response(data, content_type=content_type, last_modified=modified, max_age=3600) - except FileNotFoundError: - self.send_response("file '%s' not found" % file, code=404) - - def indexAction(self): - tmpDir = CoreConfig().get_temporary_directory() - filename = self.request.matches.group(1) - self.serve_file("%s/%s" % (tmpDir, filename)) +class FileController(AssetsController): + def getFilePath(self, file): + return CoreConfig().get_temporary_directory() + "/" + file class FilesController(WebpageController): + # Get list of files to work on, sorted in reverse alphabetic + # order (so that newer files appear first) + def getFileList(self): + dir = CoreConfig().get_temporary_directory() + files = [f for f in os.listdir(dir) if re.match(r'SSTV-[0-9]+-[0-9]+\.bmp', f)] + return sorted(files, reverse=True) + + # Delete all files except for newest ones + def cleanFiles(self, keepN): + dir = CoreConfig().get_temporary_directory() + files = self.getFileList() + for f in files[keepN:]: + try: + os.unlink(dir + "/" + f) + except: + pass + def template_variables(self): - files = [f for f in os.listdir('/tmp') if re.match(r'SSTV-[0-9]+-[0-9]+\.bmp', f)] + files = self.getFileList() rows = "" for i in range(len(files)):