mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-24 17:26:06 +08:00
b79488ae43
Summary: This diff solves a few separate issues from T7313, T7316, T7282, and it refactors the send code a little bit. Initially, the problem that led to this diff was generating message ids that wouldn't collide (which was causing errors in the message-processor). Collisions in ids were being caused by messages that contained the exact same participants, subject and date (most likely due bots or scripts sending emails in quick succession) To prevent collisions this commit adds the `message-id` header as part of the database message id, and ensures that we set it correctly before sending, and that it remains consistent through send, multi-send, and the sync loop. During the refactor and review, I removed some code that assumed that we were syncing drafts (which we aren't), and also fixes a few other known and unknown issues around sending, message creation, and tracking, like assigning the correct date header (we were previously assigning the draft creation date from within N1), fixing the tracking regex, among other smaller bugs/typos. Will address inline TODOs in a separate diff Test Plan: TODO!!! I will add tests in another diff Reviewers: evan, halla, jackie, khamidou Reviewed By: halla, jackie Differential Revision: https://phab.nylas.com/D3507
26 lines
781 B
JavaScript
26 lines
781 B
JavaScript
|
|
module.exports = {
|
|
copyModel(Model, model, updates = {}) {
|
|
const fields = Object.keys(model.dataValues)
|
|
const data = {}
|
|
for (const field of fields) {
|
|
// We can't just copy over the values directly from `dataValues` because
|
|
// they are the raw values, and we would ignore custom getters.
|
|
// Rather, we access them from the model instance.
|
|
// For example our JSON database type, is simply a string and the custom
|
|
// getter parses it into json. We want to get the parsed json, not the
|
|
// string
|
|
data[field] = model[field]
|
|
}
|
|
return Model.build(Object.assign({}, data, updates))
|
|
},
|
|
|
|
isValidId(value) {
|
|
if (value == null) { return false; }
|
|
if (isNaN(parseInt(value, 36))) {
|
|
return false
|
|
}
|
|
return true
|
|
},
|
|
}
|