From 2e2851dc13d73352530dd4495c7e05603b2e520d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 23:38:38 +0200 Subject: Adding upstream version 2.1.2~dev0+20240219. Signed-off-by: Daniel Baumann --- .../plugins/Blocklist/deluge_blocklist/detect.py | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 deluge/plugins/Blocklist/deluge_blocklist/detect.py (limited to 'deluge/plugins/Blocklist/deluge_blocklist/detect.py') diff --git a/deluge/plugins/Blocklist/deluge_blocklist/detect.py b/deluge/plugins/Blocklist/deluge_blocklist/detect.py new file mode 100644 index 0000000..43ad305 --- /dev/null +++ b/deluge/plugins/Blocklist/deluge_blocklist/detect.py @@ -0,0 +1,48 @@ +# +# Copyright (C) 2009-2010 John Garland +# +# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with +# the additional special exception to link portions of this program with the OpenSSL library. +# See LICENSE for more details. +# + +from .decompressers import BZipped2, GZipped, Zipped +from .readers import EmuleReader, PeerGuardianReader, SafePeerReader + +COMPRESSION_TYPES = {b'PK': 'Zip', b'\x1f\x8b': 'GZip', b'BZ': 'BZip2'} + +DECOMPRESSERS = {'Zip': Zipped, 'GZip': GZipped, 'BZip2': BZipped2} + +READERS = { + 'Emule': EmuleReader, + 'SafePeer': SafePeerReader, + 'PeerGuardian': PeerGuardianReader, +} + + +class UnknownFormatError(Exception): + pass + + +def detect_compression(filename): + with open(filename, 'rb') as _file: + magic_number = _file.read(2) + return COMPRESSION_TYPES.get(magic_number, '') + + +def detect_format(filename, compression=''): + file_format = '' + for reader in READERS: + if create_reader(reader, compression)(filename).is_valid(): + file_format = reader + break + return file_format + + +def create_reader(file_format, compression=''): + reader = READERS.get(file_format) + if reader and compression: + decompressor = DECOMPRESSERS.get(compression) + if decompressor: + reader = decompressor(reader) + return reader -- cgit v1.2.3