387 lines
13 KiB
Plaintext
387 lines
13 KiB
Plaintext
PersonalPictureManager = class("PersonalPictureManager")
|
|
autoImport("PersonalPhoto")
|
|
autoImport("PersonalPhotoHelper")
|
|
|
|
function PersonalPictureManager.Instance()
|
|
if nil == PersonalPictureManager.me then
|
|
PersonalPictureManager.me = PersonalPictureManager.new()
|
|
end
|
|
return PersonalPictureManager.me
|
|
end
|
|
|
|
function PersonalPictureManager: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 PersonalPictureManager:log( ... )
|
|
-- body
|
|
if(self.logEnable)then
|
|
helplog(...)
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:tryGetMyThumbnail(index,time)
|
|
-- self:log("tryGenThumbnail",index, time)
|
|
self.isDownloading = true
|
|
PersonalPhotoHelper.Ins():GetThumbnail(index,time,function ( progress )
|
|
-- body
|
|
self:MyThumbnailProgressCallback(index,time,progress)
|
|
end,function ( bytes)
|
|
-- body
|
|
self:MyThumbnailSusCallback(index,time,bytes)
|
|
end,function ( errorMessage )
|
|
-- body
|
|
self:MyThumbnailErrorCallback(index,time,errorMessage)
|
|
end)
|
|
end
|
|
|
|
function PersonalPictureManager:AddMyThumbnailInfos(list)
|
|
if(list and #list > 0)then
|
|
for i=1,#list do
|
|
self:AddSingleMyThumbnail(list[i])
|
|
end
|
|
self:startTryGetMyThumbnail()
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:AddSingleMyThumbnail(data)
|
|
|
|
local index = data.index
|
|
local time = data.time
|
|
local texture = self:GetThumbnailTextureById(index,time)
|
|
if(not texture)then
|
|
local hasIn = self:HasInToBeDownload(index,time)
|
|
if(not hasIn)then
|
|
local loadData = {index = index,time = time}
|
|
self.toBeDownload[#self.toBeDownload+1] = loadData
|
|
end
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:GetPersonPicThumbnail( cell )
|
|
-- body
|
|
local data = cell.data
|
|
local index = data.index
|
|
local time = data.time
|
|
local texture = self:GetThumbnailTextureById(index,time,true)
|
|
if(texture)then
|
|
cell:setTexture(texture)
|
|
else
|
|
local hasIn = self:HasInToBeDownload(index,time)
|
|
if(not hasIn)then
|
|
local loadData = {index = index,time = time}
|
|
self.toBeDownload[#self.toBeDownload+1] = loadData
|
|
if(#self.toBeDownload>0)then
|
|
self:startTryGetMyThumbnail()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:HasInToBeDownload(index,time)
|
|
for i=1,#self.toBeDownload do
|
|
local single = self.toBeDownload[i]
|
|
if(single.index == index and single.time == time)then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:MyThumbnailSusCallback(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(index,time,texture)
|
|
self:removeOldTimeData(index,time)
|
|
self:PersonalThumbnailDownloadCompleteCallback1(index,time,bytes)
|
|
self:removeDownloadTexture(index,time)
|
|
self:startTryGetMyThumbnail()
|
|
else
|
|
self:MyThumbnailErrorCallback(index,time,"load LoadImage error!")
|
|
Object.DestroyImmediate(texture)
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:removePhotoCache( index,time )
|
|
for i=1,#self.LRUTextureCache do
|
|
local single = self.LRUTextureCache[i]
|
|
if(single.index == index)then
|
|
local data = table.remove(self.LRUTextureCache,i)
|
|
Object.DestroyImmediate(data.texture)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:removeOldTimeData( index,time )
|
|
-- body
|
|
for i=1,#self.toBeDownload do
|
|
local single = self.toBeDownload[i]
|
|
if(single.index == index and single.time ~= time)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.time ~= time)then
|
|
local data = table.remove(self.LRUTextureCache,i)
|
|
Object.DestroyImmediate(data.texture)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:MyThumbnailErrorCallback(index,time,errorMessage)
|
|
self.isDownloading = false
|
|
self:removeDownloadTexture(index,time)
|
|
self:PersonalThumbnailDownloadErrorCallback1(index,time,errorMessage)
|
|
self:startTryGetMyThumbnail()
|
|
end
|
|
|
|
function PersonalPictureManager:MyThumbnailProgressCallback(index,time,progress)
|
|
self:PersonalThumbnailDownloadProgressCallback1(index,time,progress)
|
|
end
|
|
|
|
function PersonalPictureManager:startTryGetMyThumbnail()
|
|
if(#self.toBeDownload > 0 and not self.isDownloading)then
|
|
local loadData = self.toBeDownload[1]
|
|
self:tryGetMyThumbnail(loadData.index,loadData.time)
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:GetThumbnailTexture( index )
|
|
-- body
|
|
local texture = self:GetThumbnailTextureById(index,true)
|
|
if(texture)then
|
|
return texture
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:GetThumbnailTextureById( index,time,rePos )
|
|
-- body
|
|
for i=1,#self.LRUTextureCache do
|
|
local single = self.LRUTextureCache[i]
|
|
if(single.index == index and single.time == time)then
|
|
if(rePos)then
|
|
table.remove(self.LRUTextureCache,i)
|
|
table.insert(self.LRUTextureCache,1,single)
|
|
end
|
|
return single.texture
|
|
end
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:addThumbnailTextureById(index,time,texture)
|
|
-- body
|
|
if(not self:GetThumbnailTextureById(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.texture = texture
|
|
data.time = time
|
|
table.insert(self.LRUTextureCache,1,data)
|
|
else
|
|
self:log("addThumbnailTextureById:exsit index:",index)
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:removeDownloadTexture(index,time)
|
|
for j=1,#self.toBeDownload do
|
|
local data = self.toBeDownload[j]
|
|
if(index == data.index and time == data.time)then
|
|
table.remove(self.toBeDownload,j)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:saveToPhotoAlbum( texture,index,time )
|
|
local bytes = ImageConversion.EncodeToJPG(texture)
|
|
self.UploadingMap[index] = true
|
|
|
|
local md5 = MyMD5.HashBytes(bytes);
|
|
GamePhoto.SetPhotoFileMD5_Personal(index, md5);
|
|
local pbMd5 = PhotoCmd_pb.PhotoMd5()
|
|
pbMd5.md5 = md5
|
|
pbMd5.sourceid = index
|
|
pbMd5.time = time
|
|
pbMd5.source = ProtoCommon_pb.ESOURCE_PHOTO_SELF
|
|
ServicePhotoCmdProxy.Instance:CallAddMd5PhotoCmd(pbMd5);
|
|
|
|
PersonalPhoto.Ins():SaveAndUpload(index,bytes,time,function (progress)
|
|
-- body
|
|
self:log("Upload progress:",progress)
|
|
self:PersonalOriginPhotoUploadProgressCallback1(index,time,progress)
|
|
end, function ( bytes )
|
|
-- body
|
|
self:log("Upload sus:")
|
|
self.UploadingMap[index] = false
|
|
ServicePhotoCmdProxy.Instance:CallPhotoOptCmd(PhotoCmd_pb.EPHOTOOPTTYPE_UPLOAD,index)
|
|
self:PersonalOriginPhotoUploadCompleteCallback1(index,time)
|
|
ServicePhotoCmdProxy.Instance:CallRemoveMd5PhotoCmd(pbMd5);
|
|
end, function ( errorMessage )
|
|
-- body
|
|
self.UploadingMap[index] = false
|
|
self:log("Upload error:",errorMessage)
|
|
self:PersonalOriginPhotoUploadErrorCallback1(index,time,errorMessage)
|
|
end)
|
|
end
|
|
|
|
function PersonalPictureManager:isUpLoadFailure( index )
|
|
local photoData = PhotoDataProxy.Instance:getPhotoDataByIndex(index)
|
|
if(photoData and not photoData.isupload)then
|
|
return true
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:isUpLoading( index )
|
|
return self.UploadingMap[index] == true
|
|
end
|
|
|
|
function PersonalPictureManager:isCanReUpLoading( index,time )
|
|
local exsit = PersonalPhoto.Ins():CheckExistOnLocal(index)
|
|
if(exsit)then
|
|
return true
|
|
end
|
|
end
|
|
|
|
function PersonalPictureManager:removePhotoFromeAlbum( index ,time)
|
|
ServicePhotoCmdProxy.Instance:CallPhotoOptCmd(PhotoCmd_pb.EPHOTOOPTTYPE_REMOVE,index)
|
|
end
|
|
|
|
function PersonalPictureManager:removeAndClearPhotoDataWhenDel( index,time )
|
|
self:removePhotoDataWhenDel(index,time)
|
|
PersonalPhoto.Ins():Clear(index)
|
|
end
|
|
|
|
function PersonalPictureManager:removePhotoDataWhenDel( index,time )
|
|
-- body
|
|
self:removeDownloadTexture(index,time)
|
|
self:removeOldTimeData(index,time)
|
|
self.UploadingMap[index] = false
|
|
self:removePhotoCache(index,time)
|
|
end
|
|
|
|
function PersonalPictureManager:UploadPhoto( index,time )
|
|
-- body
|
|
self.UploadingMap[index] = true
|
|
PersonalPhoto.Ins():Upload(index,function (progress)
|
|
-- body
|
|
self:log("Upload progress:",progress)
|
|
self:PersonalOriginPhotoUploadProgressCallback1(index,time,progress)
|
|
end, function ( bytes )
|
|
-- body
|
|
self:log("Upload sus:")
|
|
self.UploadingMap[index] = false
|
|
ServicePhotoCmdProxy.Instance:CallPhotoOptCmd(PhotoCmd_pb.EPHOTOOPTTYPE_UPLOAD,index)
|
|
self:PersonalOriginPhotoUploadCompleteCallback1(index,time)
|
|
|
|
end, function ( errorMessage )
|
|
-- body
|
|
self.UploadingMap[index] = false
|
|
self:log("Upload error:",errorMessage)
|
|
self:PersonalOriginPhotoUploadErrorCallback1(index,time,errorMessage)
|
|
end)
|
|
end
|
|
|
|
function PersonalPictureManager:tryGetOriginImage( index,time )
|
|
-- body
|
|
PersonalPhotoHelper.Ins():GetOriginImage(index,time,function ( progress )
|
|
-- body
|
|
self:PersonalOriginPhotoDownloadProgressCallback1(index,time,progress)
|
|
end,function ( bytes,timestamp )
|
|
self:PersonalOriginPhotoDownloadCompleteCallback1(index,time,bytes)
|
|
-- body
|
|
end,function ( errorMessage )
|
|
-- body
|
|
self:PersonalOriginPhotoDownloadErrorCallback1(index,time,errorMessage)
|
|
end)
|
|
end
|
|
|
|
PersonalPictureManager.PersonalThumbnailDownloadProgressCallback = "PersonalPictureManager_PersonalThumbnailDownloadProgressCallback"
|
|
PersonalPictureManager.PersonalThumbnailDownloadCompleteCallback = "PersonalPictureManager_PersonalThumbnailDownloadCompleteCallback"
|
|
PersonalPictureManager.PersonalThumbnailDownloadErrorCallback = "PersonalPictureManager_PersonalThumbnailDownloadErrorCallback"
|
|
|
|
PersonalPictureManager.PersonalOriginPhotoDownloadProgressCallback = "PersonalPictureManager_PersonalOriginPhotoDownloadProgressCallback"
|
|
PersonalPictureManager.PersonalOriginPhotoDownloadCompleteCallback = "PersonalPictureManager_PersonalOriginPhotoDownloadCompleteCallback"
|
|
PersonalPictureManager.PersonalOriginPhotoDownloadErrorCallback = "PersonalPictureManager_PersonalOriginPhotoDownloadErrorCallback"
|
|
|
|
PersonalPictureManager.PersonalOriginPhotoUploadProgressCallback = "PersonalPictureManager_PersonalOriginPhotoUploadProgressCallback"
|
|
PersonalPictureManager.PersonalOriginPhotoUploadCompleteCallback = "PersonalPictureManager_PersonalOriginPhotoUploadCompleteCallback"
|
|
PersonalPictureManager.PersonalOriginPhotoUploadErrorCallback = "PersonalPictureManager_PersonalOriginPhotoUploadErrorCallback"
|
|
|
|
--download thumbnail
|
|
function PersonalPictureManager:PersonalThumbnailDownloadProgressCallback1(index, time,progress )
|
|
-- body
|
|
self:log("PersonalPictureManager PersonalThumbnailDownloadProgressCallback",index, time,progress)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalThumbnailDownloadProgressCallback,{index = index,time = time,progress = progress})
|
|
end
|
|
|
|
function PersonalPictureManager:PersonalThumbnailDownloadCompleteCallback1(index, time,bytes)
|
|
-- body
|
|
self:log("PersonalPictureManager PersonalThumbnailDownloadCompleteCallback",index, time,tostring(bytes),type(index))
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalThumbnailDownloadCompleteCallback,{index = index,time = time,byte = bytes})
|
|
end
|
|
|
|
function PersonalPictureManager:PersonalThumbnailDownloadErrorCallback1(index, time,errorMessage)
|
|
-- body
|
|
self:log("PersonalPictureManager PersonalThumbnailDownloadErrorCallback",index, time,errorMessage)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalThumbnailDownloadErrorCallback,{index = index,time = time})
|
|
end
|
|
|
|
--download
|
|
function PersonalPictureManager:PersonalOriginPhotoDownloadProgressCallback1(index, time,progress )
|
|
-- body
|
|
self:log("PersonalOriginPhotoDownloadProgressCallback",index, time,progress)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalOriginPhotoDownloadProgressCallback,{index = index,time = time,progress = progress})
|
|
end
|
|
|
|
function PersonalPictureManager:PersonalOriginPhotoDownloadCompleteCallback1(index, time,bytes)
|
|
-- body
|
|
self:log("PersonalOriginPhotoDownloadCompleteCallback",index, time,bytes)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalOriginPhotoDownloadCompleteCallback,{index = index,time = time,byte = bytes})
|
|
end
|
|
|
|
function PersonalPictureManager:PersonalOriginPhotoDownloadErrorCallback1(index, time,errorMessage)
|
|
-- body
|
|
self:log("PersonalOriginPhotoDownloadErrorCallback",index, time,errorMessage)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalOriginPhotoDownloadErrorCallback,{index = index,time = time})
|
|
end
|
|
|
|
--upload
|
|
function PersonalPictureManager:PersonalOriginPhotoUploadProgressCallback1(index, time,progress )
|
|
-- body
|
|
self:log("PersonalOriginPhotoUploadProgressCallback",index, time,progress)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalOriginPhotoUploadProgressCallback,{index = index,time = time,progress = progress})
|
|
end
|
|
|
|
function PersonalPictureManager:PersonalOriginPhotoUploadCompleteCallback1(index, time)
|
|
-- body
|
|
self:log("PersonalOriginPhotoUploadCompleteCallback",index, time)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalOriginPhotoUploadCompleteCallback,{index = index,time = time})
|
|
end
|
|
|
|
function PersonalPictureManager:PersonalOriginPhotoUploadErrorCallback1(index, time,errorMessage)
|
|
-- body
|
|
self:log("PersonalOriginPhotoUploadErrorCallback",index, time,errorMessage)
|
|
GameFacade.Instance:sendNotification(PersonalPictureManager.PersonalOriginPhotoUploadErrorCallback,{index = index,time = time})
|
|
end |