From 85ffb7a4b689f8148d3654179af29b3a56d44695 Mon Sep 17 00:00:00 2001
From: Allen Gilliland <agilliland@gmail.com>
Date: Fri, 2 Oct 2015 14:16:43 -0700
Subject: [PATCH] simply sync the sample dataset on app startup, but explicitly
 skip any activity feed entries related to the sample dataset.

---
 src/metabase/events/activity_feed.clj | 22 +++++++++++++---------
 src/metabase/sample_data.clj          |  6 +++---
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/metabase/events/activity_feed.clj b/src/metabase/events/activity_feed.clj
index c93fdca0365..0387c9ac84d 100644
--- a/src/metabase/events/activity_feed.clj
+++ b/src/metabase/events/activity_feed.clj
@@ -6,6 +6,7 @@
             [metabase.events :as events]
             (metabase.models [activity :refer [Activity]]
                              [dashboard :refer [Dashboard]]
+                             [database :refer [Database]]
                              [session :refer [Session]])))
 
 
@@ -79,17 +80,20 @@
       :dashboard-remove-cards (record-activity topic object add-remove-card-details))))
 
 (defn- process-database-activity [topic object]
-  (let [database-details-fn (fn [obj] (-> obj
+  (let [database            (db/sel :one Database :id (events/object->model-id topic object))
+        database-details-fn (fn [obj] (-> obj
                                           (assoc :status "started")
                                           (dissoc :database_id :custom_id)))
-        database-table-fn (fn [obj] {:database-id (events/object->model-id topic obj)})]
-    (case topic
-      :database-sync-begin (record-activity :database-sync object database-details-fn database-table-fn)
-      :database-sync-end   (let [{activity-id :id} (db/sel :one Activity :custom_id (:custom_id object))]
-                             (db/upd Activity activity-id
-                               :details (-> object
-                                            (assoc :status "completed")
-                                            (dissoc :database_id :custom_id)))))))
+        database-table-fn   (fn [obj] {:database-id (events/object->model-id topic obj)})]
+    ;; NOTE: we are skipping any handling of activity for sample databases
+    (when (= false (:is_sample database))
+      (case topic
+        :database-sync-begin (record-activity :database-sync object database-details-fn database-table-fn)
+        :database-sync-end   (let [{activity-id :id} (db/sel :one Activity :custom_id (:custom_id object))]
+                               (db/upd Activity activity-id
+                                 :details (-> object
+                                              (assoc :status "completed")
+                                              (dissoc :database_id :custom_id))))))))
 
 (defn- process-user-activity [topic object]
   ;; we only care about login activity when its the users first session (a.k.a. new user!)
diff --git a/src/metabase/sample_data.clj b/src/metabase/sample_data.clj
index 1289c95b534..d1ea45e7636 100644
--- a/src/metabase/sample_data.clj
+++ b/src/metabase/sample_data.clj
@@ -32,6 +32,6 @@
         (log/error (format "Failed to load sample dataset: %s" (.getMessage e)))))))
 
 (defn update-sample-dataset-if-needed! []
-  ;; TODO - fill this out
-  ;; NOTE: we don't want to sync the sample dataset unless it has actually changed
-  nil)
+  ;; TODO - it would be a bit nicer if we skipped this when the data hasn't changed
+  (when-let [db (db/sel :one Database :is_sample true)]
+    (driver/sync-database! db)))
-- 
GitLab