@@ -34,12 +34,15 @@ public override string ToString() {
3434 }
3535
3636 //Time
37- public DateTime ReturnDate ( ) {
37+ public DateTime ? ReturnDate ( ) {
3838 DateTime tempDate = new DateTime ( ) ;
3939 if ( type == TimelineItemType . activity )
4040 tempDate = activity . startTime ;
41- else
41+ else {
42+ if ( ! place . startTime . HasValue )
43+ return null ;
4244 tempDate = place . startTime . Value ;
45+ }
4346 return new DateTime ( tempDate . Year , tempDate . Month , tempDate . Day , 12 , 0 , 0 , tempDate . Kind ) ;
4447 }
4548
@@ -315,10 +318,14 @@ void GetPlace(GpxTools.Gpx.GpxWayPoint waypoint) {
315318 if ( waypoint . Links . Count > 0 )
316319 link = waypoint . Links [ 0 ] . Href ;
317320 // If previous is place
318- if ( timelineItems . Count >= 1 && timelineItems . Last ( ) . type == XmlTimeline . TimelineItemType . place )
319- timelineItems . Last ( ) . place . endTime = startTime ;
320- //if (timelineItems.Count >= 1 && timelineItems.Last().type == XmlTimeline.TimelineItemType.activity)
321- // startTime = timelineItems.Last().activity.endTime;
321+ if ( timelineItems . Count >= 1 && timelineItems . Last ( ) . type == XmlTimeline . TimelineItemType . place ) {
322+ if ( ! timelineItems . Last ( ) . place . endTime . HasValue && startTime . HasValue )
323+ timelineItems . Last ( ) . place . endTime = startTime ;
324+ else {
325+ startTime = timelineItems . Last ( ) . place . startTime ;
326+ }
327+ } else if ( timelineItems . Count >= 1 && timelineItems . Last ( ) . type == XmlTimeline . TimelineItemType . activity && ! startTime . HasValue )
328+ startTime = timelineItems . Last ( ) . activity . endTime ;
322329 timelineItems . Add ( new XmlTimeline . TimelineItem ( new XmlTimeline . Place ( location , name , startTime , ele , link ) ) ) ;
323330 }
324331 void GetMove ( GpxTools . Gpx . GpxTrack track ) {
@@ -353,19 +360,33 @@ void AddTimeToPreviousPlace(XmlTimeline.Activity activity) {
353360 if ( timelineItems . Count >= 1 ) {
354361 if ( timelineItems . Last ( ) . type == XmlTimeline . TimelineItemType . place )
355362 timelineItems . Last ( ) . place . endTime = activity . startTime ;
363+ if ( timelineItems . Count >= 2 )
364+ if ( timelineItems [ timelineItems . Count - 2 ] . type == XmlTimeline . TimelineItemType . place && ! timelineItems [ timelineItems . Count - 2 ] . place . endTime . HasValue )
365+ timelineItems [ timelineItems . Count - 2 ] . place . endTime = activity . startTime ;
356366 }
357367 }
358368
359369 // End calculations
360370 void SetStartEnd ( ) {
361371 if ( timelineItems . First ( ) . type == XmlTimeline . TimelineItemType . place && ! timelineItems . First ( ) . place . startTime . HasValue ) {
362- DateTime time = timelineItems . First ( ) . place . endTime . Value ;
372+ DateTime time = new DateTime ( ) ;
373+ if ( timelineItems . First ( ) . place . endTime . HasValue )
374+ time = timelineItems . First ( ) . place . endTime . Value ;
375+ else if ( timelineItems [ 1 ] . type == XmlTimeline . TimelineItemType . place && timelineItems [ 1 ] . place . startTime . HasValue )
376+ time = timelineItems [ 1 ] . place . startTime . Value ;
377+ else if ( timelineItems [ 1 ] . type == XmlTimeline . TimelineItemType . activity )
378+ time = timelineItems [ 1 ] . activity . startTime ;
363379 DateTime newTime = new DateTime ( time . Year , time . Month , time . Day , 0 , 0 , 0 , time . Kind ) ;
364380 timelineItems . First ( ) . place . startTime = newTime ;
365381 }
366-
367382 if ( timelineItems . Last ( ) . type == XmlTimeline . TimelineItemType . place && ! timelineItems . Last ( ) . place . endTime . HasValue ) {
368- DateTime time = timelineItems . Last ( ) . place . startTime . Value ;
383+ DateTime time = new DateTime ( ) ;
384+ if ( timelineItems . Last ( ) . place . startTime . HasValue )
385+ time = timelineItems . Last ( ) . place . startTime . Value ;
386+ else if ( timelineItems [ timelineItems . Count - 2 ] . type == XmlTimeline . TimelineItemType . place && timelineItems [ timelineItems . Count - 2 ] . place . endTime . HasValue )
387+ time = timelineItems [ timelineItems . Count - 2 ] . place . endTime . Value ;
388+ else if ( timelineItems [ timelineItems . Count - 2 ] . type == XmlTimeline . TimelineItemType . activity )
389+ time = timelineItems [ timelineItems . Count - 2 ] . activity . endTime ;
369390 DateTime newTime = new DateTime ( time . Year , time . Month , time . Day , 23 , 59 , 59 , time . Kind ) ;
370391 timelineItems . Last ( ) . place . endTime = newTime ;
371392 }
@@ -437,7 +458,9 @@ public static List<XmlReader> Split(XmlReader xml) {
437458 currentDate = item . ReturnDate ( ) ;
438459 }
439460
440- if ( currentDate == item . ReturnDate ( ) ) {
461+ if ( item . ReturnDate ( ) == null ) {
462+
463+ } if ( currentDate == item . ReturnDate ( ) ) {
441464 tempList . Add ( item ) ;
442465 lastItem = item ;
443466 } else {
0 commit comments