419 lines
14 KiB
Plaintext
419 lines
14 KiB
Plaintext
autoImport('NetIngUnionLogo')
|
|
autoImport('LocalUnionLogo')
|
|
autoImport('UnionLogoCallback')
|
|
autoImport('PhotoFileInfo')
|
|
autoImport('GamePhoto')
|
|
|
|
UnionLogo = class('UnionLogo')
|
|
|
|
UnionLogo.CallerIndex = {
|
|
LogoEditor = 1,
|
|
RoleFootDetail = 2,
|
|
UnionFlag = 3,
|
|
UnionList = 4
|
|
}
|
|
|
|
UnionLogo.thumbnailCoefficient = 0.25
|
|
|
|
function UnionLogo.Ins()
|
|
if UnionLogo.ins == nil then
|
|
UnionLogo.ins = UnionLogo.new()
|
|
end
|
|
return UnionLogo.ins
|
|
end
|
|
|
|
function UnionLogo:Initialize()
|
|
NetIngUnionLogo.Ins():Initialize()
|
|
self.callback = UnionLogoCallback.new()
|
|
self.isGetingOForMakeT = {}
|
|
self.isMakingTWhenGetThumbnail = {}
|
|
self.willStopMakeThumbnailWhenGetThumbnail = {}
|
|
self.isSaving = {}
|
|
self.willStopMakeThumbnailWhenSaveUpload = {}
|
|
self.isMakingTWhenSaveAndUpload = {}
|
|
|
|
self.isGettingO = {} -- outside call
|
|
self.isGettingT = {} -- outside call
|
|
end
|
|
|
|
-- progress_callback
|
|
-- function (progressValue)
|
|
-- end
|
|
-- success_callback
|
|
-- function (bytes, localTimestamp)
|
|
-- end
|
|
-- error_callback
|
|
-- function (errorMessage)
|
|
-- end
|
|
-- is_through_personalphotocallback should be nil
|
|
function UnionLogo:GetOriginImage(caller_index, pos_index, timestamp, extension, progress_callback, success_callback, error_callback, is_keep_previous_callback, is_through_personalphotocallback)
|
|
print(string.format('UnionLogo:GetOriginImage\npos_index=%s\ntimestamp=%s\nis_keep_previous_callback=%s', tostring(pos_index), tostring(timestamp), tostring(is_keep_previous_callback)))
|
|
local unionID = self:GetUnionID()
|
|
local photoID = self:GetPhotoID(unionID, pos_index)
|
|
local idForCallback = caller_index .. '_' .. pos_index
|
|
if not is_through_personalphotocallback then
|
|
if not is_keep_previous_callback then
|
|
self.callback:ClearCallback(idForCallback, true)
|
|
end
|
|
self.callback:RegisterCallback(idForCallback, progress_callback, success_callback, error_callback, true)
|
|
|
|
if self:IsGettingO(photoID) then return end
|
|
self.isGettingO[photoID] = 0
|
|
end
|
|
|
|
extension = extension or PhotoFileInfo.PictureFormat.JPG
|
|
|
|
local isLatestLocal = false
|
|
local localTimestamp = LocalUnionLogo.Ins():GetTimestamp(photoID, true)
|
|
if localTimestamp ~= nil then
|
|
isLatestLocal = localTimestamp >= timestamp
|
|
else
|
|
isLatestLocal = false
|
|
end
|
|
if isLatestLocal then
|
|
local bytes = LocalUnionLogo.Ins():Get(photoID, localTimestamp, extension, true)
|
|
self.isGettingO[photoID] = nil
|
|
self.callback:FireSuccess(idForCallback, bytes, localTimestamp, true)
|
|
if is_through_personalphotocallback then
|
|
if success_callback ~= nil then
|
|
success_callback(bytes, localTimestamp)
|
|
end
|
|
end
|
|
else
|
|
local isDownloading = NetIngUnionLogo.Ins():IsDownloading(photoID, true)
|
|
if not isDownloading then
|
|
local downloadPath = ApplicationHelper.persistentDataPath .. '/' .. NetIngUnionLogo.Ins():GetTempDownloadPathOfLocal(photoID, true, extension)
|
|
NetIngUnionLogo.Ins():Download(
|
|
unionID,
|
|
pos_index,
|
|
photoID,
|
|
timestamp,
|
|
extension,
|
|
function (x)
|
|
local progressValue = x
|
|
self.callback:FireProgress(idForCallback, progressValue, true)
|
|
if is_through_personalphotocallback then
|
|
if progress_callback ~= nil then
|
|
progress_callback(progressValue)
|
|
end
|
|
end
|
|
end,
|
|
function ()
|
|
local bytes = FileHelper.LoadFile(downloadPath)
|
|
FileHelper.DeleteFile(downloadPath)
|
|
LocalUnionLogo.Ins():Save(photoID, bytes, timestamp, extension, true)
|
|
|
|
self.isGettingO[photoID] = nil
|
|
self.callback:FireSuccess(idForCallback, bytes, timestamp, true)
|
|
if is_through_personalphotocallback then
|
|
if success_callback ~= nil then
|
|
success_callback(bytes, timestamp)
|
|
end
|
|
end
|
|
end,
|
|
function (x)
|
|
-- delete error temp download file
|
|
if FileHelper.ExistFile(downloadPath) then
|
|
FileHelper.DeleteFile(downloadPath)
|
|
end
|
|
|
|
local errorMessage = x
|
|
self.isGettingO[photoID] = nil
|
|
self.callback:FireError(idForCallback, errorMessage, true)
|
|
if is_through_personalphotocallback then
|
|
if error_callback ~= nil then
|
|
error_callback(errorMessage)
|
|
end
|
|
end
|
|
end,
|
|
true
|
|
)
|
|
end
|
|
end
|
|
end
|
|
function UnionLogo:IsGettingO(photo_id)
|
|
return self.isGettingO[photo_id] ~= nil
|
|
end
|
|
|
|
function UnionLogo:StopGetOriginImage(photo_id)
|
|
NetIngUnionLogo.Ins():StopDownload(photo_id, true)
|
|
end
|
|
|
|
function UnionLogo:GetThumbnail(caller_index, pos_index, timestamp, extension, progress_callback, success_callback, error_callback, is_keep_previous_callback)
|
|
print(string.format('UnionLogo:GetThumbnail\npos_index=%s\ntimestamp=%s\nis_keep_previous_callback=%s', tostring(pos_index), tostring(timestamp), tostring(is_keep_previous_callback)))
|
|
local unionID = self:GetUnionID()
|
|
local photoID = self:GetPhotoID(unionID, pos_index)
|
|
local idForCallback = caller_index .. '_' .. pos_index
|
|
if not is_keep_previous_callback then
|
|
self.callback:ClearCallback(idForCallback, false)
|
|
end
|
|
self.callback:RegisterCallback(idForCallback, progress_callback, success_callback, error_callback, false)
|
|
if self:IsGettingT(photoID) then return end
|
|
self.isGettingT[photoID] = 0
|
|
|
|
extension = extension or PhotoFileInfo.PictureFormat.JPG
|
|
|
|
local isLatestLocal = false
|
|
local localTimestamp = LocalUnionLogo.Ins():GetTimestamp(photoID, false)
|
|
if localTimestamp ~= nil then
|
|
isLatestLocal = localTimestamp >= timestamp
|
|
else
|
|
isLatestLocal = false
|
|
end
|
|
if isLatestLocal then
|
|
local bytes = LocalUnionLogo.Ins():Get(photoID, localTimestamp, extension, false)
|
|
self.isGettingT[photoID] = nil
|
|
self.callback:FireSuccess(idForCallback, bytes, localTimestamp, false)
|
|
else
|
|
local isDownloading = NetIngUnionLogo.Ins():IsDownloading(photoID, false)
|
|
if not isDownloading and not self:IsGetingOForMakeT(photoID) and not self:IsMakingTWhenGetThumbnail(photoID) then
|
|
local downloadPath = ApplicationHelper.persistentDataPath .. '/' .. NetIngUnionLogo.Ins():GetTempDownloadPathOfLocal(photoID, false, extension)
|
|
NetIngUnionLogo.Ins():Download(
|
|
unionID,
|
|
pos_index,
|
|
photoID,
|
|
timestamp,
|
|
extension,
|
|
function (x)
|
|
local progressValue = x
|
|
self.callback:FireProgress(idForCallback, progressValue, false)
|
|
end,
|
|
function ()
|
|
local bytes = FileHelper.LoadFile(downloadPath)
|
|
FileHelper.DeleteFile(downloadPath)
|
|
LocalUnionLogo.Ins():Save(photoID, bytes, timestamp, extension, false)
|
|
|
|
self.isGettingT[photoID] = nil
|
|
self.callback:FireSuccess(idForCallback, bytes, timestamp, false)
|
|
end,
|
|
function ()
|
|
-- delete error temp download file
|
|
if FileHelper.ExistFile(downloadPath) then
|
|
FileHelper.DeleteFile(downloadPath)
|
|
end
|
|
|
|
self.isGetingOForMakeT[photoID] = 0
|
|
-- If origin image exists on local, getting origin image will LRU.
|
|
self:GetOriginImage(
|
|
0,
|
|
pos_index,
|
|
timestamp,
|
|
nil,
|
|
extension,
|
|
function (x, y)
|
|
self.isGetingOForMakeT[photoID] = nil
|
|
|
|
local bytesOfOriginImage = x
|
|
local timestampOfOriginImage = y
|
|
local texture = Texture2D(0,0,GamePhoto.GetTFFromExtension(extension),false)
|
|
ImageConversion.LoadImage(texture, bytesOfOriginImage)
|
|
self.isMakingTWhenGetThumbnail[photoID] = 0
|
|
FunctionTextureScale.ins:Scale(texture, UnionLogo.thumbnailCoefficient, function (x)
|
|
Object.DestroyImmediate(texture)
|
|
local scaledTexture = x
|
|
if self.willStopMakeThumbnailWhenGetThumbnail[photoID] ~= nil then
|
|
Object.DestroyImmediate(scaledTexture)
|
|
self.isMakingTWhenGetThumbnail[photoID] = nil
|
|
self.willStopMakeThumbnailWhenGetThumbnail[photoID] = nil
|
|
else
|
|
local bytes = nil
|
|
if extension == PhotoFileInfo.PictureFormat.PNG then
|
|
bytes = ImageConversion.EncodeToPNG(scaledTexture)
|
|
else
|
|
bytes = ImageConversion.EncodeToJPG(scaledTexture)
|
|
end
|
|
Object.DestroyImmediate(scaledTexture)
|
|
LocalUnionLogo.Ins():Save(photoID, bytes, timestampOfOriginImage, extension, false)
|
|
self.isMakingTWhenGetThumbnail[photoID] = nil
|
|
|
|
self.isGettingT[photoID] = nil
|
|
self.callback:FireSuccess(photoID, bytes, timestampOfOriginImage, false)
|
|
end
|
|
end)
|
|
end,
|
|
function (x)
|
|
self.isGetingOForMakeT[photoID] = nil
|
|
|
|
local errorMessage = x
|
|
self.isGettingT[photoID] = nil
|
|
self.callback:FireError(photoID, errorMessage, false)
|
|
end,
|
|
true,
|
|
true
|
|
)
|
|
end,
|
|
false
|
|
)
|
|
elseif self:IsMakingTWhenGetThumbnail(photoID) then
|
|
self.willStopMakeThumbnailWhenGetThumbnail[photoID] = nil
|
|
end
|
|
end
|
|
end
|
|
function UnionLogo:IsGettingT(photoID)
|
|
return self.isGettingT[photoID] ~= nil
|
|
end
|
|
function UnionLogo:IsGetingOForMakeT(photoID)
|
|
return self.isGetingOForMakeT[photoID] ~= nil
|
|
end
|
|
function UnionLogo:IsMakingTWhenGetThumbnail(photoID)
|
|
return self.isMakingTWhenGetThumbnail[photoID] ~= nil
|
|
end
|
|
|
|
function UnionLogo:StopGetThumbnail(photo_id)
|
|
NetIngUnionLogo.Ins():StopDownload(photo_id, false)
|
|
if self:IsGetingOForMakeT(photo_id) then
|
|
self:StopGetOriginImage(photo_id)
|
|
elseif self:IsMakingTWhenGetThumbnail(photo_id) then
|
|
self.willStopMakeThumbnailWhenGetThumbnail[photo_id] = 0
|
|
end
|
|
end
|
|
|
|
function UnionLogo:SaveAndUpload(pos_index, bytes, timestamp, extension, progress_callback, success_callback, error_callback)
|
|
print(string.format('UnionLogo:SaveAndUpload\npos_index=%s\ntimestamp=%s', tostring(pos_index), tostring(timestamp)))
|
|
|
|
local md5IsCorrect = false
|
|
local correctMD5 = GamePhoto.GetPhotoFileMD5_UnionLogo(pos_index)
|
|
if correctMD5 ~= nil then
|
|
local currentMD5 = MyMD5.HashBytes(bytes)
|
|
md5IsCorrect = currentMD5 == correctMD5
|
|
end
|
|
if not md5IsCorrect then
|
|
MsgManager.ShowMsgByID(3706)
|
|
if error_callback ~= nil then
|
|
error_callback('Error file.')
|
|
end
|
|
return
|
|
end
|
|
|
|
extension = extension or PhotoFileInfo.PictureFormat.JPG
|
|
|
|
local unionID = self:GetUnionID()
|
|
local photoID = self:GetPhotoID(unionID, pos_index)
|
|
if self:IsSaving(photoID) then
|
|
Debug.LogError('FAST HAND!')
|
|
else
|
|
self:StopSaveAndUpload(photoID)
|
|
self:StopGetOriginImage(photoID)
|
|
self:StopGetThumbnail(photoID)
|
|
self:ClearLocal(pos_index)
|
|
|
|
local m = self.isSaving[photoID]; m = m or 0; m = m + 1; self.isSaving[photoID] = m
|
|
LocalUnionLogo.Ins():SaveAsync(
|
|
photoID,
|
|
bytes,
|
|
timestamp,
|
|
extension,
|
|
function ()
|
|
local tempUploadRootPath = ApplicationHelper.persistentDataPath .. '/' .. NetIngUnionLogo.Ins():GetTempUploadRootPathOfLocal()
|
|
if not FileHelper.ExistDirectory(tempUploadRootPath) then
|
|
FileHelper.CreateDirectory(tempUploadRootPath)
|
|
end
|
|
local tempUploadPathOfLocal = ApplicationHelper.persistentDataPath .. '/' .. NetIngUnionLogo.Ins():GetTempUploadPathOfLocal(photoID, extension)
|
|
-- If file already exists, truncate.
|
|
FileDirectoryHandler.WriteFile(tempUploadPathOfLocal, bytes, function ()
|
|
local n = self.isSaving[photoID]; n = n - 1; self.isSaving[photoID] = n
|
|
NetIngUnionLogo.Ins():FormUpload(
|
|
pos_index,
|
|
photoID,
|
|
extension,
|
|
progress_callback,
|
|
function ()
|
|
FileHelper.DeleteFile(tempUploadPathOfLocal)
|
|
if success_callback ~= nil then
|
|
success_callback()
|
|
end
|
|
end,
|
|
error_callback
|
|
)
|
|
end)
|
|
end,
|
|
true
|
|
)
|
|
|
|
local texture = Texture2D(0, 0, GamePhoto.GetTFFromExtension(extension), false)
|
|
ImageConversion.LoadImage(texture, bytes)
|
|
self.isMakingTWhenSaveAndUpload[photoID] = 0
|
|
FunctionTextureScale.ins:Scale(texture, UnionLogo.thumbnailCoefficient, function (x)
|
|
Object.DestroyImmediate(texture)
|
|
local scaledTexture = x
|
|
if self.willStopMakeThumbnailWhenSaveUpload[photoID] ~= nil then
|
|
Object.DestroyImmediate(scaledTexture)
|
|
self.isMakingTWhenSaveAndUpload[photoID] = nil
|
|
self.willStopMakeThumbnailWhenSaveUpload[photoID] = nil
|
|
else
|
|
|
|
local bytesThumbnail = nil
|
|
if extension == PhotoFileInfo.PictureFormat.PNG then
|
|
bytesThumbnail = ImageConversion.EncodeToPNG(scaledTexture)
|
|
else
|
|
bytesThumbnail = ImageConversion.EncodeToJPG(scaledTexture)
|
|
end
|
|
Object.DestroyImmediate(scaledTexture)
|
|
LocalUnionLogo.Ins():Save(photoID, bytesThumbnail, timestamp, extension, false)
|
|
self.isMakingTWhenSaveAndUpload[photoID] = nil
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
function UnionLogo:IsSaving(photoID)
|
|
local m = self.isSaving[photoID]
|
|
return m ~= nil and m > 0
|
|
end
|
|
function UnionLogo:IsMakingTWhenSaveAndUpload(photoID)
|
|
return self.isMakingTWhenSaveAndUpload[photoID] ~= nil
|
|
end
|
|
|
|
function UnionLogo:StopSaveAndUpload(photoID)
|
|
self:StopUpload(photoID)
|
|
if self:IsMakingTWhenSaveAndUpload(photoID) then
|
|
self.willStopMakeThumbnailWhenSaveUpload[photoID] = 0
|
|
end
|
|
end
|
|
|
|
function UnionLogo:StopUpload(photoID)
|
|
NetIngUnionLogo.Ins():StopFormUpload(photoID)
|
|
end
|
|
|
|
function UnionLogo:Clear(pos_index, extension)
|
|
extension = extension or PhotoFileInfo.PictureFormat.JPG
|
|
|
|
local unionID = self:GetUnionID()
|
|
local photoID = self:GetPhotoID(unionID, pos_index)
|
|
self:StopSaveAndUpload(photoID)
|
|
self:StopGetOriginImage(photoID)
|
|
self:StopGetThumbnail(photoID)
|
|
self:ClearLocal(pos_index, extension)
|
|
end
|
|
|
|
function UnionLogo:ClearLocal(pos_index, extension)
|
|
extension = extension or PhotoFileInfo.PictureFormat.JPG
|
|
|
|
local unionID = self:GetUnionID()
|
|
local photoID = self:GetPhotoID(unionID, pos_index)
|
|
local downloadOPath = ApplicationHelper.persistentDataPath .. '/' .. NetIngUnionLogo.Ins():GetTempDownloadPathOfLocal(photoID, true, extension)
|
|
if FileHelper.ExistFile(downloadOPath) then
|
|
FileHelper.DeleteFile(downloadOPath)
|
|
end
|
|
local downloadTPath = ApplicationHelper.persistentDataPath .. '/' .. NetIngUnionLogo.Ins():GetTempDownloadPathOfLocal(photoID, false, extension)
|
|
if FileHelper.ExistFile(downloadTPath) then
|
|
FileHelper.DeleteFile(downloadTPath)
|
|
end
|
|
local tempUploadPathOfLocal = ApplicationHelper.persistentDataPath .. '/' .. NetIngUnionLogo.Ins():GetTempUploadPathOfLocal(photoID, extension)
|
|
if FileHelper.ExistFile(tempUploadPathOfLocal) then
|
|
FileHelper.DeleteFile(tempUploadPathOfLocal)
|
|
end
|
|
LocalUnionLogo.Ins():Delete(photoID, true)
|
|
LocalUnionLogo.Ins():Delete(photoID, false)
|
|
end
|
|
|
|
function UnionLogo:GetUnionID()
|
|
return self.currentUnionID
|
|
end
|
|
|
|
function UnionLogo:SetUnionID(union_id)
|
|
self.currentUnionID = union_id
|
|
end
|
|
|
|
function UnionLogo:GetPhotoID(union_id, pos_index)
|
|
return union_id .. '_' .. pos_index
|
|
end |