[core/utils] Improve minimum disk space calculation when updating

This commit is contained in:
derrod 2021-06-17 15:00:34 +02:00
parent 0e6b63d1a2
commit bb3d6f9348
2 changed files with 9 additions and 2 deletions

View file

@ -21,7 +21,7 @@ from legendary.api.egs import EPCAPI
from legendary.downloader.manager import DLManager from legendary.downloader.manager import DLManager
from legendary.lfs.egl import EPCLFS from legendary.lfs.egl import EPCLFS
from legendary.lfs.lgndry import LGDLFS from legendary.lfs.lgndry import LGDLFS
from legendary.utils.lfs import clean_filename, delete_folder, delete_filelist from legendary.utils.lfs import clean_filename, delete_folder, delete_filelist, get_dir_size
from legendary.models.downloading import AnalysisResult, ConditionCheckResult from legendary.models.downloading import AnalysisResult, ConditionCheckResult
from legendary.models.egl import EGLManifest from legendary.models.egl import EGLManifest
from legendary.models.exceptions import * from legendary.models.exceptions import *
@ -888,7 +888,9 @@ class LegendaryCore:
# check if enough disk space is free (dl size is the approximate amount the installation will grow) # check if enough disk space is free (dl size is the approximate amount the installation will grow)
min_disk_space = analysis.install_size min_disk_space = analysis.install_size
if updating: if updating:
min_disk_space += analysis.biggest_file_size current_size = get_dir_size(install.install_path)
delta = max(0, analysis.install_size - current_size)
min_disk_space = delta + analysis.biggest_file_size
# todo when resuming, only check remaining files # todo when resuming, only check remaining files
_, _, free = shutil.disk_usage(os.path.split(install.install_path)[0]) _, _, free = shutil.disk_usage(os.path.split(install.install_path)[0])

View file

@ -5,6 +5,7 @@ import shutil
import hashlib import hashlib
import logging import logging
from pathlib import Path
from typing import List, Iterator from typing import List, Iterator
from legendary.models.game import VerifyResult from legendary.models.game import VerifyResult
@ -116,3 +117,7 @@ def validate_files(base_path: str, filelist: List[tuple], hash_type='sha1') -> I
def clean_filename(filename): def clean_filename(filename):
return ''.join(i for i in filename if i not in '<>:"/\\|?*') return ''.join(i for i in filename if i not in '<>:"/\\|?*')
def get_dir_size(path):
return sum(f.stat().st_size for f in Path(path).glob('**/*') if f.is_file())