bugfix
This commit is contained in:
parent
a947a57eca
commit
cbfa9806d3
@ -60,22 +60,40 @@ 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:
|
||||
recs = await sor.R('file', {'id': fid})
|
||||
if recs:
|
||||
delrec = recs[0]
|
||||
await sor.D('file', {'id':fid})
|
||||
remain = sor.R('file', {'hashvalue':delrec.hashvalue})
|
||||
if not remain:
|
||||
os.unlink(delrec.realpath)
|
||||
rf = RegisterFunction()
|
||||
await rf.exe('filedeleted', delrec)
|
||||
return await self.del_folder(sor, id)
|
||||
|
||||
async def has_sub(self, request, sor, folderid):
|
||||
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]
|
||||
await sor.D('file', {'id':fid})
|
||||
remain = sor.R('file', {'hashvalue':delrec.hashvalue})
|
||||
if not remain:
|
||||
os.unlink(delrec.realpath)
|
||||
rf = RegisterFunction()
|
||||
await rf.exe('filedeleted', delrec)
|
||||
|
||||
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
|
||||
|
||||
@ -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 '' }}"
|
||||
},
|
||||
|
||||
7
wwwroot/conformed_delete.dspy
Normal file
7
wwwroot/conformed_delete.dspy
Normal 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')
|
||||
30
wwwroot/delete_folder_or_file.dspy
Normal file
30
wwwroot/delete_folder_or_file.dspy
Normal 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')
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user