################################################################################# # This file is part of Mana Launcher. # Copyright (C) 2021 Jesusalva # # Distributed under the MIT license. # Warning: Third Party game clients ################################################################################# ####### Constants define manaverseWin64 = "https://updates.tmw2.org/mana/windows/manaverse.zip" define manaverseLinux = "https://updates.tmw2.org/mana/linux/ManaPlus-x86_64.AppImage" ####### Main Code init 1 python: ############################################################################# def download_manaverse(fname): installdir=get_path("manaplus") status_update("Downloading %s on RAM..." % fname, 62) ## TODO: use `stream=True` if renpy.linux: r=requests.get(manaverseLinux, timeout=60.0) elif renpy.windows: r=requests.get(manaverseWin64, timeout=60.0) else: r=requests.get(persistent.host+"/%s" % fname, timeout=60.0) if (r.status_code != 200): status_update("Failure retrieving M+: ERROR %d" % r.status_code) return False status_update("Saving %s..." %fname, 64) msize = int(r.headers.get('content-length', 0)) bsize = 4096 csize = msize / 7 cstep = 0 with open(installdir+"/%s" % fname, 'wb') as fd: for chunk in r.iter_content(bsize): fd.write(chunk) cstep += bsize status_update(pc=64+(cstep / csize)) status_update("Verifying MD5 hash...", 70) if not md5check_client(True): status_update("MD5 Hash Error") stdout("MD5 Mismatch: hashes diverged", True) return False return True ####################### def install_manaverse(): status_update("Creating ManaPlus directory...", 61) installdir=get_path("manaplus") try: os.mkdir(installdir) except OSError: pass ## Detect your plataform ######################################################### if renpy.linux: if not download_manaverse("ManaVerse.AppImage"): return False status_update("Marking as executable...", 72) execute("chmod +x \"%s\"" % installdir+"/ManaVerse.AppImage", shell=True) status_update("Installation successful!", 75) ######################################################### elif renpy.windows: """ if not download_manaverse("ManaPlus.zip"): return False status_update("Unzipping file...", 72) with zipfile.ZipFile(installdir+"/ManaPlus.zip", 'r') as zip_ref: zip_ref.extractall(installdir) """ if not download_manaverse("manaverse.zip"): return False status_update("Unzipping file...", 72) with zipfile.ZipFile(installdir+"/manaverse.zip", 'r') as zip_ref: zip_ref.extractall(installdir) status_update("Installation successful!", 75) ######################################################### #elif renpy.android: #elif renpy.macintosh: #elif renpy.emscripten: # web ######################################################### else: status_update("ERROR: Unsupported Plataform") return False try: shutil.copytree(get_path('')+"Config", installdir+"/Config") except OSError: traceback.print_exc() pass return True ############################### def cli_manaverse(launch=False, download=True, force=False): global SCR_PROMPT, SCR_RESULT ## Check if ManaPlus or ManaVerse is already installed try: MANAPLUS=os.path.exists(get_path("manaplus")) except: traceback.print_exc() MANAPLUS=False ## Installer if not MANAPLUS and download: SCR_PROMPT=("Selected client \"%s\" is not installed.\nDo you wish to install it now?\n\n{size=14}By installing you agree with its {a=%s}Terms of Use and Conditions{/a}.%s{/size}" % ("ManaVerse", "https://git.themanaworld.org/mana/plus/-/raw/master/COPYING", ifte(renpy.linux, "\n{i}libfuse2{/i} is required to run AppImages.", ""))) while SCR_RESULT is None: time.sleep(0.02) ret=copy.copy(SCR_RESULT) SCR_RESULT=None if (not ret): return False ## Actual download/installation (for updates) if download and (force or not MANAPLUS): try: if not install_manaverse(): # Delete the failed attempt before raising the exception #shutil.rmtree(get_path("manaplus")) #os.rmdir(get_path("manaplus")) raise Exception("Installation failed!") except: traceback.print_exc() stdout("Installation failed!", True) return False elif not MANAPLUS: return False ########## if launch: if renpy.linux: os.environ["APPIMAGELAUNCHER_DISABLE"]="1" pathy=get_path("manaplus")+"/ManaVerse.AppImage" return pathy.replace(" ", "\\ ") elif renpy.windows: pathy=get_path("manaplus")+"/Mana/manaplus.exe" return pathy.replace("/", "\\") else: stdout("Invalid Plataform!") return False return True