mirror of
https://github.com/bombsquad-community/plugin-manager.git
synced 2025-11-07 17:36:00 +00:00
Move MD5 checksum logic to sync fn
This commit is contained in:
parent
666fbadcb4
commit
71d8a4d8bc
1 changed files with 44 additions and 20 deletions
|
|
@ -50,7 +50,7 @@ async def async_send_network_request(request):
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def stream_network_response_to_file(request, file):
|
def stream_network_response_to_file(request, file, md5sum=None, retries=3):
|
||||||
response = urllib.request.urlopen(request)
|
response = urllib.request.urlopen(request)
|
||||||
chunk_size = 16 * 1024
|
chunk_size = 16 * 1024
|
||||||
content = b""
|
content = b""
|
||||||
|
|
@ -61,17 +61,11 @@ def stream_network_response_to_file(request, file):
|
||||||
break
|
break
|
||||||
fout.write(chunk)
|
fout.write(chunk)
|
||||||
content += chunk
|
content += chunk
|
||||||
return content
|
|
||||||
|
|
||||||
|
|
||||||
async def async_stream_network_response_to_file(request, file, md5sum=None, retries=3):
|
|
||||||
loop = asyncio.get_event_loop()
|
|
||||||
content = await loop.run_in_executor(None, stream_network_response_to_file, request, file)
|
|
||||||
if md5sum and hashlib.md5(content).hexdigest() != md5sum:
|
if md5sum and hashlib.md5(content).hexdigest() != md5sum:
|
||||||
if retries <= 0:
|
if retries <= 0:
|
||||||
# TODO: Raise a more fitting exception.
|
# TODO: Raise a more fitting exception.
|
||||||
raise TypeError("md5sum match failed")
|
raise TypeError("MD5 checksum match failed. Please raise an issue on GitHub.")
|
||||||
return await async_stream_network_response_to_file(
|
return stream_network_response_to_file(
|
||||||
request,
|
request,
|
||||||
file,
|
file,
|
||||||
md5sum=md5sum,
|
md5sum=md5sum,
|
||||||
|
|
@ -80,6 +74,19 @@ async def async_stream_network_response_to_file(request, file, md5sum=None, retr
|
||||||
return content
|
return content
|
||||||
|
|
||||||
|
|
||||||
|
async def async_stream_network_response_to_file(request, file, md5sum=None, retries=3):
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
content = await loop.run_in_executor(
|
||||||
|
None,
|
||||||
|
stream_network_response_to_file,
|
||||||
|
request,
|
||||||
|
file,
|
||||||
|
md5sum,
|
||||||
|
retries,
|
||||||
|
)
|
||||||
|
return content
|
||||||
|
|
||||||
|
|
||||||
def play_sound():
|
def play_sound():
|
||||||
ba.playsound(ba.getsound('swish'))
|
ba.playsound(ba.getsound('swish'))
|
||||||
|
|
||||||
|
|
@ -453,12 +460,13 @@ class PluginLocal:
|
||||||
self._content = content
|
self._content = content
|
||||||
return self
|
return self
|
||||||
|
|
||||||
async def set_content_from_network_response(self, request, md5sum=None):
|
async def set_content_from_network_response(self, request, md5sum=None, retries=3):
|
||||||
if not self._content:
|
if not self._content:
|
||||||
self._content = await async_stream_network_response_to_file(
|
self._content = await async_stream_network_response_to_file(
|
||||||
request,
|
request,
|
||||||
self.install_path,
|
self.install_path,
|
||||||
md5sum=md5sum,
|
md5sum=md5sum,
|
||||||
|
retries=retries,
|
||||||
)
|
)
|
||||||
return self._content
|
return self._content
|
||||||
|
|
||||||
|
|
@ -491,17 +499,29 @@ class PluginVersion:
|
||||||
|
|
||||||
async def _download(self, retries=3):
|
async def _download(self, retries=3):
|
||||||
local_plugin = self.plugin.create_local()
|
local_plugin = self.plugin.create_local()
|
||||||
await local_plugin.set_content_from_network_response(self.download_url, md5sum=self.md5sum)
|
await local_plugin.set_content_from_network_response(
|
||||||
|
self.download_url,
|
||||||
|
md5sum=self.md5sum,
|
||||||
|
retries=retries,
|
||||||
|
)
|
||||||
local_plugin.set_version(self.number)
|
local_plugin.set_version(self.number)
|
||||||
local_plugin.save()
|
local_plugin.save()
|
||||||
return local_plugin
|
return local_plugin
|
||||||
|
|
||||||
async def install(self):
|
async def install(self, suppress_screenmessage=False):
|
||||||
local_plugin = await self._download()
|
try:
|
||||||
ba.screenmessage(f"{self.plugin.name} installed", color=(0, 1, 0))
|
local_plugin = await self._download()
|
||||||
check = ba.app.config["Community Plugin Manager"]["Settings"]
|
except TypeError:
|
||||||
if check["Auto Enable Plugins After Installation"]:
|
if not suppress_screenmessage:
|
||||||
await local_plugin.enable()
|
ba.screenmessage(f"{self.plugin.name} failed MD5 checksum during installation", color=(1, 0, 0))
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
if not suppress_screenmessage:
|
||||||
|
ba.screenmessage(f"{self.plugin.name} installed", color=(0, 1, 0))
|
||||||
|
check = ba.app.config["Community Plugin Manager"]["Settings"]
|
||||||
|
if check["Auto Enable Plugins After Installation"]:
|
||||||
|
await local_plugin.enable()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class Plugin:
|
class Plugin:
|
||||||
|
|
@ -588,9 +608,13 @@ class Plugin:
|
||||||
return self.get_local().version != self.latest_compatible_version.number
|
return self.get_local().version != self.latest_compatible_version.number
|
||||||
|
|
||||||
async def update(self):
|
async def update(self):
|
||||||
await self.latest_compatible_version.install()
|
if await self.latest_compatible_version.install(suppress_screenmessage=True):
|
||||||
ba.screenmessage(f"{self.name} updated to {self.latest_compatible_version.number}",
|
ba.screenmessage(f"{self.name} updated to {self.latest_compatible_version.number}",
|
||||||
color=(0, 1, 0))
|
color=(0, 1, 0))
|
||||||
|
else:
|
||||||
|
ba.screenmessage(f"{self.name} failed MD5 checksum while updating to "
|
||||||
|
f"{self.latest_compatible_version.number}",
|
||||||
|
color=(1, 0, 0))
|
||||||
|
|
||||||
|
|
||||||
class PluginWindow(popup.PopupWindow):
|
class PluginWindow(popup.PopupWindow):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue