mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-12 20:44:30 +08:00
59 lines
2 KiB
CoffeeScript
59 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
|