调整优化
This commit is contained in:
parent
115bf2a3e2
commit
f56cd2bf49
24
main.py
24
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
|
||||
|
33
pikpakFs.py
33
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)
|
||||
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)
|
Loading…
x
Reference in New Issue
Block a user