1
0
mirror of https://github.com/gryf/fs-uae-wrapper.git synced 2025-12-19 12:28:12 +01:00

Added wrapper_archiver option

To give user a possibility to choose what archiver he can use another
options was introduced for cd32 and archive wrapper modules. This option
will indicate what archiver should be used for compressing the save
state directories.
This commit is contained in:
2017-01-02 20:08:50 +01:00
parent 5f98e9b794
commit 19acb789b6
6 changed files with 82 additions and 19 deletions

View File

@@ -112,6 +112,41 @@ class RarArchive(Archive):
return True
class Archivers(object):
"""Archivers class"""
archivers = [{'arch': TarArchive, 'name': 'tar', 'ext': ['tar']},
{'arch': TarGzipArchive, 'name': 'tgz',
'ext': ['tar.gz', 'tgz']},
{'arch': TarBzip2Archive, 'name': 'tar.bz2',
'ext': ['tar.bz2']},
{'arch': TarXzArchive, 'name': 'tar.xz', 'ext': ['tar.xz']},
{'arch': RarArchive, 'name': 'rar', 'ext': ['rar']},
{'arch': SevenZArchive, 'name': '7z', 'ext': ['7z']},
{'arch': ZipArchive, 'name': 'zip', 'ext': ['zip']},
{'arch': LhaArchive, 'name': 'lha', 'ext': ['lha', 'lzh']},
{'arch': LzxArchive, 'name': 'lzx', 'ext': ['lzx']}]
@classmethod
def get(cls, extension):
"""
Get the archive class or None
"""
for arch in cls.archivers:
if extension in arch['ext']:
return arch['arch']
return None
@classmethod
def get_extension_by_name(cls, name):
"""
Get the first defined extension for the archive format
"""
for arch in cls.archivers:
if name == arch['name']:
return '.' + arch['ext'][0]
return None
def get_archiver(arch_name):
"""Return right class for provided archive file name"""
@@ -122,18 +157,10 @@ def get_archiver(arch_name):
if result:
ext = result.groups()[0]
archivers = {'.tar': TarArchive,
'.tgz': TarGzipArchive,
'.tar.gz': TarGzipArchive,
'.tar.bz2': TarBzip2Archive,
'.tar.xz': TarXzArchive,
'.rar': RarArchive,
'.7z': SevenZArchive,
'.zip': ZipArchive,
'.lha': LhaArchive,
'.lzx': LzxArchive}
if ext:
ext = ext[1:]
archiver = archivers.get(ext)
archiver = Archivers.get(ext)
if not archiver:
sys.stderr.write("Unable find archive type for `%s'\n" % arch_name)
return None