2022-05-24 18:35:24 +02:00
|
|
|
import {IPostLoginAction, LoggedInEvent, LoginController} from "../api/main/LoginController.js"
|
|
|
|
|
import {CalendarModel} from "../calendar/model/CalendarModel.js"
|
|
|
|
|
import {CalendarEventTypeRef} from "../api/entities/tutanota/TypeRefs.js"
|
|
|
|
|
import {CUSTOM_MIN_ID} from "../api/common/utils/EntityUtils.js"
|
|
|
|
|
import {EntityClient} from "../api/common/EntityClient.js"
|
|
|
|
|
import {DesktopConfigKey} from "../desktop/config/ConfigKeys.js"
|
|
|
|
|
import {ProgressTracker} from "../api/main/ProgressTracker.js"
|
2022-06-15 16:46:44 +02:00
|
|
|
import {SettingsFacade} from "../native/common/generatedipc/SettingsFacade.js"
|
2022-05-24 18:35:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
export class CachePostLoginAction implements IPostLoginAction {
|
|
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
|
private readonly calendarModel: CalendarModel,
|
|
|
|
|
private readonly entityClient: EntityClient,
|
|
|
|
|
private readonly progressTracker: ProgressTracker,
|
|
|
|
|
private readonly logins: LoginController,
|
2022-06-15 16:46:44 +02:00
|
|
|
private readonly desktopSettingsFacade: SettingsFacade | null
|
2022-05-24 18:35:24 +02:00
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async onFullLoginSuccess(loggedInEvent: LoggedInEvent): Promise<void> {
|
2022-06-15 16:46:44 +02:00
|
|
|
if (await this.desktopSettingsFacade?.getBooleanConfigValue(DesktopConfigKey.offlineStorageEnabled)) {
|
2022-05-24 18:35:24 +02:00
|
|
|
// 3 work to load calendar info, 2 work to load short and long events
|
|
|
|
|
const workPerCalendar = 3 + 2
|
|
|
|
|
const totalWork = this.logins.getUserController().getCalendarMemberships().length * workPerCalendar
|
|
|
|
|
const monitorHandle = this.progressTracker.registerMonitor(totalWork)
|
|
|
|
|
const progressMonitor = this.progressTracker.getMonitor(monitorHandle)
|
|
|
|
|
const calendarInfos = await this.calendarModel.loadCalendarInfos(progressMonitor!)
|
|
|
|
|
const loadingPromises = []
|
|
|
|
|
for (const {groupRoot} of calendarInfos.values()) {
|
|
|
|
|
loadingPromises.push(this.entityClient.loadAll(CalendarEventTypeRef, groupRoot.longEvents, CUSTOM_MIN_ID).then(() => progressMonitor?.workDone(1)))
|
|
|
|
|
loadingPromises.push(this.entityClient.loadAll(CalendarEventTypeRef, groupRoot.shortEvents, CUSTOM_MIN_ID).then(() => progressMonitor?.workDone(1)))
|
|
|
|
|
}
|
|
|
|
|
await Promise.all(loadingPromises)
|
|
|
|
|
progressMonitor?.completed()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async onPartialLoginSuccess(loggedInEvent: LoggedInEvent): Promise<void> {
|
|
|
|
|
return Promise.resolve()
|
|
|
|
|
}
|
|
|
|
|
}
|