diff --git a/main.py b/main.py index b3bd96c..40c78c8 100644 --- a/main.py +++ b/main.py @@ -53,9 +53,16 @@ class PikpakConsole(cmd2.Cmd): ) handler = logging.StreamHandler() handler.setFormatter(formatter) + handler.setLevel(logging.INFO) + + file_handler = logging.FileHandler('app.log') + file_handler.setFormatter(formatter) + file_handler.setLevel(logging.DEBUG) + logger = logging.getLogger() logger.addHandler(handler) - logger.setLevel(logging.INFO) + logger.addHandler(file_handler) + logger.setLevel(logging.DEBUG) def IOWorker(self, loop): self.terminal_lock.acquire() # 我看cmdloop是这么做的,所以我也这么做 @@ -80,10 +87,10 @@ class PikpakConsole(cmd2.Cmd): def ParserProvider(self): return cmd2.Cmd2ArgumentParser() - def AddPathParser(parserProvider): + def AddPathParser(parserProvider, nargs = "?"): def PathParserProvider(self): parser = parserProvider(self) - parser.add_argument("path", help="path", default="", nargs="?", type=RunSyncInLoop(self.loop)(self.client.PathToNode)) + parser.add_argument("path", help="path", default="", nargs=nargs, type=RunSyncInLoop(self.loop)(self.client.PathToNode)) return parser return PathParserProvider @@ -208,15 +215,16 @@ class PikpakConsole(cmd2.Cmd): List files in a directory """ node = args.path + if node is None: + await self.aoutput("Invalid path") + return + await self.client.Refresh(node) if IsDir(node): for childId in node.childrenId: child = self.client.GetNodeById(childId) await self.aoutput(child.name) elif IsFile(node): - await self.client.Refresh(node) - await self.aoutput(f"{node.name}: {node.url}") - else: - await self.aoutput("Invalid path") + await self.aoutput(f"{node.name}: {node.url}") @RunSync async def complete_cd(self, text, line, begidx, endidx): @@ -252,7 +260,7 @@ class PikpakConsole(cmd2.Cmd): return await self.PathCompleter(text, line, begidx, endidx, filterFiles = False) @RunSync - @ProvideDecoratorSelfArgs(cmd2.with_argparser, AddPathParser(ParserProvider)) + @ProvideDecoratorSelfArgs(cmd2.with_argparser, AddPathParser(ParserProvider, "+")) async def do_rm(self, args): """ Remove a file or directory diff --git a/pikpakFs.py b/pikpakFs.py index 1c959fd..15676e1 100644 --- a/pikpakFs.py +++ b/pikpakFs.py @@ -147,7 +147,6 @@ class PKVirtFs: async def Refresh(self, node : VirtFsNode): if node.lastUpdate != None: return - if IsDir(node): next_page_token = None childrenInfo = [] @@ -211,8 +210,6 @@ class PKVirtFs: current = self.FindChildInDirByName(current, spot) if current != None: - if IsDir(current): - await self.Refresh(current) father = self.GetFatherNode(current) sonName = current.name @@ -242,22 +239,26 @@ class PKVirtFs: await self.client.login() self._dump_login_info() + def log_json(self, json_obj): + logging.debug(json.dumps(json_obj, indent=4)) + async def MakeDir(self, node : DirNode, name : str) -> DirNode: - await self.client.create_folder(name, node.id) - await self.Refresh(node) - return self.FindChildInDirByName(node, name) + result = await self.client.create_folder(name, node.id) + id = result["file"]["id"] + name = result["file"]["name"] + newDir = DirNode(id, name, node.id) + self.nodes[id] = newDir + node.childrenId.append(id) + return newDir async def Download(self, url : str, dirNode : DirNode) -> None : # 默认创建在当前目录下 # todo: 完善离线下载task相关 - await self.client.offline_download(url, dirNode.id) + self.log_json(await self.client.offline_download(url, dirNode.id)) - async def Delete(self, node : VirtFsNode) -> None: - father = self.GetFatherNode(node) - if not IsDir(father): - raise Exception('Failed to locate') - if self.currentLocation is node or self._is_ancestors_of(node, self.currentLocation): - raise Exception('Delete self or ancestor is not allowed') - - await self.client.delete_to_trash([node.id]) - await self.Refresh(father) \ No newline at end of file + async def Delete(self, nodes : list[VirtFsNode]) -> None: + nodeIds = [node.id for node in nodes] + await self.client.delete_to_trash(nodeIds) + for node in nodes: + father = self.GetFatherNode(node) + father.childrenId.remove(node.id) \ No newline at end of file