Ejemplo n.º 1
0
 public static async Task Notify(
     this NetDaemonApp app,
     string category,
     string message,
     NotificationCriteria textNotificationCriteria = NotificationCriteria.Always,
     NotificationCriteria ttsNotificationCriteria  = NotificationCriteria.None,
     params TextNotificationDevice[] devices)
 {
     await Notify(app, category, message, textNotificationCriteria, ttsNotificationCriteria, null, null, devices);
 }
Ejemplo n.º 2
0
 public static async Task Notify(
     this NetDaemonApp app,
     string category,
     string message,
     NotificationCriteria textNotificationCriteria,
     NotificationCriteria ttsNotificationCriteria,
     NotificationAction[]?notificationActions,
     string?imageUrl,
     params TextNotificationDevice[] devices)
 {
     await SendNotificationIfCriteriaMet(app, ttsNotificationCriteria, async() => await SendTTSNotifications(app, message));
     await SendNotificationIfCriteriaMet(app, textNotificationCriteria, async() => await SendTextNotifications(app, category, message, textNotificationCriteria, devices, notificationActions, imageUrl));
 }
Ejemplo n.º 3
0
    private static async Task SendNotificationIfCriteriaMet(NetDaemonApp app, NotificationCriteria notificationCriteria, Func <Task> notificationAction)
    {
        switch (notificationCriteria)
        {
        case NotificationCriteria.None:
        case NotificationCriteria.Home when !app.IsAnyoneHome():
        case NotificationCriteria.NotSleeping when app.IsAnyoneSleeping():
            await Task.CompletedTask;

            break;

        default:
            await notificationAction();

            break;
        }
    }
Ejemplo n.º 4
0
    private static async Task SendTextNotifications(NetDaemonApp app, string category, string message,
                                                    NotificationCriteria textNotificationCriteria, TextNotificationDevice[] devices, NotificationAction[]?notificationActions = null, string?imageUrl = null)
    {
        var effectiveDevices = devices.ToList();

        if (devices.Contains(TextNotificationDevice.All))
        {
            effectiveDevices = Enums.GetValues <TextNotificationDevice>().Where(d => d != TextNotificationDevice.All)
                               .ToList();
        }

        foreach (var device in effectiveDevices)
        {
            if (textNotificationCriteria == NotificationCriteria.Home)
            {
                var person = app.State.Single(e => e.EntityId == $"person.{device.AsString(EnumFormat.Name)}".ToLower());

                if (person.State == "not_home")
                {
                    continue;
                }
            }

            // todo: support iphone and lookup notification type
            await app.CallService("notify", device.AsString(EnumFormat.DisplayName, EnumFormat.Name) !, new
            {
                message = $"{DateTime.Now:t}:{message}",
                title   = category,
                data    = new
                {
                    ttl      = 0,
                    priority = "high",
                    actions  = notificationActions?.Select(n => new { action = n.EventId, title = n.Title }),
                    image    = imageUrl
                }
            });
        }
    }