about summary refs log tree commit diff
path: root/emacs/.emacs.d/wpc/pushover.el
blob: fb06656cf4671b291d4e187b19caa33a4f2063c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
;;; pushover.el --- Send generic messages to mobile device -*- lexical-binding: t -*-
;; Author: William Carroll <wpcarro@gmail.com>

;;; Commentary:
;; Pushover.net is a mobile app that accepts JSON.  This supports loose
;; integration between things and mobile devices.

;;; Code:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Dependencies
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(require 'request)
(require 'password-store)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Library
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defconst pushover/app-token
  (password-store-get-field "api-keys/pushover.net" "emacs")
  "App token for \"emacs\" application.")

(defconst pushover/user-key
  (password-store-get "api-keys/pushover.net")
  "Key that identifies me to pushover.")

(defconst pushover/url
  "https://api.pushover.net/1/messages.json"
  "URL to POST messages.")

;; TODO: Rename module "pushover".

(defun pushover/notify (message)
  "Posts MESSAGE to all devices.
Here are the parameters that Pushover accepts:

Required parameters:
  - token - your application's API token
  - user - the user/group key (not e-mail address) of your user (or you),
    viewable when logged into our dashboard (often referred to as USER_KEY in
    our documentation and code examples)
  - message - your message

Additional parameters (optional):
  - attachment - an image attachment to send with the message; see attachments
    for more information on how to upload files
    device - your user's device name to send the message directly to that
    device, rather than all of the user's devices (multiple devices may be
    separated by a comma)
  - title - your message's title, otherwise your app's name is used
  - url - a supplementary URL to show with your message
  - url_title - a title for your supplementary URL, otherwise just the URL is
    shown
  - priority - send as -2 to generate no notification/alert, -1 to always send
    as a quiet notification, 1 to display as high-priority and bypass the user's
    quiet hours, or 2 to also require confirmation from the user
  - sound - the name of one of the sounds supported by device clients to
    override the user's default sound choice
  - timestamp - a Unix timestamp"
  (request
   pushover/url
   :type "POST"
   :params `(("token"   . ,pushover/app-token)
             ("user"    . ,pushover/user-key)
             ("message" . ,message))
   :data nil
   :parser 'json-read
   :success (cl-function
             (lambda (&key data &allow-other-keys)
               (message "Pushover.net notification sent!")))))

(provide 'pushover)
;;; pushover.el ends here