diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ac875f42..a0a899c85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +# v1.7.1 (_15-04-2023_) + +## Added + - New UI feel with the new RomM color palette +## Changed + - Roms size is now human readable +## Fixed + - Fixed a bug where multi file roms could break the scan if the rom name have a dot. + +
+ # v1.7 (_14-04-2023_) ## Added @@ -7,6 +18,8 @@ - Rom details page revamped - RomM logo revamped +
+ # v1.6.5 (_12-04-2023_) ## Added diff --git a/backend/src/alembic/versions/1.7.1_.py b/backend/src/alembic/versions/1.7.1_.py new file mode 100644 index 000000000..b53666d11 --- /dev/null +++ b/backend/src/alembic/versions/1.7.1_.py @@ -0,0 +1,28 @@ +"""empty message + +Revision ID: 1.7.1 +Revises: 1.6.3 +Create Date: 2023-04-15 02:28:24.023871 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '1.7.1' +down_revision = '1.6.3' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('roms', sa.Column('file_size_units', sa.String(length=10), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('roms', 'file_size_units') + # ### end Alembic commands ### diff --git a/backend/src/models/rom.py b/backend/src/models/rom.py index a22ac19ab..d499ae1b6 100644 --- a/backend/src/models/rom.py +++ b/backend/src/models/rom.py @@ -18,6 +18,7 @@ class Rom(BaseModel): file_extension = Column(String(length=10), default="") file_path = Column(String(length=1000), default="") file_size = Column(Float, default=0.0) + file_size_units = Column(String(length=10), default="") name = Column(String(length=350), default="") r_slug = Column(String(length=100), default="") diff --git a/backend/src/utils/fs.py b/backend/src/utils/fs.py index 96e47ad13..9e3bb929d 100644 --- a/backend/src/utils/fs.py +++ b/backend/src/utils/fs.py @@ -127,20 +127,27 @@ def parse_tags(file_name: str) -> tuple: return reg, rev, other_tags -def _get_file_extension(file: str) -> str: - return file.split('.')[-1] if '.' in file else '' +def _get_file_extension(rom: dict) -> str: + return rom['file'].split('.')[-1] if not rom['multi'] else '' def _get_rom_files(multi: bool, rom: str, roms_path: str) -> list[str]: return [] if not multi else _exclude_multi_roms_parts(list(os.walk(f"{roms_path}/{rom}"))[0][2]) +def _convert_size_human_readable(size, decimals=2) -> tuple: + for unit in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']: + if size < 1024.0 or unit == 'PB': break + size /= 1024.0 + return round(size, 2), unit + + def _get_file_size(multi: bool, rom: str, files: list, roms_path:str) -> str: files: list = [f"{roms_path}/{rom}"] if not multi else [f"{roms_path}/{rom}/{file}" for file in files] - total_size: float = 0.0 + total_size: int = 0 for file in files: - total_size += round(os.stat(file).st_size / (1024 * 1024), 2) - return str(total_size) + total_size += os.stat(file).st_size + return _convert_size_human_readable(total_size) def get_roms(p_slug: str, full_scan: bool, only_amount: bool = False) -> list[dict]: @@ -167,10 +174,11 @@ def get_roms(p_slug: str, full_scan: bool, only_amount: bool = False) -> list[di for rom in fs_roms: if rom['file'] in db_roms and not full_scan and not rom['multi']: continue reg, rev, other_tags = parse_tags(rom['file']) - file_extension: str = _get_file_extension(rom['file']) + file_extension: str = _get_file_extension(rom) files: list = _get_rom_files(rom['multi'], rom['file'], roms_path) - file_size: str = _get_file_size(rom['multi'], rom['file'], files, roms_path) - roms.append({'file_name': rom['file'], 'file_path': roms_path, 'multi': rom['multi'], 'files': files, 'file_size': file_size, 'file_extension': file_extension, + file_size, file_size_units = _get_file_size(rom['multi'], rom['file'], files, roms_path) + roms.append({'file_name': rom['file'], 'file_path': roms_path, 'multi': rom['multi'], + 'files': files, 'file_size': file_size, 'file_size_units': file_size_units, 'file_extension': file_extension, 'region': reg, 'revision': rev, 'tags': other_tags}) return roms diff --git a/frontend/.env b/frontend/.env index ad700cbb2..481f0e387 100644 --- a/frontend/.env +++ b/frontend/.env @@ -1 +1 @@ -VITE_ROMM_VERSION=1.7 \ No newline at end of file +VITE_ROMM_VERSION=1.7.1 \ No newline at end of file diff --git a/frontend/assets/romm.svg b/frontend/assets/romm.svg index c9bd21867..cff16aa75 100644 --- a/frontend/assets/romm.svg +++ b/frontend/assets/romm.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/assets/romm_complete.svg b/frontend/assets/romm_complete.svg new file mode 100644 index 000000000..c9bd21867 --- /dev/null +++ b/frontend/assets/romm_complete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f4ca3032c..fbe4d17fb 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "romm", - "version": "1.7", + "version": "1.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "romm", - "version": "1.7", + "version": "1.7.1", "dependencies": { "@mdi/font": "7.0.96", "axios": "^1.3.4", diff --git a/frontend/package.json b/frontend/package.json index f88aa0e07..f3e9cc81a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "romm", - "version": "1.7", + "version": "1.7.1", "private": true, "scripts": { "dev": "vite --host", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index c38c41017..d826b65b7 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -7,7 +7,7 @@ import SettingsDrawer from '@/components/SettingsDrawer/Base.vue' import Notification from '@/components/Notification.vue' // Props -useTheme().global.name.value = localStorage.getItem('theme') || 'dark' +useTheme().global.name.value = localStorage.getItem('theme') || 'rommDark' const refresh = ref(false) // Event listeners bus @@ -18,7 +18,7 @@ emitter.on('refresh', () => { refresh.value = !refresh.value })