--****************************************************************************
-- Software: FLASH UPLOAD CLASS
-- Version: 1.2
-- Date: 2011-11-04
-- Author: Valentin Schmidt
-- Contact: fluxus@freenet.de
-- License: Freeware
--
--****************************************************************************
property pFilename
property pUrl
property pAllTypes
property pFileRef
property pMaxSize
property pCbHandler
property pCbTarget
property pPrivateData -- arbitrary data that is passed along to the callback
property pStatus -- either "idle" or "running"
----------------------------------------
--
----------------------------------------
on new me
return me.script -- SINGLETON
end
----------------------------------------
--
----------------------------------------
on mInit me, tUrl, tCbHandler, tCbTarget
me.pUrl = tUrl
me.pCbHandler = tCbHandler
if voidP(tCbTarget) then tCbTarget=_movie
me.pCbTarget = tCbTarget
me.pAllTypes = void
me.pMaxSize = the maxInteger
me.pPrivateData = void
listener = newObject("Object")
setCallback(listener, "onSelect", #onSelect, me)
setCallback(listener, "onCancel", #onCancel, me)
setCallback(listener, "onOpen", #onOpen, me)
setCallback(listener, "onProgress", #onProgress, me)
setCallback(listener, "onComplete", #onComplete, me)
setCallback(listener, "onHTTPError", #onHTTPError, me)
setCallback(listener, "onIOError", #onIOError, me)
me.pFileRef = newObject("flash.net.FileReference")
me.pFileRef.addListener(listener)
me.pStatus = "idle"
end
----------------------------------------
--
----------------------------------------
on mDestroy me
pAllTypes = VOID
pFileRef = VOID
end
----------------------------------------
--
----------------------------------------
on mStartUpload me, tUrl, tPrivateData
me.pPrivateData = tPrivateData
if not voidP(tUrl) then me.pUrl = tUrl
if voidP(me.pAllTypes) then pFileRef.browse()
else pFileRef.browse(me.pAllTypes)
end
----------------------------------------
--
----------------------------------------
on mSetFileSizeLimit (me, tSize)
me.pMaxSize = tSize
end
----------------------------------------
--
----------------------------------------
on mSetFileTypes (me, tDescription, tExtensions)
me.pAllTypes = newObject("Array")
imageTypes = newObject("Object")
imageTypes.description = tDescription
imageTypes.extension = tExtensions
me.pAllTypes.push(imageTypes)
end
--**************************************
-- PRIVATE
--**************************************
----------------------------------------
--
----------------------------------------
on onSelect me, listener, fileRef
me._dbg("onSelect: " & fileRef.name)
me.pFilename = fileRef.name
if fileRef.size > me.pMaxSize then
me._dbg("Selected file exceeds limit (filesize="&fileRef.size&")")
call(pCbHandler, pCbTarget, false, me.pFilename, -1, me.pPrivateData)
return
end if
tUrl = pUrl&"?f="&URLEncode(me.pFilename)
ok = me.pFileRef.upload( tUrl )
if not(ok) then
me._dbg("Upload dialog failed to open.")
else
me._progressInit()
end if
me.pStatus = "running"
end
----------------------------------------
--
----------------------------------------
on onCancel me, listener, fileRef
me._dbg("onCancel")
me.pStatus = "idle"
end
----------------------------------------
--
----------------------------------------
on onOpen me, listener, fileRef
me._dbg("onOpen: " & fileRef.name)
end
----------------------------------------
--
----------------------------------------
on onProgress me, listener, fileRef, bytesLoaded, bytesTotal
me._dbg("onProgress with bytesLoaded: " & bytesLoaded & " bytesTotal: " & bytesTotal)
me._progressShow(bytesLoaded/bytesTotal)
end
----------------------------------------
--
----------------------------------------
on onComplete me, listener, fileRef
me._dbg("onComplete: " & fileRef.name)
me._progressDestroy()
me.pStatus = "idle"
call(pCbHandler, pCbTarget, true, me.pFilename, void, me.pPrivateData)
end
----------------------------------------
--
----------------------------------------
on onHTTPError me, listener, fileRef, httpError
me._dbg("onHTTPError: " & me.pFileRef.name &" Error:"+httpError)
me._progressDestroy()
me.pStatus = "idle"
call(pCbHandler, pCbTarget, false, me.pFilename, integer(httpError), me.pPrivateData)
end
----------------------------------------
--
----------------------------------------
on onIOError me, listener, fileRef
me._dbg("onIOError: " & me.pFileRef.name)
me._progressDestroy()
me.pStatus = "idle"
call(pCbHandler, pCbTarget, false, me.pFilename, -2, me.pPrivateData)
end
----------------------------------------
-- overwrite!
----------------------------------------
on _dbg (me, str)
dbg(str)
end
----------------------------------------
-- PROGRESS-BAR HOOKS: overwrite!
----------------------------------------
----------------------------------------
--
----------------------------------------
on _progressInit me
-- me.pProg = script("ProgressDialog").new("File is uploaded...",0,1,1)
end
----------------------------------------
--
----------------------------------------
on _progressShow me, val
-- me.pProg.mShowProgress(val)
put "PROGRESS:" && val
end
----------------------------------------
--
----------------------------------------
on _progressDestroy me
-- me.pProg.mDestroy()
end