diff --git a/frontend/src/app/main/data/workspace/thumbnails.cljs b/frontend/src/app/main/data/workspace/thumbnails.cljs index c4cde6e2d..625c207c6 100644 --- a/frontend/src/app/main/data/workspace/thumbnails.cljs +++ b/frontend/src/app/main/data/workspace/thumbnails.cljs @@ -10,7 +10,7 @@ [app.common.files.helpers :as cfh] [app.common.logging :as l] [app.common.thumbnails :as thc] - [app.config :as cf] + [app.common.uuid :as uuid] [app.main.data.changes :as dch] [app.main.data.persistence :as-alias dps] [app.main.data.workspace.notifications :as-alias wnt] @@ -19,7 +19,6 @@ [app.main.refs :as refs] [app.main.render :as render] [app.main.repo :as rp] - [app.util.http :as http] [app.util.queue :as q] [app.util.time :as tp] [app.util.timers :as tm] @@ -149,34 +148,34 @@ ptk/WatchEvent (watch [_ state stream] (l/dbg :hint "update thumbnail" :requester requester :object-id object-id :tag tag) - ;; Send the update to the back-end - (->> (request-thumbnail state file-id page-id frame-id tag) - (rx/mapcat (fn [blob] - ;; Send the data to backend - (let [params {:file-id file-id - :object-id object-id - :media blob - :tag (or tag "frame")}] - (rp/cmd! :create-file-object-thumbnail params)))) + (let [tp (tp/tpoint-ms)] + ;; Send the update to the back-end + (->> (request-thumbnail state file-id page-id frame-id tag) + (rx/mapcat (fn [blob] + (let [uri (wapi/create-uri blob) + params {:file-id file-id + :object-id object-id + :media blob + :tag (or tag "frame")}] - (rx/mapcat (fn [{:keys [object-id media-id]}] - (let [uri (cf/resolve-media media-id)] - ;; We perform this request just for - ;; populate the browser CACHE and avoid - ;; unnecesary image flickering - (->> (http/send! {:uri uri :method :get}) - (rx/map #(assoc-thumbnail object-id uri)))))) + (rx/merge + (rx/of (assoc-thumbnail object-id uri)) + (->> (rp/cmd! :create-file-object-thumbnail params) + (rx/catch rx/empty) + (rx/ignore)))))) - (rx/catch (fn [cause] - (.error js/console cause) - (rx/empty))) + (rx/catch (fn [cause] + (.error js/console cause) + (rx/empty))) - ;; We cancel all the stream if user starts editing while - ;; thumbnail is generating - (rx/take-until - (->> stream - (rx/filter (ptk/type? ::clear-thumbnail)) - (rx/filter #(= (deref %) object-id))))))))) + (rx/tap #(l/trc :hint "thumbnail updated" :elapsed (dm/str (tp) "ms"))) + + ;; We cancel all the stream if user starts editing while + ;; thumbnail is generating + (rx/take-until + (->> stream + (rx/filter (ptk/type? ::clear-thumbnail)) + (rx/filter #(= (deref %) object-id)))))))))) (defn- extract-root-frame-changes "Process a changes set in a commit to extract the frames that are changing" @@ -192,8 +191,8 @@ :mov-objects (->> (:shapes change) (map #(vector page-id %))) [])) - get-frame-id - (fn [[_ id]] + get-frame-ids + (fn get-frame-ids [id] (let [old-objects (wsh/lookup-data-objects old-data page-id) new-objects (wsh/lookup-data-objects new-data page-id) @@ -208,12 +207,21 @@ (conj old-frame-id) (cfh/root-frame? new-objects new-frame-id) - (conj new-frame-id))))] + (conj new-frame-id) + + (and (uuid? (:frame-id old-shape)) + (not= uuid/zero (:frame-id old-shape))) + (into (get-frame-ids (:frame-id old-shape))) + + (and (uuid? (:frame-id new-shape)) + (not= uuid/zero (:frame-id new-shape))) + (into (get-frame-ids (:frame-id new-shape))))))] (into #{} (comp (mapcat extract-ids) (filter (fn [[page-id']] (= page-id page-id'))) - (mapcat get-frame-id)) + (map (fn [[_ id]] id)) + (mapcat get-frame-ids)) changes))) (defn watch-state-changes