from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path

ROOT = Path(__file__).resolve().parent

class RangeHandler(SimpleHTTPRequestHandler):
    def send_head(self):
        path = str(ROOT / Path(self.path.lstrip('/')).name)
        if self.path.endswith('.apk') and self.headers.get('Range'):
            import os
            size = os.path.getsize(path)
            raw = self.headers['Range'].removeprefix('bytes=').split('-', 1)
            start = int(raw[0] or 0)
            end = int(raw[1]) if len(raw) > 1 and raw[1] else size - 1
            end = min(end, size - 1)
            if start > end or start >= size:
                self.send_error(416)
                return None
            self.send_response(206)
            self.send_header('Content-type', 'application/vnd.android.package-archive')
            self.send_header('Content-Length', str(end - start + 1))
            self.send_header('Content-Range', f'bytes {start}-{end}/{size}')
            self.end_headers()
            self.range = (start, end)
            return open(path, 'rb')
        return super().send_head()

    def copyfile(self, source, outputfile):
        if hasattr(self, 'range'):
            source.seek(self.range[0])
            outputfile.write(source.read(self.range[1] - self.range[0] + 1))
        else:
            super().copyfile(source, outputfile)

import os
os.chdir(ROOT)
ThreadingHTTPServer(('192.168.68.98', 18326), RangeHandler).serve_forever()
