mirror of
https://github.com/outbackdingo/OpCore-Simplify.git
synced 2026-08-25 14:53:06 +00:00
Add internet connection check and rewrite some parts
This commit is contained in:
Executable → Regular
+36
-33
@@ -1,8 +1,8 @@
|
|||||||
import sys
|
|
||||||
import ssl
|
|
||||||
import os
|
import os
|
||||||
import plistlib
|
|
||||||
import json
|
import json
|
||||||
|
import plistlib
|
||||||
|
import socket
|
||||||
|
import sys
|
||||||
|
|
||||||
if sys.version_info >= (3, 0):
|
if sys.version_info >= (3, 0):
|
||||||
from urllib.request import urlopen, Request
|
from urllib.request import urlopen, Request
|
||||||
@@ -11,26 +11,17 @@ else:
|
|||||||
from urllib2 import urlopen, Request
|
from urllib2 import urlopen, Request
|
||||||
|
|
||||||
class ResourceFetcher:
|
class ResourceFetcher:
|
||||||
def __init__(self, headers=None):
|
def __init__(self, headers={}):
|
||||||
self.request_headers = headers
|
self.request_headers = headers
|
||||||
self.buffer_size = 16 * 1024
|
self.buffer_size = 16 * 1024
|
||||||
self.ssl_context = self.create_ssl_context()
|
|
||||||
|
|
||||||
def create_ssl_context(self):
|
def is_connected(self, timeout=5):
|
||||||
try:
|
socket.create_connection(("github.com", 443), timeout=timeout)
|
||||||
cafile = ssl.get_default_verify_paths().openssl_cafile
|
|
||||||
if not os.path.exists(cafile):
|
|
||||||
import certifi
|
|
||||||
cafile = certifi.where()
|
|
||||||
ssl_context = ssl.create_default_context(cafile=cafile)
|
|
||||||
except Exception as e:
|
|
||||||
print("SSL Context Creation Error: {}".format(e))
|
|
||||||
ssl_context = ssl._create_unverified_context()
|
|
||||||
return ssl_context
|
|
||||||
|
|
||||||
def fetch_and_parse_content(self, resource_url, content_type=None):
|
def fetch_and_parse_content(self, resource_url, content_type=None):
|
||||||
request = Request(resource_url, headers=self.request_headers or {})
|
self.is_connected()
|
||||||
with urlopen(request, context=self.ssl_context) as response:
|
|
||||||
|
with urlopen(resource_url) as response:
|
||||||
content = response.read()
|
content = response.read()
|
||||||
if content_type == 'json':
|
if content_type == 'json':
|
||||||
return json.loads(content)
|
return json.loads(content)
|
||||||
@@ -39,19 +30,31 @@ class ResourceFetcher:
|
|||||||
else:
|
else:
|
||||||
return content.decode('utf-8')
|
return content.decode('utf-8')
|
||||||
|
|
||||||
def download_and_save_file(self, resource_url, destination_path):
|
def _download_with_progress(self, response, local_file):
|
||||||
request = Request(resource_url, headers=self.request_headers or {})
|
total_size = response.getheader('Content-Length')
|
||||||
with urlopen(request, context=self.ssl_context) as response:
|
if total_size:
|
||||||
total_size = response.length
|
total_size = int(total_size)
|
||||||
bytes_downloaded = 0
|
bytes_downloaded = 0
|
||||||
print("Download from {}".format(resource_url))
|
|
||||||
|
|
||||||
with open(destination_path, 'wb') as file_writer:
|
while True:
|
||||||
while True:
|
chunk = response.read(self.buffer_size)
|
||||||
chunk = response.read(self.buffer_size)
|
if not chunk:
|
||||||
if not chunk:
|
break
|
||||||
break
|
local_file.write(chunk)
|
||||||
file_writer.write(chunk)
|
bytes_downloaded += len(chunk)
|
||||||
bytes_downloaded += len(chunk)
|
|
||||||
if total_size:
|
if total_size:
|
||||||
print("Downloaded {:.2f} MB of {:.2f} MB".format(bytes_downloaded / (1024 * 1024), total_size / (1024 * 1024)), end='\r')
|
percent = int(bytes_downloaded / total_size * 100)
|
||||||
|
progress = f"[{'=' * (percent // 2):50s}] {percent}% {bytes_downloaded / (1024 * 1024):.2f}/{total_size / (1024 * 1024):.2f} MB"
|
||||||
|
else:
|
||||||
|
progress = f"Downloaded {bytes_downloaded / (1024 * 1024):.2f} MB"
|
||||||
|
print(progress, end='\r')
|
||||||
|
|
||||||
|
print()
|
||||||
|
|
||||||
|
def download_and_save_file(self, resource_url, destination_path):
|
||||||
|
self.is_connected()
|
||||||
|
|
||||||
|
with urlopen(resource_url) as response, open(destination_path, 'wb') as local_file:
|
||||||
|
print(f"Downloading from {resource_url}")
|
||||||
|
self._download_with_progress(response, local_file)
|
||||||
Reference in New Issue
Block a user