[Timeline] Ensure empty timelines don’t break removal of short entries

This commit is contained in:
Daniel - 2018-11-28 16:38:47 +01:00
parent a4febc68d1
commit f2db1f5b5e
Signed by: dbo
GPG Key ID: 4F63DB96D45AA9C6
1 changed files with 28 additions and 27 deletions

View File

@ -333,37 +333,38 @@ A slot is short if it is not longer than THRESHOLD seconds.
Resulting gaps are distributed evenly among adjacent slots.
THRESHOLD defaults to the value of
`timeline-tools-short-task-threshold if not supplied."
(let ((start (timeline-tools-entry-start-time (-first-item timeline)))
(end (timeline-tools-entry-end-time (-last-item timeline)))
(threshold (or threshold timeline-tools-short-task-threshold))
new-timeline)
(unless (null timeline)
(let ((start (timeline-tools-entry-start-time (-first-item timeline)))
(end (timeline-tools-entry-end-time (-last-item timeline)))
(threshold (or threshold timeline-tools-short-task-threshold))
new-timeline)
;; remove all slots that are too short
(setq new-timeline
(cl-remove-if (lambda (entry)
(<= (- (timeline-tools-entry-end-time entry)
(timeline-tools-entry-start-time entry))
threshold))
timeline))
;; remove all slots that are too short
(setq new-timeline
(cl-remove-if (lambda (entry)
(<= (- (timeline-tools-entry-end-time entry)
(timeline-tools-entry-start-time entry))
threshold))
timeline))
;; reset start and end times
(setf (timeline-tools-entry-start-time (-first-item new-timeline)) start)
(setf (timeline-tools-entry-end-time (-last-item new-timeline)) end)
;; reset start and end times
(setf (timeline-tools-entry-start-time (-first-item new-timeline)) start)
(setf (timeline-tools-entry-end-time (-last-item new-timeline)) end)
;; distribute gaps evenly among adjacent slots
(cl-do
((sub-timeline new-timeline (cdr sub-timeline)))
((null (cdr sub-timeline)))
(let* ((entry-1 (-first-item sub-timeline))
(entry-2 (-second-item sub-timeline))
(end-1 (timeline-tools-entry-end-time entry-1))
(start-2 (timeline-tools-entry-start-time entry-2)))
(when (not (= end-1 start-2))
(let ((middle (/ (+ end-1 start-2) 2)))
(setf (timeline-tools-entry-end-time entry-1) middle)
(setf (timeline-tools-entry-start-time entry-2) middle)))))
;; distribute gaps evenly among adjacent slots
(cl-do
((sub-timeline new-timeline (cdr sub-timeline)))
((null (cdr sub-timeline)))
(let* ((entry-1 (-first-item sub-timeline))
(entry-2 (-second-item sub-timeline))
(end-1 (timeline-tools-entry-end-time entry-1))
(start-2 (timeline-tools-entry-start-time entry-2)))
(when (not (= end-1 start-2))
(let ((middle (/ (+ end-1 start-2) 2)))
(setf (timeline-tools-entry-end-time entry-1) middle)
(setf (timeline-tools-entry-start-time entry-2) middle)))))
new-timeline))
new-timeline)))
(defun timeline-tools-transform-timeline (timeline)
"Return timeline from files, after application of