This commit is contained in:
yumoqing 2025-08-08 17:34:25 +08:00
parent a947a57eca
commit cbfa9806d3
5 changed files with 80 additions and 28 deletions

View File

@ -60,11 +60,29 @@ class FileMgr:
return True
return False
async def del_file(self, request, params_kw):
fid = params_kw.id
async def del_folder(self, id):
db = DBPools()
dbname = get_dbname()
async with db.sqlorContext(dbname) as sor:
return await self.del_folder(sor, id)
async def _del_folder(self, sor, id):
fs = []
async for f in self._folder_files(sor, id):
fs.append(f)
for f in fs:
if f.filetype == 'folder':
await self._del_folder(sor, f.id)
else:
await self._del_file(sor, f.id)
async def del_file(self, fid):
db = DBPools()
dbname = get_dbname()
async with db.sqlorContext(dbname) as sor:
return await self._del_file(sor, fid)
async def _del_file(self, sor, fid):
recs = await sor.R('file', {'id': fid})
if recs:
delrec = recs[0]
@ -75,7 +93,7 @@ class FileMgr:
rf = RegisterFunction()
await rf.exe('filedeleted', delrec)
async def has_sub(self, request, sor, folderid):
async def has_sub(self, sor, folderid):
sql = """select unique a.* from folder a
left join folder b on a.id = b.parentid
left join file c on a.id=c.folderid
@ -85,35 +103,32 @@ where id=${folderid}$"""
return True
return False
async def folder_files(self, request, params):
id = params.id
async def folder_files(self, id):
db = DBPools()
dbanme = get_dbname()
async with db.sqlorContext(dbname) as sor:
for r in self._folder_files(sor, request, id):
for r in self._folder_files(sor, id):
yield r
async def _folder_files(self, sor, request, id):
recs = await self.sor_get_subfile(sor, request, id)
async def _folder_files(self, sor, id):
recs = await self.sor_get_subfile(sor, id)
for r in recs:
yield r
folders = await self.sor_get_subfolder(sor, request, id)
folders = await self.sor_get_subfolder(sor, id)
for f in folders:
for r in self._folder_files(request, f.id):
for r in self._folder_files(f.id):
yield r
async def get_subs(self, request, params):
id = params.id
userinfo = await get_session_userinfo(request)
async def get_subs(self, id):
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
ret = await self.sor_get_subfolder(sor, request, id)
ret += await self.sor_get_subfile(sor, request, id)
ret = await self.sor_get_subfolder(sor, id)
ret += await self.sor_get_subfile(sor, id)
return ret
return []
async def sor_get_subfolder(self, sor, request, fid):
async def sor_get_subfolder(self, sor, fid):
sql = """select x.*, 'folder' as filetype,
case when y.id is null then 1
else 0 end as is_left
@ -132,8 +147,7 @@ where x.parentid = ${fid}$
recs = await sor.sqlExe(sql, ns)
return recs
async def sor_get_subfile(self, sor, request, fid):
userinfo = await get_session_userinfo(request)
async def sor_get_subfile(self, sor, fid):
sql = """select *, 1 as is_leaf from file where folderid=${fid}$"""
ns = {
'fid':fid

View File

@ -25,6 +25,7 @@
},
"edit_exclouded_fields":["id", "fiid" ],
"get_data_url":"{{entire_url('/filemgr/get_folder_subs.dspy')}}",
"delete_data_url": "{{entire_url('/filemgr/delete_folder_or_file.dspy')}}",
"params":{
"id":"{{params_kw.id or '' }}"
},

View File

@ -0,0 +1,7 @@
dbname = get_module_dbname('filemgr')
db = DBPools()
async with db.sqlorContext(dbname) as sor:
filemgr = Filemgr()
await filemgr._del_folder(sor, params_kw.id)
return UiMessage(title='delete folder', message='delete success')
return Error(title='delete folder', message='delete failed')

View File

@ -0,0 +1,30 @@
dbname = get_module_nmae('filemgr')
db = DBPools()
async with db.sqlorContext(dbname) as sor:
filemgr = FileMgr()
if params_kw.filetype == 'folder':
has_sub = await filemgr.has_sub(sor, params_kw.id)
if has_sub:
return UiComform(title='Delete Conform',
message='This folder has subitem, are you sure to delete it?', binds=[
{
"wid":"self",
"event":"conformed",
"actiontype":"urlwidget",
"target":"self",
"options":{
"params":{
"id":params_kw.id,
"filetype": params_kw.filetype
}
url: entire_url('conformed_delete.dspy')
}
}
])
else:
await filemgr._del_folder(sor, params_kw.id)
else:
await filemgr._del_file(sor, params_kw.id)
return UiMessage(title='delete file', message='delete success')
return Error(title='delete file', message='delete failed')

View File

@ -1,5 +1,5 @@
#
debug(f'{params_kw=}')
filemgr = FileMgr()
f = await filemgr.get_subs(request, params_kw)
f = await filemgr.get_subs( params_kw.id)
return f