summaryrefslogblamecommitdiff
path: root/game/3rdparty/manaplus.rpy
blob: d9432dffe6859ddddf4eafe6908db064dcd416d5 (plain) (tree)


















                                                                                 



                                                           
                                                            
                                                   
                                   

                                                        
 
                                                      


                                                                           
                                                      












                                                           



                                





                                                                 
                                                         


                                                                                    


                                                      
 



                                                                              







                                                                 




                                                                        


                                   
                                                               










                                                                                                                                                                                                 
                                                                                     







                                                                                      

                                                     


                                                                            
                                                        






















                                                               
#################################################################################
#     This file is part of Mana Launcher.
#     Copyright (C) 2021  Jesusalva <jesusalva@tmw2.org>
#
#     Distributed under the MIT license.
#     Warning: Third Party game clients
#################################################################################

init 1 python:
    #############################################################################
    def download_manaplus(fname):
            installdir=get_path("manaplus")
            status_update("Downloading %s on RAM..." % fname, 62)
            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)
            r=requests.get(persistent.host+"/%s.md5" % fname, timeout=10.0)
            md5up=r.text.replace("\n", "")

            status_update("Verifying MD5 hash...", 71)
            md5us=md5sum(installdir+"/%s" % fname)
            if md5up != md5us:
                status_update("MD5 Hash Error")
                stdout("MD5 Mismatch: hashes differ", True)
                stdout("Ours: %s" % md5us, True)
                stdout("Them: %s" % md5up, True)
                return False
            return True

    #######################
    def install_manaplus():
        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_manaplus("ManaPlus.AppImage"):
                return False

            status_update("Marking as executable...", 72)
            execute("chmod +x \"%s\"" % installdir+"/ManaPlus.AppImage", shell=True)
            status_update("Installation successful!", 75)
        #########################################################
        #elif renpy.windows:
        #    if not download_manaplus("ManaPlus.zip"):
        #        return False

        #    status_update("Unzipping file...", 72)
        #    with zipfile.ZipFile(installdir+"/ManaPlus.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_manaplus(launch=False, download=True, force=False):
        global SCR_PROMPT, SCR_RESULT
        ## Check if ManaPlus 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}" %
            ("ManaPlus", "https://gitlab.com/manaplus/manaplus/-/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_manaplus():
                    # 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")+"/ManaPlus.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