Integrate Daily Notification Plugin #214

Open
anomalist wants to merge 21 commits from integrate-notification-plugin into master
4 changed files with 22 additions and 33 deletions
Showing only changes of commit 816c7a6582 - Show all commits

2
package-lock.json generated
View File

@@ -152,7 +152,7 @@
},
"../daily-notification-plugin": {
"name": "@timesafari/daily-notification-plugin",
"version": "1.0.1",
"version": "1.0.3",
"license": "MIT",
"workspaces": [
"packages/*"

View File

@@ -357,6 +357,10 @@ export default class DailyNotificationSection extends Vue {
this.loading = true;
const platformService = PlatformServiceFactory.getInstance();
logger.debug(
"[DailyNotificationSection] Checking notification support...",
);
// Check if notifications are supported on this platform
// This also verifies plugin availability (returns null if plugin unavailable)
const status = await platformService.getDailyNotificationStatus();
@@ -364,11 +368,16 @@ export default class DailyNotificationSection extends Vue {
// Notifications not supported or plugin unavailable - don't initialize
this.notificationsSupported = false;
logger.warn(
"[DailyNotificationSection] Notifications not supported or plugin unavailable",
"[DailyNotificationSection] Notifications not supported or plugin unavailable - section will be hidden",
);
return;
}
logger.debug(
"[DailyNotificationSection] Notifications supported, status:",
status,
);
this.notificationsSupported = true;
this.notificationStatus = status;

View File

@@ -13,6 +13,7 @@ import {
CapacitorSQLite,
DBSQLiteValues,
} from "@capacitor-community/sqlite";
import { DailyNotification } from "@timesafari/daily-notification-plugin";
import { runMigrations } from "@/db-sql/migration";
import { QueryExecResult } from "@/interfaces/database";
@@ -1421,9 +1422,8 @@ export class CapacitorPlatformService
*/
async getDailyNotificationStatus(): Promise<NotificationStatus | null> {
try {
// Dynamic import to avoid build issues if plugin unavailable
const { DailyNotification } = await import(
"@timesafari/daily-notification-plugin"
logger.debug(
"[CapacitorPlatformService] Getting daily notification status...",
);
const pluginStatus = await DailyNotification.getNotificationStatus();
@@ -1463,10 +1463,16 @@ export class CapacitorPlatformService
},
};
} catch (error) {
const errorMessage =
error instanceof Error ? error.message : String(error);
logger.error(
"[CapacitorPlatformService] Failed to get notification status:",
errorMessage,
error,
);
logger.warn(
"[CapacitorPlatformService] Daily notification section will be hidden - plugin may not be installed or available",
);
return null;
}
}
@@ -1477,10 +1483,6 @@ export class CapacitorPlatformService
*/
async checkNotificationPermissions(): Promise<PermissionStatus | null> {
try {
const { DailyNotification } = await import(
"@timesafari/daily-notification-plugin"
);
const permissions = await DailyNotification.checkPermissions();
// Log the raw permission state for debugging
@@ -1530,10 +1532,6 @@ export class CapacitorPlatformService
*/
async requestNotificationPermissions(): Promise<PermissionResult | null> {
try {
const { DailyNotification } = await import(
"@timesafari/daily-notification-plugin"
);
logger.info(
`[CapacitorPlatformService] Requesting notification permissions...`,
);
@@ -1571,10 +1569,6 @@ export class CapacitorPlatformService
*/
async scheduleDailyNotification(options: ScheduleOptions): Promise<void> {
try {
const { DailyNotification } = await import(
"@timesafari/daily-notification-plugin"
);
await DailyNotification.scheduleDailyNotification({
time: options.time,
title: options.title,
@@ -1601,10 +1595,6 @@ export class CapacitorPlatformService
*/
async cancelDailyNotification(): Promise<void> {
try {
const { DailyNotification } = await import(
"@timesafari/daily-notification-plugin"
);
await DailyNotification.cancelAllNotifications();
logger.info("[CapacitorPlatformService] Cancelled daily notification");
@@ -1670,10 +1660,6 @@ export class CapacitorPlatformService
config: NativeFetcherConfig,
): Promise<void | null> {
try {
const { DailyNotification } = await import(
"@timesafari/daily-notification-plugin"
);
// Step 1: Get activeDid from database (single source of truth)
// This ensures we're using the correct user identity for authentication
const activeIdentity = await this.getActiveIdentity();
@@ -1740,10 +1726,6 @@ export class CapacitorPlatformService
*/
async updateStarredPlans(plans: { planIds: string[] }): Promise<void | null> {
try {
const { DailyNotification } = await import(
"@timesafari/daily-notification-plugin"
);
await DailyNotification.updateStarredPlans({
planIds: plans.planIds,
});

View File

@@ -10,10 +10,8 @@ export default defineConfig(async () => {
...baseConfig.build,
rollupOptions: {
...baseConfig.build?.rollupOptions,
// Externalize Capacitor plugins that are bundled natively
external: [
"@timesafari/daily-notification-plugin"
],
// Note: @timesafari/daily-notification-plugin is NOT externalized
// because it needs to be bundled for dynamic imports to work in Capacitor WebView
output: {
...baseConfig.build?.rollupOptions?.output,
}