Skip to content

Commit 38ad7a9

Browse files
[Gmail] fix last date (#16205)
* truncate timestamp in query * additional improvements * bump versions * pnpm
1 parent a325ef8 commit 38ad7a9

File tree

6 files changed

+34
-44
lines changed

6 files changed

+34
-44
lines changed

components/gmail/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@pipedream/gmail",
3-
"version": "0.2.7",
3+
"version": "0.2.8",
44
"description": "Pipedream Gmail Components",
55
"main": "gmail.app.mjs",
66
"keywords": [

components/gmail/sources/common/polling-messages.mjs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@ export default {
77
...common.hooks,
88
async deploy() {
99
const messageIds = await this.getMessageIds(constants.HISTORICAL_EVENTS);
10-
if (!messageIds?.length) {
11-
return;
10+
if (messageIds.length) {
11+
await this.processHistoricalEvents(messageIds);
1212
}
13-
await this.processHistoricalEvents(messageIds);
1413
},
1514
async activate() {
1615
console.log(`Previous lastDate: ${this.getLastDate()}`);
@@ -24,37 +23,38 @@ export default {
2423
return this.db.get("lastDate");
2524
},
2625
setLastDate(lastDate) {
27-
this.db.set("lastDate", lastDate);
26+
this.db.set("lastDate", parseInt(lastDate));
2827
},
2928
constructQuery(lastDate) {
3029
const { q: query } = this;
3130
const after = !query?.includes("after:") && lastDate
32-
? `after:${lastDate / 1000}`
31+
? `after:${Math.trunc(lastDate / 1000)}`
3332
: "";
34-
return [
33+
const q = [
3534
after,
3635
query,
3736
].join(" ").trim();
37+
console.log(`Polling for new messages with query: ${q}`);
38+
return q;
3839
},
3940
async getMessageIds(max, lastDate = 0) {
40-
console.log("Polling for new messages...");
4141
const { messages } = await this.gmail.listMessages({
4242
q: this.constructQuery(lastDate),
4343
labelIds: this.getLabels(),
4444
maxResults: max,
4545
});
46-
return messages?.map((message) => message.id);
46+
return messages?.map((message) => message.id) ?? [];
4747
},
4848
async processMessageIds(messageIds, lastDate) {
4949
let maxDate = lastDate;
5050
const messages = this.gmail.getAllMessages(messageIds);
5151
for await (const message of messages) {
52-
if (message.internalDate >= lastDate) {
53-
this.emitEvent(message);
54-
maxDate = Math.max(maxDate, message.internalDate);
55-
}
52+
this.emitEvent(message);
53+
maxDate = Math.max(maxDate, message.internalDate);
54+
}
55+
if (maxDate !== lastDate) {
56+
this.setLastDate(maxDate);
5657
}
57-
if (maxDate) this.setLastDate(maxDate);
5858
},
5959
async processHistoricalEvents(messageIds) {
6060
let messages = await this.gmail.getMessages(messageIds);
@@ -66,10 +66,11 @@ export default {
6666
async run() {
6767
const lastDate = this.getLastDate();
6868
const messageIds = await this.getMessageIds(constants.DEFAULT_LIMIT, lastDate);
69-
if (!messageIds?.length) {
69+
if (messageIds.length) {
70+
console.log(`Processing ${messageIds.length} message(s)...`);
71+
await this.processMessageIds(messageIds.reverse(), lastDate);
72+
} else {
7073
console.log("There are no new messages. Exiting...");
71-
return;
7274
}
73-
await this.processMessageIds(messageIds.reverse(), lastDate);
7475
},
7576
};

components/gmail/sources/new-attachment-received/new-attachment-received.mjs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export default {
66
key: "gmail-new-attachment-received",
77
name: "New Attachment Received",
88
description: "Emit new event for each attachment in a message received. This source is capped at 100 max new messages per run.",
9-
version: "0.0.9",
9+
version: "0.0.10",
1010
type: "source",
1111
dedupe: "unique",
1212
props: {
@@ -31,18 +31,13 @@ export default {
3131
methods: {
3232
...common.methods,
3333
constructQuery(lastDate) {
34-
const { q: query } = this;
35-
const hasAttachment = query?.includes("has:attachment")
36-
? ""
37-
: "has:attachment";
38-
const after = !query?.includes("after:") && lastDate
39-
? `after:${lastDate / 1000}`
40-
: "";
41-
return [
42-
hasAttachment,
43-
after,
44-
query,
45-
].join(" ").trim();
34+
const hasAttachment = "has:attachment";
35+
if (!this.q) {
36+
this.q = hasAttachment;
37+
} else if (!this.q.includes(hasAttachment)) {
38+
this.q = `${this.q} ${hasAttachment}`;
39+
}
40+
return common.methods.constructQuery.call(this, lastDate);
4641
},
4742
getLabels() {
4843
return this.labels;

components/gmail/sources/new-email-matching-search/new-email-matching-search.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export default {
66
key: "gmail-new-email-matching-search",
77
name: "New Email Matching Search",
88
description: "Emit new event when an email matching the search criteria is received. This source is capped at 100 max new messages per run.",
9-
version: "0.0.7",
9+
version: "0.0.8",
1010
type: "source",
1111
dedupe: "unique",
1212
props: {

components/gmail/sources/new-sent-email/new-sent-email.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export default {
66
key: "gmail-new-sent-email",
77
name: "New Sent Email",
88
description: "Emit new event for each new email sent. (Maximum of 100 events emited per execution)",
9-
version: "0.0.8",
9+
version: "0.0.9",
1010
type: "source",
1111
dedupe: "unique",
1212
props: {

pnpm-lock.yaml

Lines changed: 6 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)