调整优化

This commit is contained in:
limil 2024-10-29 08:58:40 +08:00
parent 115bf2a3e2
commit f56cd2bf49
2 changed files with 33 additions and 24 deletions

24
main.py
View File

@ -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

View File

@ -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)
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)