From 557cd04b6453426501bcf9f7413b031e051beee5 Mon Sep 17 00:00:00 2001 From: cuu Date: Sun, 29 Dec 2019 00:30:03 +0800 Subject: [PATCH 1/3] Warehouse --- Menu/GameShell/21_Warehouse/__init__.py | 95 ++++++++++++------------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/Menu/GameShell/21_Warehouse/__init__.py b/Menu/GameShell/21_Warehouse/__init__.py index 13fc86e..610e76d 100644 --- a/Menu/GameShell/21_Warehouse/__init__.py +++ b/Menu/GameShell/21_Warehouse/__init__.py @@ -59,7 +59,6 @@ class RPCStack: class LoadHousePage(Page): _FootMsg = ["Nav.","","","Back","Cancel"] - _DownloaderTimer = -1 _Value = 0 _URL = None _ListFontObj = MyLangManager.TrFont("varela18") @@ -188,7 +187,6 @@ class LoadHousePage(Page): class ImageDownloadProcessPage(Page): _FootMsg = ["Nav.","","","Back",""] - _DownloaderTimer = -1 _Value = 0 _URL = None _ListFontObj = MyLangManager.TrFont("varela13") @@ -344,35 +342,36 @@ class Aria2DownloadProcessPage(Page): self._SizeLabel.Init("0/0Kb",MyLangManager.TrFont("varela12")) self._SizeLabel.SetColor( self._URLColor ) + @property def GObjectUpdateProcessInterval(self): + downloaded = 0 if self._Screen.CurPage() == self and self._GID is not None: self._Value = config.RPC.tellStatus(self._GID) - + downloaded = 0 total = 0 - - if self._Value["status"] == "waiting": - self._FileNameLabel.SetText( "waiting to download..." ) - if self._Value["status"] == "paused": - self._FileNameLabel.SetText( "download paused..." ) - if self._Value["status"] == "error": - self._FileNameLabel.SetText("download errors,cancel it please") - - if self._Value["status"] == "active": - downloaded = self._Value["completedLength"] - total = self._Value["totalLength"] - downloaded = downloaded/1000.0/1000.0 - total = total/1000.0/1000.0 - - self._SizeLabel.SetText( "%.2f" % downloaded+"/"+ "%.2f" % total +"Mb") - - print("Progress: %d%%" % (self._Value)) - self._Screen.Draw() - self._Screen.SwapAndShow() - return True - else: - return False + if self._Value["status"] == "waiting": + self._FileNameLabel.SetText("waiting to download...") + if self._Value["status"] == "paused": + self._FileNameLabel.SetText("download paused...") + if self._Value["status"] == "error": + self._FileNameLabel.SetText("download errors,cancel it please") + + if self._Value["status"] == "active": + downloaded = self._Value["completedLength"] + total = self._Value["totalLength"] + + downloaded = downloaded / 1000.0 / 1000.0 + total = total / 1000.0 / 1000.0 + + self._SizeLabel.SetText("%.2f" % downloaded+"/"+"%.2f" % total+"Mb") + + print("Progress: %d%%" % (self._Value)) + self._Screen.Draw() + self._Screen.SwapAndShow() + return True + def CheckDownload(self,aria2_gid): self._GID = aria2_gid @@ -549,14 +548,14 @@ class GameStorePage(Page): def __init__(self): Page.__init__(self) self._Icons = {} - self._MyStack = RPCStack() - #title file type + self._MyStack = RPCStack() + #title file type ## Two level url , only github.com repos = [ - {"title":"github.com/clockworkpi/warehouse","file":"https://raw.githubusercontent.com/clockworkpi/warehouse/master/index.json","type":"source"} - ] - self._MyStack.Push(repos) + {"title":"github.com/clockworkpi/warehouse","file":"https://raw.githubusercontent.com/clockworkpi/warehouse/master/index.json","type":"source"} + ] + self._MyStack.Push(repos) def GObjectUpdateProcessInterval(self): ret = True @@ -837,24 +836,24 @@ class GameStorePage(Page): # return print("cur_li._Value",cur_li._Value) - - if cur_li._Value["type"] == "source" or cur_li._Value["type"] == "dir": - remote_file_url = cur_li._Value["file"] - menu_file = remote_file_url.split("raw.githubusercontent.com")[1] #assume master branch - local_menu_file = "%s/aria2download%s" % (os.path.expanduser('~'),menu_file ) + + if cur_li._Value["type"] == "source" or cur_li._Value["type"] == "dir": + remote_file_url = cur_li._Value["file"] + menu_file = remote_file_url.split("raw.githubusercontent.com")[1] #assume master branch + local_menu_file = "%s/aria2download%s" % (os.path.expanduser('~'),menu_file ) print(local_menu_file) if FileExists( local_menu_file ) == False: self.LoadHouse() - else: + else: #read the local_menu_file, push into stack,display menu - self._Downloading = None + self._Downloading = None try: - with open(local_menu_file) as json_file: - local_menu_json = json.load(json_file) + with open(local_menu_file) as json_file: + local_menu_json = json.load(json_file) print(local_menu_json) - self._MyStack.Push(local_menu_json["list"]) - - self.SyncList() + self._MyStack.Push(local_menu_json["list"]) + + self.SyncList() self._Screen.Draw() self._Screen.SwapAndShow() except Exception as ex: @@ -862,23 +861,23 @@ class GameStorePage(Page): self._Screen._MsgBox.SetText("Open house failed ") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() - - elif cur_li._Value["type"] == "add_house": + + elif cur_li._Value["type"] == "add_house": print("show keyboard to add ware house") self._Screen.PushCurPage() self._Screen.SetCurPage( self._Keyboard ) else: - #download the game probably - remote_file_url = cur_li._Value["file"] + #download the game probably + remote_file_url = cur_li._Value["file"] menu_file = remote_file_url.split("raw.githubusercontent.com")[1] local_menu_file = "%s/aria2download%s" % (os.path.expanduser('~'),menu_file ) - if FileExists( local_menu_file ) == False: + if FileExists( local_menu_file ) == False: gid,ret = config.RPC.urlDownloading(remote_file_url) if ret == False: gid = config.RPC.addUri( remote_file_url, options={"out": menu_file}) - self._Downloading = gid + self._Downloading = gid print("stack length ",self._MyStack.Length()) """ if self._MyStack.Length() > 1:## not on the top list page From e9db2ac4d196db03f47aed1cf0c5daad7ba7954b Mon Sep 17 00:00:00 2001 From: cuu Date: Sun, 29 Dec 2019 00:46:19 +0800 Subject: [PATCH 2/3] warehouse --- Menu/GameShell/21_Warehouse/__init__.py | 62 ++++++++++++------------- 1 file changed, 30 insertions(+), 32 deletions(-) diff --git a/Menu/GameShell/21_Warehouse/__init__.py b/Menu/GameShell/21_Warehouse/__init__.py index 610e76d..a7d8746 100644 --- a/Menu/GameShell/21_Warehouse/__init__.py +++ b/Menu/GameShell/21_Warehouse/__init__.py @@ -826,58 +826,57 @@ class GameStorePage(Page): except Exception as ex: print(ex) - + def Click(self): if self._PsIndex > len(self._MyList) -1: return - + cur_li = self._MyList[self._PsIndex] #if cur_li._Active == True: # return print("cur_li._Value",cur_li._Value) - - if cur_li._Value["type"] == "source" or cur_li._Value["type"] == "dir": - remote_file_url = cur_li._Value["file"] - menu_file = remote_file_url.split("raw.githubusercontent.com")[1] #assume master branch - local_menu_file = "%s/aria2download%s" % (os.path.expanduser('~'),menu_file ) + + if cur_li._Value["type"] == "source" or cur_li._Value["type"] == "dir": + remote_file_url = cur_li._Value["file"] + menu_file = remote_file_url.split("raw.githubusercontent.com")[1] #assume master branch + local_menu_file = "%s/aria2download%s" % (os.path.expanduser('~'),menu_file ) print(local_menu_file) if FileExists( local_menu_file ) == False: self.LoadHouse() - else: - #read the local_menu_file, push into stack,display menu - self._Downloading = None + else: + #read the local_menu_file, push into stack,display menu + self._Downloading = None try: - with open(local_menu_file) as json_file: - local_menu_json = json.load(json_file) + with open(local_menu_file) as json_file: + local_menu_json = json.load(json_file) print(local_menu_json) - self._MyStack.Push(local_menu_json["list"]) - - self.SyncList() - self._Screen.Draw() - self._Screen.SwapAndShow() + self._MyStack.Push(local_menu_json["list"]) + + self.SyncList() + self._Screen.Draw() + self._Screen.SwapAndShow() except Exception as ex: print(ex) self._Screen._MsgBox.SetText("Open house failed ") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() - - elif cur_li._Value["type"] == "add_house": + + elif cur_li._Value["type"] == "add_house": print("show keyboard to add ware house") self._Screen.PushCurPage() self._Screen.SetCurPage( self._Keyboard ) - else: - #download the game probably - remote_file_url = cur_li._Value["file"] + #download the game probably + remote_file_url = cur_li._Value["file"] menu_file = remote_file_url.split("raw.githubusercontent.com")[1] local_menu_file = "%s/aria2download%s" % (os.path.expanduser('~'),menu_file ) - - if FileExists( local_menu_file ) == False: + + if FileExists( local_menu_file ) == False: gid,ret = config.RPC.urlDownloading(remote_file_url) if ret == False: gid = config.RPC.addUri( remote_file_url, options={"out": menu_file}) - self._Downloading = gid + self._Downloading = gid print("stack length ",self._MyStack.Length()) """ if self._MyStack.Length() > 1:## not on the top list page @@ -894,14 +893,13 @@ class GameStorePage(Page): else: print(config.RPC.tellStatus(gid,["status","totalLength","completedLength"])) - self._Screen._MsgBox.SetText("Getting the game now") - self._Screen._MsgBox.Draw() - self._Screen.SwapAndShow() + self._Screen._MsgBox.SetText("Getting the game now") + self._Screen._MsgBox.Draw() + self._Screen.SwapAndShow() - pygame.time.delay(800) - self._Screen._TitleBar.Redraw() + pygame.time.delay(800) + self._Screen._TitleBar.Redraw() - else: print("file downloaded")# maybe check it if is installed,then execute it if cur_li._Value["type"]=="launcher" and cur_li._ReadOnly == False: @@ -920,7 +918,7 @@ class GameStorePage(Page): self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() pygame.time.delay(800) - + if cur_li._Value["type"]=="tic80" and cur_li._ReadOnly == False: game_sh = "/home/cpi/apps/Menu/51_TIC-80/TIC-80.sh" self._Screen.RunEXE(game_sh) From 987587c5afe99e857ac189d8f5136b7162be00c0 Mon Sep 17 00:00:00 2001 From: cuu Date: Sun, 29 Dec 2019 20:31:22 +0800 Subject: [PATCH 3/3] add RestoreScrolled in Warehouse --- Menu/GameShell/21_Warehouse/__init__.py | 48 ++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/Menu/GameShell/21_Warehouse/__init__.py b/Menu/GameShell/21_Warehouse/__init__.py index a7d8746..0dc4d25 100644 --- a/Menu/GameShell/21_Warehouse/__init__.py +++ b/Menu/GameShell/21_Warehouse/__init__.py @@ -544,7 +544,9 @@ class GameStorePage(Page): _aria2_db = "aria2tasks.db" _warehouse_db = "warehouse.db" _GobjTimer = -1 - + + _Scrolled_cnt = 0 + def __init__(self): Page.__init__(self) self._Icons = {} @@ -671,10 +673,7 @@ class GameStorePage(Page): self._MyList.append(li) - if self._PsIndex > len(self._MyList) - 1: - self._PsIndex = len(self._MyList) - 1 - if self._PsIndex < 0: - self._PsIndex = 0 + self.RefreshPsIndex() def Init(self): @@ -724,7 +723,7 @@ class GameStorePage(Page): self._PreviewPage = ImageDownloadProcessPage() self._PreviewPage._Screen = self._Screen - self._PreviewPage._Name = "preview" + self._PreviewPage._Name = "Preview" self._PreviewPage.Init() self._LoadHousePage = LoadHousePage() @@ -1002,7 +1001,6 @@ class GameStorePage(Page): self.SyncList() def OnReturnBackCb(self): - if self._MyStack.Length() == 1: self._FootMsg[2] = "Remove" self._FootMsg[1] = "Update" @@ -1011,6 +1009,8 @@ class GameStorePage(Page): self._FootMsg[1] = "Preview" self.SyncList() + self.RestoreScrolled() + self._Screen.Draw() self._Screen.SwapAndShow() @@ -1019,6 +1019,34 @@ class GameStorePage(Page): self._Screen.Draw() self._Screen.SwapAndShow() """ + + def ScrollDown(self): + if len(self._MyList) == 0: + return + self._PsIndex += 1 + if self._PsIndex >= len(self._MyList): + self._PsIndex = len(self._MyList)-1 + + cur_li = self._MyList[self._PsIndex] + if cur_li._PosY+cur_li._Height > self._Height: + for i in range(0, len(self._MyList)): + self._MyList[i]._PosY -= self._MyList[i]._Height + + self._Scrolled_cnt -= self._MyList[i]._Height + + def ScrollUp(self): + if len(self._MyList) == 0: + return + self._PsIndex -= 1 + if self._PsIndex < 0: + self._PsIndex = 0 + cur_li = self._MyList[self._PsIndex] + if cur_li._PosY < 0: + for i in range(0, len(self._MyList)): + self._MyList[i]._PosY += self._MyList[i]._Height + + self._Scrolled_cnt += self._MyList[i]._Height + def KeyDown(self,event): if IsKeyMenuOrB(event.key): @@ -1091,12 +1119,16 @@ class GameStorePage(Page): self.ScrollUp() self._Screen.Draw() self._Screen.SwapAndShow() + if event.key == CurKeys["Down"]: self.ScrollDown() self._Screen.Draw() self._Screen.SwapAndShow() - + def RestoreScrolled(self): + for i in range(0, len(self._MyList)): + self._MyList[i]._PosY += self._Scrolled_cnt + def Draw(self): self.ClearCanvas()