From fddac45687663e56650fe6af83ad7091a11ca902 Mon Sep 17 00:00:00 2001
From: Ben Gotow <bengotow@gmail.com>
Date: Wed, 21 Oct 2015 14:30:33 -0700
Subject: [PATCH] rm(metadata): MetadataStore is not in use, should be rebuilt

Resolves a request that happens whenver the user starts the app, reported in #108
---
 spec/stores/metadata-store-spec.coffee |   4 -
 src/flux/stores/metadata-store.coffee  | 114 -------------------------
 src/global/nylas-exports.coffee        |   1 -
 3 files changed, 119 deletions(-)
 delete mode 100644 spec/stores/metadata-store-spec.coffee
 delete mode 100644 src/flux/stores/metadata-store.coffee

diff --git a/spec/stores/metadata-store-spec.coffee b/spec/stores/metadata-store-spec.coffee
deleted file mode 100644
index 9cee22939..000000000
--- a/spec/stores/metadata-store-spec.coffee
+++ /dev/null
@@ -1,4 +0,0 @@
-MetadataStore = require '../../src/flux/stores/metadata-store'
-describe "MetadataStore", ->
-  beforeEach: ->
-    spyOn(atom, "isMainWindow").andReturn(true)
diff --git a/src/flux/stores/metadata-store.coffee b/src/flux/stores/metadata-store.coffee
deleted file mode 100644
index 2a937b541..000000000
--- a/src/flux/stores/metadata-store.coffee
+++ /dev/null
@@ -1,114 +0,0 @@
-_ = require 'underscore'
-
-Reflux = require 'reflux'
-Actions = require '../actions'
-Metadata = require '../models/metadata'
-
-EdgehillAPI = require '../edgehill-api'
-
-DatabaseStore = require '../stores/database-store'
-AccountStore = require '../stores/account-store'
-
-
-CreateMetadataTask = require '../tasks/create-metadata-task'
-DestroyMetadataTask = require '../tasks/destroy-metadata-task'
-
-# TODO: This Store has to double cache data from the API and the DB with
-# minor variation.  There's a task to refactor these stores into something
-# like an `APIBackedStore` to abstract some of the complex logic out.
-
-MAX_API_RATE = 1000
-
-module.exports =
-MetadataStore = Reflux.createStore
-  init: ->
-    @listenTo DatabaseStore, @_onDBChanged
-    @listenTo AccountStore, @_onAccountChanged
-
-    refreshDBFromAPI = _.debounce(_.bind(@_refreshDBFromAPI, @), MAX_API_RATE)
-    @_typesToRefresh = {}
-
-    @listenTo Actions.metadataError, (errorData) =>
-      return unless errorData.type
-      @_typesToRefresh[errorData.type] = true
-      refreshDBFromAPI()
-    @listenTo Actions.metadataCreated, (type) =>
-      @_typesToRefresh[type] = true
-      refreshDBFromAPI()
-    @listenTo Actions.metadataDestroyed, (type) =>
-      @_typesToRefresh[type] = true
-      refreshDBFromAPI()
-
-    @_accountId = AccountStore.current()?.id
-    @_metadata = {}
-
-    @_fullRefreshFromAPI()
-
-    @_refreshCacheFromDB = _.debounce(_.bind(@_refreshCacheFromDB, @), 16)
-    @_refreshCacheFromDB()
-
-  # Returns a promise that will eventually return the metadata you want
-  getMetadata: (type, publicId, key) ->
-    if type? and publicId? and key?
-      return @_metadata[type]?[publicId]?[key]
-    else if type? and publicId?
-      return @_metadata[type]?[publicId]
-    else if type?
-      return @_metadata[type]
-    else return null
-
-  _fullRefreshFromAPI: ->
-    return if not atom.isMainWindow() or atom.inSpecMode()
-    return unless @_accountId
-    @_apiRequest() # The lack of type will request everything!
-
-  _refreshDBFromAPI: ->
-    return if not atom.isMainWindow() or atom.inSpecMode()
-    types = Object.keys(@_typesToRefresh)
-    @_typesToRefresh = {}
-    promises = types.map (type) => @_apiRequest(type)
-    Promise.settle(promises)
-
-  _apiRequest: (type) ->
-    typePath = if type then "/#{type}/" else "/"
-    new Promise (resolve, reject) =>
-      EdgehillAPI.request
-        path: "/metadata/#{@_accountId}#{typePath}"
-        success: (metadata) ->
-          metadata = metadata?.results ? []
-          metadata = metadata.map (metadatum) ->
-            metadatum.publicId = metadatum.id
-            return new Metadata(metadatum)
-          if metadata.length is 0 then resolve()
-          else
-            DatabaseStore.persistModels(metadata).then(resolve).catch(reject)
-        error: (apiError) ->
-          reject(apiError)
-
-  _onDBChanged: (change) ->
-    return unless change.objectClass is Metadata.name
-    @_refreshCacheFromDB()
-
-  _refreshCacheFromDB: ->
-    new Promise (resolve, reject) =>
-      DatabaseStore.findAll(Metadata)
-      .then (metadata=[]) =>
-        @_metadata = {}
-        for metadatum in metadata
-          @_metadata[metadatum.type] ?= {}
-          @_metadata[metadatum.type][metadatum.publicId] ?= {}
-          @_metadata[metadatum.type][metadatum.publicId][metadatum.key] = metadatum.value
-        @trigger()
-        resolve()
-      .catch (err) ->
-        console.warn("Request for Metadata failed. #{err}")
-
-  _onAccountChanged: ->
-    @_accountId = AccountStore.current()?.id
-    @_fullRefreshFromAPI()
-
-  _deleteAllMetadata: ->
-    DatabaseStore.findAll(Metadata).then (metadata) ->
-      meatdata.forEach (metadatum) ->
-        t = new DestroyMetadataTask(metadatum)
-        Actions.queueTask(t)
diff --git a/src/global/nylas-exports.coffee b/src/global/nylas-exports.coffee
index 07fe98f21..2b89cfe45 100644
--- a/src/global/nylas-exports.coffee
+++ b/src/global/nylas-exports.coffee
@@ -103,7 +103,6 @@ class NylasExports
   @require "MessageStore", 'flux/stores/message-store'
   @require "ContactStore", 'flux/stores/contact-store'
   @require "CategoryStore", 'flux/stores/category-store'
-  @require "MetadataStore", 'flux/stores/metadata-store'
   @require "AnalyticsStore", 'flux/stores/analytics-store'
   @require "WorkspaceStore", 'flux/stores/workspace-store'
   @require "DraftCountStore", 'flux/stores/draft-count-store'