From 163750160144b0930a29737c893b4cd128e229f4 Mon Sep 17 00:00:00 2001 From: Terry Geng Date: Sun, 28 Feb 2021 08:59:48 +0800 Subject: [PATCH] fix: Error when calculating tmp folder size. Instructed the bot to directly ignore errors. Fixed #224. --- media/system.py | 44 -------------------------------------------- media/url.py | 3 ++- util.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 45 deletions(-) delete mode 100644 media/system.py diff --git a/media/system.py b/media/system.py deleted file mode 100644 index 3048a98..0000000 --- a/media/system.py +++ /dev/null @@ -1,44 +0,0 @@ -import logging -import os - -log = logging.getLogger("bot") - - -def get_size_folder(path): - global log - - folder_size = 0 - for (path, dirs, files) in os.walk(path): - for file in files: - filename = os.path.join(path, file) - folder_size += os.path.getsize(filename) - return int(folder_size / (1024 * 1024)) - - -def clear_tmp_folder(path, size): - global log - - if size == -1: - return - elif size == 0: - for (path, dirs, files) in os.walk(path): - for file in files: - filename = os.path.join(path, file) - os.remove(filename) - else: - if get_size_folder(path=path) > size: - all_files = "" - for (path, dirs, files) in os.walk(path): - all_files = [os.path.join(path, file) for file in files] - all_files.sort(key=lambda x: os.path.getmtime(x)) - size_tp = 0 - for idx, file in enumerate(all_files): - size_tp += os.path.getsize(file) - if int(size_tp / (1024 * 1024)) > size: - log.info("Cleaning tmp folder") - to_remove = all_files[:idx] - print(to_remove) - for f in to_remove: - log.debug("Removing " + f) - os.remove(os.path.join(path, f)) - return diff --git a/media/url.py b/media/url.py index 3d31375..d8296cc 100644 --- a/media/url.py +++ b/media/url.py @@ -9,6 +9,7 @@ import glob from io import BytesIO import base64 +import util from constants import tr_cli as tr import media import variables as var @@ -151,7 +152,7 @@ class URLItem(BaseItem): raise ValidationFailedError(tr('unable_download', item=self.format_title())) def _download(self): - media.system.clear_tmp_folder(var.tmp_folder, var.config.getint('bot', 'tmp_folder_max_size')) + util.clear_tmp_folder(var.tmp_folder, var.config.getint('bot', 'tmp_folder_max_size')) self.downloading = True base_path = var.tmp_folder + self.id diff --git a/util.py b/util.py index e6dffac..a710b2a 100644 --- a/util.py +++ b/util.py @@ -508,3 +508,52 @@ class VolumeHelper: # Some dirty trick to stretch the function, to make to be 0 when input is -35 dB return (10 ** (dB / 20) - 10 ** (-35 / 20)) / (1 - 10 ** (-35 / 20)) + + +def get_size_folder(path): + global log + + folder_size = 0 + for (path, dirs, files) in os.walk(path): + for file in files: + filename = os.path.join(path, file) + try: + folder_size += os.path.getsize(filename) + except (FileNotFoundError, OSError): + continue + return int(folder_size / (1024 * 1024)) + + +def clear_tmp_folder(path, size): + global log + + if size == -1: + return + elif size == 0: + for (path, dirs, files) in os.walk(path): + for file in files: + filename = os.path.join(path, file) + try: + os.remove(filename) + except (FileNotFoundError, OSError): + continue + else: + if get_size_folder(path=path) > size: + all_files = "" + for (path, dirs, files) in os.walk(path): + all_files = [os.path.join(path, file) for file in files] + all_files.sort(key=lambda x: os.path.getmtime(x)) + size_tp = 0 + for idx, file in enumerate(all_files): + size_tp += os.path.getsize(file) + if int(size_tp / (1024 * 1024)) > size: + log.info("Cleaning tmp folder") + to_remove = all_files[:idx] + print(to_remove) + for f in to_remove: + log.debug("Removing " + f) + try: + os.remove(os.path.join(path, f)) + except (FileNotFoundError, OSError): + continue + return