File: cbcli.c

package info (click to toggle)
cellbroadcastd 0.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 748 kB
  • sloc: ansic: 4,529; xml: 132; python: 22; makefile: 16; sh: 10
file content (88 lines) | stat: -rw-r--r-- 2,555 bytes parent folder | download
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
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
 * Copyright (C) 2025 The Phosh.mobi e.V.
 *
 * SPDX-License-Identifier: GPL-3.0+
 *
 * Author: Evangelos Ribeiro Tzaras <devrtz@fortysixandtwo.eu>
 */

#define LIBCELLBROADCAST_USE_UNSTABLE_API
#include "libcellbroadcast.h"

#include <locale.h>
#include <glib.h>

int
main (int argc, char *argv[0])
{
  g_autoptr (GListModel) messages = NULL;
  g_autoptr (GOptionContext) opt_context = NULL;
  g_autoptr (GError) err = NULL;
  gboolean success = TRUE;
  gboolean do_list = FALSE;
  const GOptionEntry options [] = {
    {"list-messages", 'm', 0, G_OPTION_ARG_NONE, &do_list,
     "Lists all stored cell broadcast messages", NULL},
    { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL }
  };

  setlocale (LC_ALL, "");
  opt_context = g_option_context_new ("- A cli for cellbroadcastd");
  g_option_context_add_main_entries (opt_context, options, NULL);
  if (!g_option_context_parse (opt_context, &argc, &argv, &err)) {
    g_warning ("%s", err->message);
    return 1;
  }

  if (!lcb_init (&err)) {
    g_print ("Failed to init libcellbroadcast: %s\n", err->message);
    return 1;
  }

  if (!do_list)
    do_list = TRUE; /* we currently don't have any other options */

  if (do_list) {
    guint n_messages;

    messages = lcb_cbd_get_messages_sync (&err);
    success = !!messages;
    if (!messages) {
      g_printerr ("Failed to retrieve cell broadcast messages: %s\n", err->message);
      goto exit;
    }

    n_messages = g_list_model_get_n_items (messages);
    for (guint i = 0; i < n_messages; i++) {
      g_autoptr (LcbMessage) msg = g_list_model_get_item (messages, i);
      g_autofree char *severity = NULL;

      severity = g_flags_to_string (LCB_TYPE_SEVERITY_LEVEL,
                                    lcb_message_get_severity (msg));

      g_print ("Channel      : %" G_GUINT16_FORMAT "\n"
               "Message code : %" G_GUINT16_FORMAT "\n"
               "Update       : %" G_GUINT16_FORMAT "\n"
               "Timestamp    : %" G_GUINT64_FORMAT "\n"
               "Severity     : %s\n"
               "Text         : %s\n",
               lcb_message_get_channel (msg),
               lcb_message_get_msg_code (msg),
               lcb_message_get_update (msg),
               lcb_message_get_timestamp (msg),
               severity,
               lcb_message_get_text (msg));

      if (i < n_messages - 1)
        g_print ("\n");
    }

    if (g_list_model_get_n_items (messages) == 0)
      g_print ("No cell broadcast messages have yet been received\n");
  }

 exit:

  lcb_uninit ();
  return !success;
}