Merge pull request #57 from 4k1/feature/forum#571_sync_ra_config

forum#571/Implemented to sync keymap for RetroArch
This commit is contained in:
GNU 2018-07-27 09:31:10 +08:00 committed by GitHub
commit 76b411388b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,9 @@
# -*- coding: utf-8 -*-
import pygame
import commands
import commands
import shutil
import os
from libs.roundrects import aa_round_rect
from UI.constants import Width,Height,ICON_TYPES
@ -15,9 +17,138 @@ from UI.icon_pool import MyIconPool
from UI.icon_item import IconItem
from UI.multi_icon_item import MultiIconItem
from UI.multilabel import MultiLabel
from UI.confirm_page import ConfirmPage
class UpdateConfirmPage(ConfirmPage):
_ConfirmText = "Apply to RetroArch?"
_RetroArchConf = "/home/cpi/.config/retroarch/retroarch.cfg"
_LayoutMode = "Unknown"
_DownloadPage = None
_URL = ""
_MD5 = ""
_Version = ""
_GIT = False
def ModifyRetroArchConf(self,keys):
try:
with open(self._RetroArchConf, mode="r") as f:
confarr = f.readlines()
except:
return "retroarch.cfg cannot open."
bka = bkb = bkx = bky = False
try:
for i, ln in enumerate(confarr):
lnk = ln.split("=")[0].strip()
if lnk == "input_player1_a":
confarr[i] = "input_player1_a = \"" + keys[0] + "\"\n"
bka = True
if lnk == "input_player1_b":
confarr[i] = "input_player1_b = \"" + keys[1] + "\"\n"
bkb = True
if lnk == "input_player1_x":
confarr[i] = "input_player1_x = \"" + keys[2] + "\"\n"
bkx = True
if lnk == "input_player1_y":
confarr[i] = "input_player1_y = \"" + keys[3] + "\"\n"
bky = True
except:
return "retroarch.cfg cannot parse."
if bka and bkb and bkx and bky:
None
else:
return "retroarch.cfg validation error."
try:
with open(self._RetroArchConf, mode="w") as f:
confarr = f.writelines(confarr)
except:
return "retroarch.cfg cannot write."
return "Completed! Your RA keymap: " + self._LayoutMode.upper()
def KeyDown(self,event):
def finalizeWithDialog(msg):
self._Screen._MsgBox.SetText(msg)
self._Screen._MsgBox.Draw()
self._Screen.SwapAndShow()
return
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
self.ReturnToUpLevelPage()
self._Screen.Draw()
self._Screen.SwapAndShow()
if event.key == CurKeys["B"]:
if self._LayoutMode == "xbox":
keymap = ["j","k","u","i"]
elif self._LayoutMode == "snes":
keymap = ["k","j","i","u"]
else:
return "Internal error."
print("mode: " + self._LayoutMode)
if not os.path.isfile(self._RetroArchConf):
finalizeWithDialog("retroarch.cfg was not found.")
return
try:
shutil.copyfile(self._RetroArchConf, self._RetroArchConf + ".blbak")
except:
finalizeWithDialog("Cannot create .blbak")
return
finalizeWithDialog(self.ModifyRetroArchConf(keymap))
return
self.ReturnToUpLevelPage()
self._Screen.Draw()
self._Screen.SwapAndShow()
return
if self._GIT == True:
cmdpath = "feh --bg-center /home/cpi/apps/launcher/sys.py/gameshell/wallpaper/updating.png; cd /home/cpi/apps/launcher ;git pull; git reset --hard %s ; feh --bg-center /home/cpi/apps/launcher/sys.py/gameshell/wallpaper/loading.png " % self._Version
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
self._GIT = False
return
if self._DownloadPage == None:
self._DownloadPage = UpdateDownloadPage()
self._DownloadPage._Screen = self._Screen
self._DownloadPage._Name = "Downloading..."
self._DownloadPage.Init()
self._DownloadPage._MD5 = self._MD5
self._Screen.PushPage(self._DownloadPage)
self._Screen.Draw()
self._Screen.SwapAndShow()
if self._URL != None and validators.url(self._URL):
self._DownloadPage.StartDownload(self._URL, "/tmp")
else:
print "error url %s " % self._URL
def OnReturnBackCb(self):
self.ReturnToUpLevelPage()
self._Screen.Draw()
self._Screen.SwapAndShow()
def Draw(self):
self.ClearCanvas()
self.DrawBG()
for i in self._MyList:
i.Draw()
self.Reset()
class ButtonsLayoutPage(Page):
_FootMsg = ["Nav.","","","Back","Toggle"]
_FootMsg = ["Nav.","UpdateRetroArch","","Back","Toggle"]
_MyList = []
_ListFontObj = fonts["varela13"]
@ -30,6 +161,7 @@ class ButtonsLayoutPage(Page):
_DrawOnce = False
_Scroller = None
_ConfirmPage = None
_EasingDur = 30
@ -72,6 +204,14 @@ class ButtonsLayoutPage(Page):
self._Scroller.Init()
self._Scroller.SetCanvasHWND(self._HWND)
self._ConfirmPage = UpdateConfirmPage()
self._ConfirmPage._LayoutMode = self.GetButtonsLayoutMode()
self._ConfirmPage._Screen = self._Screen
self._ConfirmPage._Name = "Overwrite RA conf"
self._ConfirmPage._Parent = self
self._ConfirmPage.Init()
def ScrollDown(self):
dis = 10
if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 0:
@ -137,6 +277,12 @@ class ButtonsLayoutPage(Page):
if event.key == CurKeys["B"]:
self.ToggleMode()
if event.key == CurKeys["X"]:
self._ConfirmPage._LayoutMode = self.GetButtonsLayoutMode()
self._Screen.PushPage(self._ConfirmPage)
self._Screen.Draw()
self._Screen.SwapAndShow()
def Draw(self):
self.ClearCanvas()