@@ -411,8 +411,56 @@ class ScheduleViewController: UIViewController, EventViewController, MessageEnab
411411 private func nowEventIndex( ) -> Int ? {
412412
413413 let now = Date ( )
414+ var candidatePos : Int ? = nil
415+ var candidateEndDate : Date ? = nil
416+ var candidateAlreadyStarted = false
417+ var candidatePosFallback : Int ? = nil
414418
415- return self . dayEvents. index ( where: { $0. end >= now && $0. track != " General " } )
419+ for (index, event) in self . dayEvents. enumerated ( ) {
420+
421+ let endDate = event. end as NSDate
422+
423+ if endDate. mt_is ( after: now) || endDate. isEqual ( to: now) && event. eventType == " Presentation " {
424+
425+ let startDate = event. start as NSDate
426+ let oneHourAgo = ( now as NSDate ) . mt_oneHourPrevious ( )
427+
428+ // already started
429+ let currentAlreadyStarted = startDate. mt_is ( before: now) || startDate. mt_is ( before: now)
430+ // started over more than hour ago
431+ if currentAlreadyStarted && startDate. mt_is ( before: oneHourAgo) {
432+
433+ candidatePosFallback = index
434+ continue
435+ }
436+
437+ if candidateAlreadyStarted && !currentAlreadyStarted {
438+
439+ continue
440+ }
441+
442+ if candidateEndDate == nil || ( candidateEndDate! as NSDate ) . mt_is ( after: event. end) {
443+
444+ candidatePos = index
445+ candidateAlreadyStarted = currentAlreadyStarted
446+ candidateEndDate = event. end
447+ }
448+ }
449+ }
450+
451+ if candidatePos == nil {
452+
453+ candidatePos = candidatePosFallback
454+ }
455+
456+ if candidatePos == nil {
457+
458+ return self . dayEvents. count - 1
459+ }
460+ else {
461+
462+ return candidatePos
463+ }
416464 }
417465
418466 // MARK: - AFHorizontalDayPickerDelegate
0 commit comments