Skip to content

Commit

Permalink
Adjust inputs for schedule restrictions
Browse files Browse the repository at this point in the history
  • Loading branch information
jperryhouts committed Nov 23, 2020
1 parent f6b2162 commit d072254
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 25 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ release: release/send_later-${version}-tb.xpi
lint:
addons-linter .

unit_test: $(shell find $(shell cat dev/include-manifest) 2>/dev/null)
unit_test: $(shell find $(shell cat dev/include-manifest) | grep -v '_locales' 2>/dev/null)
@node test/run_tests.js 2>&1 \
| sed -e '/^+ TEST'/s//"`printf '\033[32m+ TEST\033[0m'`"'/' \
| sed -e '/^- TEST'/s//"`printf '\033[31m- TEST\033[0m'`"'/' \
Expand Down
54 changes: 32 additions & 22 deletions ui/popup.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,31 +135,33 @@ const SLPopup = {

parseInputs(inputs) {
// Construct a recur object { type: "...", multiplier: "...", ... }
const recur = { type: inputs.radio.recur };
const recurType = inputs.radio.recur;

const sendAtDate = inputs["send-date"];
const sendAtTime = inputs["send-time"];
let sendAt = null;
let sendAt, schedule;

if ((/\d\d\d\d.\d\d.\d\d/).test(sendAtDate) &&
(/\d\d.\d\d/).test(sendAtTime)) {
sendAt = SLStatic.parseDateTime(sendAtDate, sendAtTime);
}

if (recur.type === "function") {
if (recurType === "function") {
try {
const funcName = inputs["recurFuncSelect"];
let argStr = inputs["recur-function-args"];
const schedule = SLPopup.evaluateUfunc(funcName, sendAt, argStr);
if (schedule.recur.type !== "none") {
schedule.recur.cancelOnReply = inputs[`recur-cancelonreply`];
}
schedule = SLPopup.evaluateUfunc(funcName, sendAt, argStr);
if (schedule.sendAt.getTime() < (new Date()).getTime()-60000) {
return { err: browser.i18n.getMessage("errorDateInPast") };
}
return schedule;
} catch (ex) {
return { err: ex.message };
}
} else {
schedule = {
sendAt,
recur: { type: recurType }
};
}

if (!sendAt) {
Expand All @@ -170,15 +172,15 @@ const SLPopup = {
return { err: browser.i18n.getMessage("errorDateInPast") };
}

if (recur.type !== "none") {
recur.cancelOnReply = inputs[`recur-cancelonreply`];
if (schedule.recur.type !== "none") {
schedule.recur.cancelOnReply = inputs[`recur-cancelonreply`];

if (recur.type !== "function") {
recur.multiplier = inputs[`recur-multiplier`];
if (schedule.recur.type !== "function") {
schedule.recur.multiplier = inputs[`recur-multiplier`];
}
}
recur.type = recur.type || "none";
switch (recur.type) {
schedule.recur.type = schedule.recur.type || "none";
switch (schedule.recur.type) {
case "none":
break;
case "minutely":
Expand All @@ -189,22 +191,22 @@ const SLPopup = {
break;
case "monthly":
if (inputs["recur-monthly-byweek"]) {
recur.monthly_day = {
schedule.recur.monthly_day = {
day: +inputs["recur-monthly-byweek-day"],
week: +inputs["recur-monthly-byweek-week"]
};
} else {
recur.monthly = sendAt.getDate();
schedule.recur.monthly = sendAt.getDate();
}
break;
case "yearly":
recur.yearly = {
schedule.recur.yearly = {
month: sendAt.getMonth(),
date: sendAt.getDate()
};
break;
default:
SLStatic.error(`unrecognized recurrence type <${recur.type}>`);
SLStatic.error(`unrecognized recurrence type <${schedule.recur.type}>`);
break;
}

Expand All @@ -220,26 +222,34 @@ const SLPopup = {
return { err: (browser.i18n.getMessage("endTimeWarningTitle") + ": " +
browser.i18n.getMessage("endTimeWarningBody")) };
} else {
recur.between = between;
schedule.recur.between = between;
}
}
}

if (inputs["sendon"]) {
const dayLimit = inputs.groups["weekdayChecks"].vals;
recur.days = [...Array(7)].reduce((obj,item,idx) => {
schedule.recur.days = [...Array(7)].reduce((obj,item,idx) => {
if (dayLimit[idx]) {
obj.push(idx);
}
return obj;
}, []);
if (recur.days.length === 0) {
if (schedule.recur.days.length === 0) {
return { err: (browser.i18n.getMessage("missingDaysWarningTitle") + ": " +
browser.i18n.getMessage("missingDaysWarningBody")) };
}
}

const schedule = { sendAt, recur };
// console.log(schedule.recur.between);
// const starttime = (schedule.recur.between && schedule.recur.between.start)
// const endtime =(schedule.recur.between && schedule.recur.between.end);
// console.log(starttime, endtime);
schedule.sendAt = SLStatic.adjustDateForRestrictions(schedule.sendAt,
(schedule.recur.between && schedule.recur.between.start),
(schedule.recur.between && schedule.recur.between.end),
schedule.recur.days);

return schedule;
},

Expand Down
22 changes: 20 additions & 2 deletions utils/static.js
Original file line number Diff line number Diff line change
Expand Up @@ -817,9 +817,27 @@ var SLStatic = {
// than the scheduled day, or if there is none, then the smallest day in
// the restriction overall.
adjustDateForRestrictions(sendAt, start_time, end_time, days) {
convertTime = (t) => {
if (!t) {
return null;
} else if (typeof t === "string") {
return SLStatic.parseDateTime(null, t) || new Date(t);
} else if (typeof t === "number") {
if (t < 2401) {
return SLStatic.parseDateTime(null, `${t}`);
} else {
return new Date(t);
}
} else if (t.getTime) {
return new Date(t.getTime());
} else {
throw new Error(`Send Later error: unable to parse time format ${t}`);
}
}

let dt = new Date(sendAt.getTime());
start_time = start_time && SLStatic.parseDateTime(null,start_time);
end_time = end_time && SLStatic.parseDateTime(null,end_time);
start_time = convertTime(start_time);
end_time = convertTime(end_time);

if (start_time && SLStatic.compareTimes(dt, '<', start_time)) {
// If there is a time restriction and the scheduled time is before it,
Expand Down

0 comments on commit d072254

Please sign in to comment.