Mailspring/internal_packages/sidebar-fullcontact/lib/fullcontact-store.coffee

60 lines
2 KiB
CoffeeScript

_ = require 'underscore'
Reflux = require 'reflux'
request = require 'request'
{Contact,
AccountStore
ContactStore,
DatabaseStore,
FocusedContactsStore} = require 'nylas-exports'
module.exports =
FullContactStore = Reflux.createStore
init: ->
@_loadContactDataFromAPI = _.debounce(_.bind(@__loadContactDataFromAPI, @), 50)
# @_cachedContactData = {}
@_resolvedFocusedContact = null
@_loadFocusedContact = _.debounce(_.bind(@_loadFocusedContact, @), 20)
@_loadFocusedContact()
@listenTo ContactStore, @_loadFocusedContact
@listenTo FocusedContactsStore, @_loadFocusedContact
focusedContact: -> @_resolvedFocusedContact
# We need to pull fresh from the database so when we update data in the
# for the contact, we get it anew.
_loadFocusedContact: ->
contact = FocusedContactsStore.focusedContact()
account = AccountStore.current()
if contact
@_resolvedFocusedContact = contact
DatabaseStore.findBy(Contact, {email: contact.email, accountId: account.id}).then (contact) =>
@_resolvedFocusedContact = contact
if contact and not contact.thirdPartyData?["FullContact"]?
@_loadContactDataFromAPI(contact)
@trigger()
else
@_resolvedFocusedContact = null
@trigger()
__loadContactDataFromAPI: (contact) ->
# Swap the url's to see real data
email = contact.email.toLowerCase().trim()
return if email.length is 0
url = "https://api.fullcontact.com/v2/person.json?email=#{email}&apiKey=eadcbaf0286562a"
request url, (err, resp, data) =>
return {} if err
return {} if resp.statusCode != 200
try
data = JSON.parse data
contact = @_mergeDataIntoContact(contact, data)
DatabaseStore.persistModel(contact).then => @trigger(@)
_mergeDataIntoContact: (contact, data) ->
contact.title = data.organizations?[0]?["title"]
contact.company = data.organizations?[0]?["name"]
contact.thirdPartyData ?= {}
contact.thirdPartyData["FullContact"] = data
return contact