         (condp = command
           :start (if stop-ch
                    (recur start-at speed end-ch stop-ch)
-                   (do
-                     (show-loading source msg-ch)
-                     (let [{:keys [frames duration]} (<! (@recording-ch-fn true))
-                           stop-ch (chan)
-                           end-ch (play! msg-ch frames duration start-at speed loop? stop-ch)]
-                       (recur nil speed end-ch stop-ch))))
+                   (let [{:keys [frames duration]} data
+                         stop-ch (chan)
+                         end-ch (play! msg-ch frames duration start-at speed loop? stop-ch)]
+                     (recur nil speed end-ch stop-ch)))
           :stop (if stop-ch
                   (do
                     (close! stop-ch)

          :exit nil
          :internal/rewind (recur 0 speed nil nil)
          :internal/seek (let [start-at arg
                               {:keys [frames duration]} (<! (@recording-ch-fn true))
                               start-at (util/adjust-to-range start-at 0 duration)]
                           (>! msg-ch (m/->UpdateTime start-at))
                           (>! msg-ch (m/->UpdateScreen (screen-at start-at frames)))
                           (recur start-at speed end-ch stop-ch)))))))

(defrecord Recording [recording-ch-fn command-ch start-at speed auto-play? loop? preload? poster-time]
  Source
  (init [this]
    (let [msg-ch (chan)]
      (start-event-loop! this command-ch msg-ch)
      (report-metadata this msg-ch)
      (when preload?
        (@recording-ch-fn true))
      (if auto-play?
        (start this)
        (when poster-time
          (show-poster this poster-time msg-ch)))
      msg-ch))
  (close [this]
    (put! command-ch [:stop])
    (put! command-ch [:exit]))
  (start [this]
    (put! command-ch [:start]))
  (stop [this]
    (put! command-ch [:stop]))
  (toggle [this]
    (put! command-ch [:toggle]))
  (seek [this time]
    (put! command-ch [:seek time]))
  (change-speed [this speed]
    (put! command-ch [:change-speed speed])))

      (>! msg-ch (m/->SetPlaying false))
      stopped-at)))

(defn start-event-loop
  "Main event loop of the Recording."
  [{:keys [start-at speed loop? command-ch]} msg-ch data]
  (let [pri-ch (chan 10)]
    (go-loop [start-at start-at
              speed speed
