@@ -426,7 +426,11 @@ function mParticleConstants() as object
426426 session .mediaSessionId = CreateObject ("roDeviceInfo " ).GetRandomUUID ()
427427 session .currentPlayheadPosition = 0
428428 session .mediaContentComplete = false
429+ session .currentPlaybackStartTimestamp = 0
430+ session .storedPlaybackTime = 0
429431 session .mediaContentTimeSpent = 0
432+ session .mediaSessionStartTime = m .unixTimeMillis ()
433+ session .mediaSessionEndTime = m .unixTimeMillis ()
430434 session .mediaSessionSegmentTotal = 0
431435 session .mediaSessionAdTotal = 0
432436 session .mediaTotalAdTimeSpent = 0
@@ -475,6 +479,12 @@ function mParticleConstants() as object
475479 end function ,
476480 setMediaSessionAdObjects : function (session as object , mediaSessionAdObjects as object )
477481 session .mediaSessionAdObjects = mediaSessionAdObjects
482+ end function ,
483+ unixTimeMillis : function () as longinteger
484+ date = CreateObject ("roDateTime " )
485+ currentTime = CreateObject ("roLongInteger " )
486+ currentTime .SetLongInt (date .asSeconds ())
487+ return (currentTime * 1000 ) + date .getMilliseconds ()
478488 end function
479489 }
480490
@@ -1853,6 +1863,12 @@ function mParticleStart(options as object, messagePort as object)
18531863 eventAttributes .media_content_complete = "false"
18541864 end if
18551865 if (mediaSession .mediaContentTimeSpent <> invalid ) then
1866+ if (mediaSession .currentPlaybackStartTimestamp > 0 ) then
1867+ currentUnixTimeStamp = mparticle ()._internal .utils .unixTimeMillis ()
1868+ mediaSession .mediaContentTimeSpent = mediaSession .storedPlaybackTime + (currentUnixTimeStamp - mediaSession .currentPlaybackStartTimestamp )
1869+ else
1870+ mediaSession .mediaContentTimeSpent = mediaSession .storedPlaybackTime
1871+ end if
18561872 eventAttributes .media_content_time_spent = mediaSession .mediaContentTimeSpent .ToStr ()
18571873 end if
18581874 eventAttributes .media_session_segment_total = mediaSession .mediaSessionSegmentTotal .ToStr ()
@@ -2190,12 +2206,24 @@ function mParticleSGBridge(task as object) as object
21902206 m .invokeFunction ("media/logMediaSessionSummary" , [mediaSession , options ])
21912207 end function ,
21922208 logMediaContentEnd : function (mediaSession as object , options = {} as object ) as void
2209+ mediaSession .mediaContentComplete = true
2210+ if (mediaSession .currentPlaybackStartTimestamp > 0 ) then
2211+ mediaSession .storedPlaybackTime = mediaSession .storedPlaybackTime + (m .unixTimeMillis () - mediaSession .currentPlaybackStartTimestamp )
2212+ mediaSession .currentPlaybackStartTimestamp = 0
2213+ end if
21932214 m .invokeFunction ("media/logMediaContentEnd" , [mediaSession , options ])
21942215 end function ,
21952216 logPlay : function (mediaSession as object , options = {} as object ) as void
2217+ if (mediaSession .currentPlaybackStartTimestamp = 0 ) then
2218+ mediaSession .currentPlaybackStartTimestamp = m .unixTimeMillis ()
2219+ end if
21962220 m .invokeFunction ("media/logPlay" , [mediaSession , options ])
21972221 end function ,
21982222 logPause : function (mediaSession as object , options = {} as object ) as void
2223+ if (mediaSession .currentPlaybackStartTimestamp > 0 ) then
2224+ mediaSession .storedPlaybackTime = mediaSession .storedPlaybackTime + (m .unixTimeMillis () - mediaSession .currentPlaybackStartTimestamp )
2225+ mediaSession .currentPlaybackStartTimestamp = 0
2226+ end if
21992227 m .invokeFunction ("media/logPause" , [mediaSession , options ])
22002228 end function ,
22012229 logSeekStart : function (mediaSession as object , position as double , options = {} as object ) as void
@@ -2249,7 +2277,16 @@ function mParticleSGBridge(task as object) as object
22492277 logQoS : function (mediaSession as object , startupTime as integer , droppedFrames as integer , bitRate as integer , fps as integer , options = {} as object ) as void
22502278 m .invokeFunction ("media/logQoS" , [mediaSession , startupTime , droppedFrames , bitRate , fps , options ])
22512279 end function ,
2280+ unixTimeMillis : function () as longinteger
2281+ date = CreateObject ("roDateTime " )
2282+ currentTime = CreateObject ("roLongInteger " )
2283+ currentTime .SetLongInt (date .asSeconds ())
2284+ return (currentTime * 1000 ) + date .getMilliseconds ()
2285+ end function ,
22522286 invokeFunction : function (name as string , args )
2287+ if (args [0 ].mediaSessionEndTime ) then
2288+ args [0 ].mediaSessionEndTime = m .unixTimeMillis ()
2289+ end if
22532290 invocation = {}
22542291 invocation .methodName = name
22552292 invocation .args = args
0 commit comments