Files
tianrunCRM/Assets/trCRM/upgradeRes4Dev/priority/lua/db/DBAttachment.lua

175 lines
4.7 KiB
Lua
Raw Normal View History

2020-08-17 11:13:33 +08:00
DBAttachment = {} -- 附件相关
2020-07-18 21:12:14 +08:00
local db = {}
2020-08-01 17:55:18 +08:00
local dbUploadStatus = {}
local isUploading = {}
2020-08-07 07:27:09 +08:00
local isDownoading = {}
local downloadCallback = {}
local downloadDir = Utl.chgToSDCard(Path.Combine(Application.persistentDataPath, CLPathCfg.self.basePath, "download"))
2020-08-17 11:13:33 +08:00
local _TimeOutSec = 6 * 60 * 60 * 1000
local invokeSec = 60
2020-08-01 17:55:18 +08:00
2020-08-17 11:13:33 +08:00
function DBAttachment.init()
InvokeEx.cancelInvoke(DBAttachment.releaseTimeout)
InvokeEx.invoke(DBAttachment.releaseTimeout, invokeSec)
2020-07-18 21:12:14 +08:00
end
2020-08-17 11:13:33 +08:00
function DBAttachment.clean()
InvokeEx.cancelInvoke(DBAttachment.releaseTimeout)
2020-07-18 21:12:14 +08:00
for k, v in ipairs(db) do
GameObject.DestroyImmediate(v)
end
db = {}
2020-08-01 17:55:18 +08:00
---@param v UnityEngine.UnityWebRequest
for k, www in pairs(dbUploadStatus) do
if www then
www.Dispose()
www = nil
end
end
dbUploadStatus = {}
2020-07-18 21:12:14 +08:00
end
2020-08-17 11:13:33 +08:00
function DBAttachment.releaseTimeout()
2020-07-18 21:12:14 +08:00
for k, v in ipairs(db) do
2020-08-17 11:13:33 +08:00
if DateEx.nowMS - v.lastUseTime > 3000000 then
2020-07-18 21:12:14 +08:00
GameObject.DestroyImmediate(v.texture)
db[k] = nil
end
end
2020-08-17 11:13:33 +08:00
-- 删掉超时的文件
local files = FileEx.GetFiles(downloadDir)
local count = files.Length
for i = 0, count - 1 do
---@type System.IO.FileInfo
local fi = FileInfo(files[i])
if fi then
local diff = (DateTime.Now:ToFileTime() - fi.LastAccessTime:ToFileTime()) / 10000
if diff > _TimeOutSec then
FileEx.Delete(files[i])
end
end
end
InvokeEx.invoke(DBAttachment.releaseTimeout, invokeSec)
2020-07-18 21:12:14 +08:00
end
---@return UnityEngine.UnityWebRequest
2020-08-17 11:13:33 +08:00
function DBAttachment.getByUrl(url, callback, orgs)
2020-07-18 21:12:14 +08:00
local tt = db[url]
if tt then
tt.lastUseTime = DateEx.nowMS
db[url] = tt
Utl.doCallback(callback, tt.texture, orgs)
return nil
end
local request =
WWWEx.get(
url,
nil,
CLAssetType.texture,
function(content)
db[url] = {texture = content, lastUseTime = DateEx.nowMS}
Utl.doCallback(callback, content, orgs)
end,
nil,
orgs,
true,
1
)
return request
end
2020-08-17 11:13:33 +08:00
function DBAttachment.upload(path, uploadPath, finishCallback)
2020-08-01 17:55:18 +08:00
local key = joinStr(path, "_", uploadPath)
if (not dbUploadStatus[key]) and (not isUploading[key]) then
local www =
NetProto.uploadFile(
path,
uploadPath,
function(result, orgs)
isUploading[key] = nil
if result then
dbUploadStatus[key] = result
end
Utl.doCallback(finishCallback, result)
end
)
isUploading[key] = www
return www
else
if dbUploadStatus[key] then
Utl.doCallback(finishCallback, dbUploadStatus[key])
else
printe("进到这里来了,有问题!!!!!!!")
end
end
end
2020-08-17 11:13:33 +08:00
function DBAttachment.cancelUpload(path, uploadPath)
2020-08-01 17:55:18 +08:00
local key = joinStr(path, "_", uploadPath)
local www = isUploading[key]
if www then
www.Dispose()
www = nil
dbUploadStatus[key] = nil
isUploading[key] = nil
end
end
2020-08-17 11:13:33 +08:00
function DBAttachment.hadDownloaded(name)
2020-08-07 07:27:09 +08:00
local localPath = Path.Combine(downloadDir, name)
if File.Exists(localPath) then
return true, localPath
end
return false, localPath
end
2020-08-17 11:13:33 +08:00
function DBAttachment.download(name, url, callback)
2020-08-07 07:27:09 +08:00
downloadCallback[name] = callback
if isDownoading[name] then
return isDownoading[name]
end
local localPath = Path.Combine(downloadDir, name)
local _url = url
if File.Exists(localPath) then
_url = Path.Combine("file://", localPath)
end
local www =
WWWEx.get(
_url,
nil,
2020-08-07 22:40:04 +08:00
CLAssetType.bytes,
2020-08-07 07:27:09 +08:00
function(content, orgs)
isDownoading[name] = nil
if content then
2020-08-07 22:40:04 +08:00
local bytes = content
2020-08-07 07:27:09 +08:00
Directory.CreateDirectory(Path.GetDirectoryName(localPath))
File.WriteAllBytes(localPath, bytes)
Utl.doCallback(downloadCallback[name], content, localPath)
downloadCallback[name] = nil
else
MyUtl.toastW("下载附件为空")
Utl.doCallback(downloadCallback[name], content, nil)
downloadCallback[name] = nil
end
end,
function()
isDownoading[name] = nil
MyUtl.toastW("下载附件失败")
Utl.doCallback(downloadCallback[name], nil, nil)
downloadCallback[name] = nil
end,
nil,
true,
2
)
isDownoading[name] = www
2020-08-07 22:40:04 +08:00
return www
2020-08-07 07:27:09 +08:00
end
2020-08-17 11:13:33 +08:00
return DBAttachment