Remove unneeded re-definition of EAPI
[framework/uifw/edbus.git] / src / bin / notify-send.c
1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #include <stdio.h>
6 #include <string.h>
7 #include <limits.h>
8 #include <errno.h>
9 #include <getopt.h>
10
11 #include <Ecore.h>
12 #include <E_Notify.h>
13
14 void
15 version(void)
16 {
17   printf("e-notify-send "VERSION"\n");
18 }
19
20 void
21 usage(void)
22 {
23   printf("Usage:\n"
24          "  e-notify-send [OPTION...] <SUMMARY> [BODY] - create a notification\n"
25          "\n"
26          "Help Options:\n"
27          "  -?, --help                        Show help options\n"
28          "\n"
29          "Application Options:\n"
30          "  -n, --name=NAME                   Specifies the application name to use (default is e-notify-send).\n"
31          "  -u, --urgency=LEVEL               Specifies the urgency level (low, normal, critical).\n"
32          "  -t, --expire-time=TIME            Specifies the timeout in milliseconds at which to expire the notification.\n"
33          "  -r, --replace=ID                  Specifies the ID of notification to replace.\n"
34          "  -p, --print-id                    Prints the ID of notification to STDOUT.\n"
35          "  -i, --icon=ICON                   Specifies an icon filename or stock icon to display.\n"
36          "  -c, --category=TYPE               Specifies the notification category.\n"
37          "  -v, --version                     Version of the package.\n"
38          "\n");
39 }
40
41 int
42 read_int_arg(long long *result, const char *name, intmax_t min, intmax_t max)
43 {
44   char *endptr;
45
46   errno = 0;  
47   *result = strtoll(optarg, &endptr, 10);
48   if ((errno != 0 && *result == 0) || endptr == optarg) 
49     {
50        fprintf(stderr, "Cannot parse integer value '%s' for %s\n", optarg, name);
51        return 0;
52     }
53   else if (*result > max || *result < min)
54     {
55        fprintf(stderr, "Integer value '%s' for %s out of range\n", optarg, name);
56        return 0;
57     }
58
59   return 1;
60 }
61
62 void 
63 send_cb(void *user_data __UNUSED__, void *method_return, DBusError *error __UNUSED__)
64 {
65    E_Notification_Return_Notify *r = method_return;
66
67    if(!r)
68      return;
69
70    printf("%u\n", r->notification_id );
71
72    ecore_main_loop_quit();
73 }
74
75 int
76 main(int argc, char **argv)
77 {
78   int ch;
79   long long value;
80   int print_id = 0;
81   E_Notification *n;
82
83   e_notification_init();
84   n = e_notification_new();
85   e_notification_app_name_set(n, "e-notify-send");
86   e_notification_timeout_set(n, -1);
87
88   /* options descriptor */
89   static struct option longopts[] = {
90       { "help",        no_argument,            NULL,           '?' },
91       { "name",        required_argument,      NULL,           'n' },
92       { "urgency",     required_argument,      NULL,           'u' },
93       { "expire-time", required_argument,      NULL,           't' },
94       { "replace",     required_argument,      NULL,           'r' },
95       { "print-id",    no_argument,            NULL,           'p' },
96       { "icon",        required_argument,      NULL,           'i' },
97       { "category",    required_argument,      NULL,           'c' },
98       { "version",     no_argument,            NULL,           'v' },
99       { NULL,          0,                      NULL,             0 }
100   };
101
102   while ((ch = getopt_long(argc, argv, "p?vn:u:t:r:i:c:", longopts, NULL)) != -1)
103     switch (ch) {
104     case '?':
105       usage();
106       return EXIT_SUCCESS;
107       break;
108     case 'v':
109       version();
110       return EXIT_SUCCESS;
111       break;
112     case 'n':
113       e_notification_app_name_set(n, optarg);
114       break;
115     case 'u':
116       if (!strcasecmp(optarg, "low"))
117         e_notification_hint_urgency_set(n, E_NOTIFICATION_URGENCY_LOW);
118       else if (!strcasecmp(optarg, "normal"))
119         e_notification_hint_urgency_set(n, E_NOTIFICATION_URGENCY_NORMAL);
120       else if (!strcasecmp(optarg, "critical"))
121         e_notification_hint_urgency_set(n, E_NOTIFICATION_URGENCY_CRITICAL);
122       else
123         printf("Urgency level must be: low, normal or critical\n");
124       break;
125     case 't':
126       if (!read_int_arg(&value, "-t", INT_MIN, INT_MAX))
127         return EXIT_FAILURE;
128       else 
129         e_notification_timeout_set(n, (int)value);
130       break;
131     case 'r':
132       if (!read_int_arg(&value, "-r", 0, UINT_MAX))
133         return EXIT_FAILURE;
134       else
135            e_notification_replaces_id_set(n, (unsigned int)value);
136       break;
137     case 'i':
138       e_notification_app_icon_set(n, optarg);
139       break;
140     case 'c':
141       e_notification_hint_category_set(n, optarg);
142       break;
143     case 'p':
144       print_id = 1;
145       break;
146     default:
147       usage();
148       return EXIT_FAILURE;
149     }
150   argc -= optind;
151   argv += optind;
152
153   if (argc < 1)
154     {
155       usage();
156       return EXIT_FAILURE;
157     }
158
159   e_notification_summary_set(n, argv[0]);
160   if (argc > 1) e_notification_body_set(n, argv[1]);
161
162
163   if (print_id)
164     {
165        e_notification_send(n, send_cb, NULL);
166        ecore_main_loop_begin();
167     }
168   else
169     e_notification_send(n, NULL, NULL);
170
171   e_notification_unref(n);
172   e_notification_shutdown();
173
174   return EXIT_SUCCESS;
175 }