Merge branch 'updater' into develop
This commit is contained in:
@@ -59,6 +59,10 @@ class Config:
|
||||
def GITHUB_URL(self):
|
||||
return self._GITHUB_URL
|
||||
|
||||
@property
|
||||
def UPDATER_URL(self):
|
||||
return self._UPDATER_URL
|
||||
|
||||
@property
|
||||
def BOOTH_URL(self):
|
||||
return self._BOOTH_URL
|
||||
@@ -957,6 +961,7 @@ class Config:
|
||||
self._PATH_LOGS = os_path.join(self._PATH_LOCAL, "logs")
|
||||
os_makedirs(self._PATH_LOGS, exist_ok=True)
|
||||
self._GITHUB_URL = "https://api.github.com/repos/misyaguziya/VRCT/releases/latest"
|
||||
self._UPDATER_URL = "https://api.github.com/repos/misyaguziya/VRCT_updater/releases/latest"
|
||||
self._BOOTH_URL = "https://misyaguziya.booth.pm/"
|
||||
self._DOCUMENTS_URL = "https://mzsoftware.notion.site/VRCT-Documents-be79b7a165f64442ad8f326d86c22246"
|
||||
self._DEEPL_AUTH_KEY_PAGE_URL = "https://www.deepl.com/ja/account/summary"
|
||||
|
||||
52
model.py
52
model.py
@@ -316,51 +316,25 @@ class Model:
|
||||
|
||||
@staticmethod
|
||||
def updateSoftware(restart:bool=True, func=None):
|
||||
def updateSoftwareTask():
|
||||
filename = 'VRCT.zip'
|
||||
program_name = 'VRCT.exe'
|
||||
folder_name = '_internal'
|
||||
tmp_directory_name = 'tmp'
|
||||
batch_name = 'update.bat'
|
||||
current_directory = config.PATH_LOCAL
|
||||
|
||||
# try to update at most 5 times
|
||||
for _ in range(5):
|
||||
try:
|
||||
res = requests_get(config.GITHUB_URL)
|
||||
program_name = "update.exe"
|
||||
current_directory = config.PATH_LOCAL
|
||||
res = requests_get(config.UPDATER_URL)
|
||||
assets = res.json()['assets']
|
||||
url = [i["browser_download_url"] for i in assets if i["name"] == filename][0]
|
||||
with tempfile.TemporaryDirectory() as tmp_path:
|
||||
res = requests_get(url, stream=True)
|
||||
file_size = int(res.headers.get('content-length', 0))
|
||||
total_chunk = 0
|
||||
with open(os_path.join(tmp_path, filename), 'wb') as file:
|
||||
for chunk in res.iter_content(chunk_size=1024*5):
|
||||
file.write(chunk)
|
||||
total_chunk += len(chunk)
|
||||
if isinstance(func, Callable):
|
||||
func(progress=total_chunk/file_size, progress_type="downloading")
|
||||
print(f"downloaded {total_chunk}/{file_size}")
|
||||
|
||||
with ZipFile(os_path.join(tmp_path, filename)) as zf:
|
||||
total_files = len(zf.infolist())
|
||||
extracted_files = 0
|
||||
for file_info in zf.infolist():
|
||||
extracted_files += 1
|
||||
zf.extract(file_info, os_path.join(current_directory, tmp_directory_name))
|
||||
if isinstance(func, Callable):
|
||||
func(progress=extracted_files/total_files, progress_type="extracting")
|
||||
print(f"extracted {extracted_files}/{total_files}")
|
||||
|
||||
copyfile(os_path.join(current_directory, folder_name, "batch", batch_name), os_path.join(current_directory, batch_name))
|
||||
command = [os_path.join(current_directory, batch_name), program_name, folder_name, tmp_directory_name, str(restart)]
|
||||
Popen(command, cwd=current_directory)
|
||||
url = [i["browser_download_url"] for i in assets if i["name"] == program_name][0]
|
||||
res = requests_get(url, stream=True)
|
||||
with open(os_path.join(current_directory, program_name), 'wb') as file:
|
||||
for chunk in res.iter_content(chunk_size=1024*5):
|
||||
file.write(chunk)
|
||||
break
|
||||
except Exception:
|
||||
import traceback
|
||||
with open('error.log', 'a') as f:
|
||||
traceback.print_exc(file=f)
|
||||
webbrowser.open(config.BOOTH_URL, new=2, autoraise=True)
|
||||
th_update_software = Thread(target=updateSoftwareTask)
|
||||
th_update_software.daemon = True
|
||||
th_update_software.start()
|
||||
# run updater
|
||||
Popen(program_name, cwd=current_directory)
|
||||
|
||||
@staticmethod
|
||||
def reStartSoftware():
|
||||
|
||||
Reference in New Issue
Block a user