79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import { DateHelper } from "../../../../browser/date/DateHelper";
|
|
import { DateMath } from "../../../../browser/date/DateMath";
|
|
import { ISOTimeStamp } from "../../../../browser/date/ISOTimeStamp";
|
|
import { PathReference } from "../../../files/PathReference";
|
|
import { iTaskScheduler } from "../../scheduler/iTaskScheduler";
|
|
import { Task } from "../../scheduler/Task";
|
|
import { UserData } from "../../UserData";
|
|
import { UserManagementServer } from "../../UserManagementServer";
|
|
import { UserApp } from "../UserApp";
|
|
import { MailEntry } from "./data/MailEntry";
|
|
import { ReminderData } from "./data/ReminderData";
|
|
|
|
export class ReminderApp extends UserApp<ReminderData> implements iTaskScheduler
|
|
{
|
|
static readonly id = "reminder";
|
|
|
|
constructor( ums:UserManagementServer )
|
|
{
|
|
super( ReminderApp.id, ums );
|
|
this.onFileChange.addListener(
|
|
async ( filePath )=>
|
|
{
|
|
let pathReference = new PathReference( filePath );
|
|
let id = pathReference.fileNameWithoutExtension;
|
|
let user = await this.ums.userDB.byID( id );
|
|
|
|
if ( ! user )
|
|
{
|
|
console.log( "file changed:", filePath, "but no user associated" );
|
|
return;
|
|
}
|
|
|
|
let data = await pathReference.loadJSON<ReminderData>();
|
|
|
|
let tasks:Task[] =[];
|
|
this.grabTasks( user, data, this.ums.scheduler.maxDate, tasks );
|
|
this.ums.scheduler.scheduleTasks( tasks );
|
|
|
|
}
|
|
)
|
|
}
|
|
|
|
async getTasksToSchedule( maxDate:Date ):Promise<Task[]>
|
|
{
|
|
let tasks = [];
|
|
|
|
await this.iterateUserData(
|
|
( userData:UserData, reminderData:ReminderData )=>
|
|
{
|
|
this.grabTasks( userData, reminderData, maxDate, tasks );
|
|
return Promise.resolve();
|
|
}
|
|
);
|
|
|
|
return Promise.resolve( tasks );
|
|
}
|
|
|
|
grabTasks( userData:UserData, rd:ReminderData, maxDate:Date, tasks:Task[] )
|
|
{
|
|
rd.mailEntries.forEach(
|
|
( me )=>
|
|
{
|
|
let date = DateHelper.parseDateExpression( me.date );
|
|
|
|
if ( DateMath.isBefore( date, maxDate ) )
|
|
{
|
|
let task = Task.createAt( date,
|
|
()=>
|
|
{
|
|
this.ums.sendEmail( userData.email, me.subject, me.message );
|
|
}
|
|
);
|
|
|
|
tasks.push( task )
|
|
}
|
|
}
|
|
);
|
|
}
|
|
} |