2025-06-04 05:02:57 +08:00

366 lines
13 KiB
Plaintext

GuildPictureManager = class("GuildPictureManager")
autoImport("UnionLogo")
function GuildPictureManager.Instance()
if nil == GuildPictureManager.me then
GuildPictureManager.me = GuildPictureManager.new()
end
return GuildPictureManager.me
end
function GuildPictureManager:ctor()
if(self.toBeDownload)then
TableUtility.ArrayClear(self.toBeDownload)
end
self.toBeDownload = {}
if(self.LRUTextureCache)then
TableUtility.ArrayClear(self.LRUTextureCache)
end
self.LRUTextureCache = {}
self.UploadingMap = {}
self.maxCache = 50
self.logEnable = false
self.isDownloading = false
end
function GuildPictureManager:log( ... )
-- body
if(self.logEnable)then
helplog(...)
end
end
function GuildPictureManager:tryGetMyThumbnail(guild,callIndex,index,time,picType)
self:log("GuildPictureManagertryGenThumbnail",guild,index, time)
self.isDownloading = true
UnionLogo.Ins():SetUnionID(guild)
UnionLogo.Ins():GetThumbnail(callIndex,index,time,picType,function ( progress )
-- body
self:MyThumbnailProgressCallback(guild,callIndex,index,time,progress)
end,function ( bytes)
-- body
self:MyThumbnailSusCallback(guild,callIndex,index,time,bytes)
end,function ( errorMessage )
-- body
self:MyThumbnailErrorCallback(guild,callIndex,index,time,errorMessage)
end)
end
function GuildPictureManager:AddMyThumbnailInfos(list)
if(list and #list > 0)then
for i=1,#list do
self:AddSingleMyThumbnail(list[i])
end
self:startTryGetMyThumbnail()
end
end
function GuildPictureManager:AddSingleMyThumbnail(data)
local index = data.index
local time = data.time
local guild = data.guild
local callIndex = data.callIndex
local picType = data.picType
local texture = self:GetThumbnailTextureById(guild,callIndex,index,time)
if(not texture)then
local hasIn = self:HasInToBeDownload(guild,callIndex,index,time)
if(not hasIn)then
local loadData = {callIndex = callIndex,index = index,time = time,guild = guild,picType = picType}
self.toBeDownload[#self.toBeDownload+1] = loadData
end
end
end
function GuildPictureManager:HasInToBeDownload(guild,callIndex,index,time)
for i=1,#self.toBeDownload do
local single = self.toBeDownload[i]
if(single.index == index and single.guild == guild and single.time == time and single.callIndex == callIndex)then
return true
end
end
end
function GuildPictureManager:MyThumbnailSusCallback(guild,callIndex,index,time,bytes)
self.isDownloading = false
local texture = Texture2D(2,2,TextureFormat.RGB24,false)
local bRet = ImageConversion.LoadImage(texture, bytes)
if(bRet)then
self:addThumbnailTextureById(guild,callIndex,index,time,texture)
self:removeOldTimeData(guild,callIndex,index,time)
self:ThumbnailDownloadCompleteCallback1(guild,callIndex,index,time,bytes)
self:removeDownloadTexture(guild,callIndex,index,time)
self:startTryGetMyThumbnail()
else
self:MyThumbnailErrorCallback(guild,callIndex,index,time,"load LoadImage error!")
Object.DestroyImmediate(texture)
end
end
function GuildPictureManager:removePhotoCache( guild,callIndex,index,time )
for i=1,#self.LRUTextureCache do
local single = self.LRUTextureCache[i]
if(single.index == index and single.guild == guild and single.callIndex == callIndex)then
local data = table.remove(self.LRUTextureCache,i)
Object.DestroyImmediate(data.texture)
break
end
end
end
function GuildPictureManager:removeOldTimeData(guild,callIndex,index,time )
-- body
for i=1,#self.toBeDownload do
local single = self.toBeDownload[i]
if(single.index == index and single.guild == guild and single.time ~= time and single.callIndex == callIndex)then
table.remove(self.toBeDownload,i)
break
end
end
for i=1,#self.LRUTextureCache do
local single = self.LRUTextureCache[i]
if(single.index == index and single.guild == guild and single.time ~= time and single.callIndex == callIndex)then
local data = table.remove(self.LRUTextureCache,i)
Object.DestroyImmediate(data.texture)
break
end
end
end
function GuildPictureManager:MyThumbnailErrorCallback(guild,callIndex,index,time,errorMessage)
self.isDownloading = false
self:removeDownloadTexture(guild,callIndex,index,time)
self:ThumbnailDownloadErrorCallback1(guild,callIndex,index,time,errorMessage)
self:startTryGetMyThumbnail()
end
function GuildPictureManager:MyThumbnailProgressCallback(guild,callIndex,index,time,progress)
self:ThumbnailDownloadProgressCallback1(guild,callIndex,index,time,progress)
end
function GuildPictureManager:startTryGetMyThumbnail()
if(#self.toBeDownload > 0 and not self.isDownloading)then
local loadData = self.toBeDownload[1]
self:tryGetMyThumbnail(loadData.guild,loadData.callIndex,loadData.index,loadData.time,loadData.picType)
end
end
function GuildPictureManager:GetThumbnailTexture( guild,callIndex,index,time)
-- body
local texture = self:GetThumbnailTextureById(guild,callIndex,index,time,true)
if(texture)then
return texture
end
end
function GuildPictureManager:GetThumbnailTextureById( guild,callIndex,index,time,rePos )
-- body
for i=1,#self.LRUTextureCache do
local single = self.LRUTextureCache[i]
if(single.index == index and single.guild == guild and single.time == time and callIndex == single.callIndex)then
if(rePos)then
table.remove(self.LRUTextureCache,i)
table.insert(self.LRUTextureCache,1,single)
end
return single.texture
end
end
end
function GuildPictureManager:addThumbnailTextureById(guild,callIndex,index,time,texture)
-- body
if(not self:GetThumbnailTextureById(guild,callIndex,index,time))then
if(#self.LRUTextureCache > self.maxCache)then
local oldData = table.remove(self.LRUTextureCache)
Object.DestroyImmediate(oldData.texture)
end
local data = {}
data.index = index
data.guild = guild
data.texture = texture
data.time = time
data.callIndex = callIndex
table.insert(self.LRUTextureCache,1,data)
else
self:log("addThumbnailTextureById:exsit index:",index)
end
end
function GuildPictureManager:removeDownloadTexture(guild,callIndex,index,time)
for j=1,#self.toBeDownload do
local data = self.toBeDownload[j]
if(index == data.index and data.guild == guild and time == data.time and callIndex == data.callIndex)then
table.remove(self.toBeDownload,j)
break
end
end
end
-- function GuildPictureManager:isUpLoadFailure( index )
-- local photoData = PhotoDataProxy.Instance:getPhotoDataByIndex(index)
-- if(photoData and not photoData.isupload)then
-- return true
-- end
-- end
-- function GuildPictureManager:isUpLoading( guild,index )
-- return self.UploadingMap[index] == true
-- end
-- function GuildPictureManager:isCanReUpLoading( guild,index,time )
-- local exsit = UnionLogo.Ins():CheckExistOnLocal(index)
-- if(exsit)then
-- return true
-- end
-- end
-- function GuildPictureManager:removePhotoFromeAlbum( index ,time)
-- ServicePhotoCmdProxy.Instance:CallPhotoOptCmd(PhotoCmd_pb.EPHOTOOPTTYPE_REMOVE,index)
-- end
-- function GuildPictureManager:removeAndClearPhotoDataWhenDel( index,time )
-- self:removePhotoDataWhenDel(index,time)
-- UnionLogo.Ins():Clear(index)
-- end
-- function GuildPictureManager:removePhotoDataWhenDel(guild, index,time )
-- -- body
-- self:removeDownloadTexture(guild,index,time)
-- self:removeOldTimeData(guild,index,time)
-- self.UploadingMap[index] = false
-- self:removePhotoCache(guild,index,time)
-- end
-- function GuildPictureManager:saveToPhotoAlbum( texture,index,time )
-- local bytes = texture:EncodeToJPG(100)
-- self.UploadingMap[index] = true
-- UnionLogo.Ins():SaveAndUpload(index,bytes,time,function (progress)
-- -- body
-- self:log("Upload progress:",progress)
-- self:OriginPhotoUploadProgressCallback1(index,time,progress)
-- end, function ( bytes )
-- -- body
-- self:log("Upload sus:")
-- self.UploadingMap[index] = false
-- ServicePhotoCmdProxy.Instance:CallPhotoOptCmd(PhotoCmd_pb.EPHOTOOPTTYPE_UPLOAD,index)
-- self:OriginPhotoUploadCompleteCallback1(index,time)
-- end, function ( errorMessage )
-- -- body
-- self.UploadingMap[index] = false
-- self:log("Upload error:",errorMessage)
-- self:OriginPhotoUploadErrorCallback1(index,time,errorMessage)
-- end)
-- end
-- function GuildPictureManager:UploadPhoto( index,time )
-- -- body
-- self.UploadingMap[index] = true
-- UnionLogo.Ins():Upload(index,function (progress)
-- -- body
-- self:log("Upload progress:",progress)
-- self:OriginPhotoUploadProgressCallback1(index,time,progress)
-- end, function ( bytes )
-- -- body
-- self:log("Upload sus:")
-- self.UploadingMap[index] = false
-- ServicePhotoCmdProxy.Instance:CallPhotoOptCmd(PhotoCmd_pb.EPHOTOOPTTYPE_UPLOAD,index)
-- self:OriginPhotoUploadCompleteCallback1(index,time)
-- end, function ( errorMessage )
-- -- body
-- self.UploadingMap[index] = false
-- self:log("Upload error:",errorMessage)
-- self:OriginPhotoUploadErrorCallback1(index,time,errorMessage)
-- end)
-- end
-- function GuildPictureManager:tryGetOriginImage( index,time )
-- -- body
-- PhotoHelper.Ins():GetOriginImage(index,time,function ( progress )
-- -- body
-- self:OriginPhotoDownloadProgressCallback1(index,time,progress)
-- end,function ( bytes,timestamp )
-- self:OriginPhotoDownloadCompleteCallback1(index,time,bytes)
-- -- body
-- end,function ( errorMessage )
-- -- body
-- self:OriginPhotoDownloadErrorCallback1(index,time,errorMessage)
-- end)
-- end
GuildPictureManager.ThumbnailDownloadProgressCallback = "GuildPictureManager_ThumbnailDownloadProgressCallback"
GuildPictureManager.ThumbnailDownloadCompleteCallback = "GuildPictureManager_ThumbnailDownloadCompleteCallback"
GuildPictureManager.ThumbnailDownloadErrorCallback = "GuildPictureManager_ThumbnailDownloadErrorCallback"
GuildPictureManager.OriginPhotoDownloadProgressCallback = "GuildPictureManager_OriginPhotoDownloadProgressCallback"
GuildPictureManager.OriginPhotoDownloadCompleteCallback = "GuildPictureManager_OriginPhotoDownloadCompleteCallback"
GuildPictureManager.OriginPhotoDownloadErrorCallback = "GuildPictureManager_OriginPhotoDownloadErrorCallback"
GuildPictureManager.OriginPhotoUploadProgressCallback = "GuildPictureManager_OriginPhotoUploadProgressCallback"
GuildPictureManager.OriginPhotoUploadCompleteCallback = "GuildPictureManager_OriginPhotoUploadCompleteCallback"
GuildPictureManager.OriginPhotoUploadErrorCallback = "GuildPictureManager_OriginPhotoUploadErrorCallback"
--download thumbnail
function GuildPictureManager:ThumbnailDownloadProgressCallback1(guild,callIndex,index, time,progress )
-- body
self:log("GuildPictureManager ThumbnailDownloadProgressCallback",guild,index, time,progress)
GameFacade.Instance:sendNotification(GuildPictureManager.ThumbnailDownloadProgressCallback,{callIndex = callIndex,guild = guild,index = index,time = time,progress = progress})
end
function GuildPictureManager:ThumbnailDownloadCompleteCallback1(guild,callIndex,index, time,bytes)
-- body
self:log("GuildPictureManager ThumbnailDownloadCompleteCallback",guild,index, time,tostring(bytes),type(index))
local cdata = {callIndex = callIndex,guild = guild,index = index,time = time,byte = bytes};
GameFacade.Instance:sendNotification(GuildPictureManager.ThumbnailDownloadCompleteCallback, cdata)
EventManager.Me():PassEvent(GuildPictureManager.ThumbnailDownloadCompleteCallback, cdata);
end
function GuildPictureManager:ThumbnailDownloadErrorCallback1(guild,callIndex,index, time,errorMessage)
-- body
self:log("GuildPictureManager ThumbnailDownloadErrorCallback",guild,index, time,errorMessage)
local cdata = {callIndex = callIndex,guild = guild,index = index,time = time};
GameFacade.Instance:sendNotification(GuildPictureManager.ThumbnailDownloadErrorCallback, cdata)
EventManager.Me():PassEvent(GuildPictureManager.ThumbnailDownloadErrorCallback, cdata);
end
-- --download
-- function GuildPictureManager:OriginPhotoDownloadProgressCallback1(index, time,progress )
-- -- body
-- self:log("OriginPhotoDownloadProgressCallback",index, time,progress)
-- GameFacade.Instance:sendNotification(GuildPictureManager.OriginPhotoDownloadProgressCallback,{index = index,time = time,progress = progress})
-- end
-- function GuildPictureManager:OriginPhotoDownloadCompleteCallback1(index, time,bytes)
-- -- body
-- self:log("OriginPhotoDownloadCompleteCallback",index, time,bytes)
-- GameFacade.Instance:sendNotification(GuildPictureManager.OriginPhotoDownloadCompleteCallback,{index = index,time = time,byte = bytes})
-- end
-- function GuildPictureManager:OriginPhotoDownloadErrorCallback1(index, time,errorMessage)
-- -- body
-- self:log("OriginPhotoDownloadErrorCallback",index, time,errorMessage)
-- GameFacade.Instance:sendNotification(GuildPictureManager.OriginPhotoDownloadErrorCallback,{index = index,time = time})
-- end
-- --upload
-- function GuildPictureManager:OriginPhotoUploadProgressCallback1(index, time,progress )
-- -- body
-- self:log("OriginPhotoUploadProgressCallback",index, time,progress)
-- GameFacade.Instance:sendNotification(GuildPictureManager.OriginPhotoUploadProgressCallback,{index = index,time = time,progress = progress})
-- end
-- function GuildPictureManager:OriginPhotoUploadCompleteCallback1(index, time)
-- -- body
-- self:log("OriginPhotoUploadCompleteCallback",index, time)
-- GameFacade.Instance:sendNotification(GuildPictureManager.OriginPhotoUploadCompleteCallback,{index = index,time = time})
-- end
-- function GuildPictureManager:OriginPhotoUploadErrorCallback1(index, time,errorMessage)
-- -- body
-- self:log("OriginPhotoUploadErrorCallback",index, time,errorMessage)
-- GameFacade.Instance:sendNotification(GuildPictureManager.OriginPhotoUploadErrorCallback,{index = index,time = time})
-- end