Skip to content

Commit 7e03abf

Browse files
authored
feat: Add Media Session Timestamps and Media Sessions time tracking (#40)
1 parent 48aaa8a commit 7e03abf

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

mParticleCore.brs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)