summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/mmcli-completion4
-rw-r--r--cli/mmcli-modem-messaging.c86
-rw-r--r--docs/man/mmcli.13
3 files changed, 77 insertions, 16 deletions
diff --git a/cli/mmcli-completion b/cli/mmcli-completion
index 333989492..81fcf812a 100644
--- a/cli/mmcli-completion
+++ b/cli/mmcli-completion
@@ -102,6 +102,10 @@ _mmcli()
_filedir
return 0
;;
+ '--messaging-create-sms-with-text')
+ _filedir
+ return 0
+ ;;
'--messaging-delete-sms')
COMPREPLY=( $(compgen -W "[PATH|INDEX]" -- $cur) )
return 0
diff --git a/cli/mmcli-modem-messaging.c b/cli/mmcli-modem-messaging.c
index 8912a2484..d63ab4807 100644
--- a/cli/mmcli-modem-messaging.c
+++ b/cli/mmcli-modem-messaging.c
@@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright (C) 2012 Google, Inc.
+ * Copyright (C) 2023 Tom Wimmenhove
*/
#include "config.h"
@@ -50,6 +51,7 @@ static gboolean status_flag;
static gboolean list_flag;
static gchar *create_str;
static gchar *create_with_data_str;
+static gchar *create_with_text_str;
static gchar *delete_str;
static GOptionEntry entries[] = {
@@ -69,6 +71,10 @@ static GOptionEntry entries[] = {
"Pass the given file as data contents when creating a new SMS",
"[File path]"
},
+ { "messaging-create-sms-with-text", 0, 0, G_OPTION_ARG_FILENAME, &create_with_text_str,
+ "Pass the given file as message contents when creating a new SMS",
+ "[File path]"
+ },
{ "messaging-delete-sms", 0, 0, G_OPTION_ARG_STRING, &delete_str,
"Delete a SMS from a given modem",
"[PATH|INDEX]"
@@ -116,6 +122,19 @@ mmcli_modem_messaging_options_enabled (void)
exit (EXIT_FAILURE);
}
+ if (create_with_text_str && !create_str) {
+ g_printerr ("error: `--messaging-create-with-text' must be given along "
+ "with `--messaging-create-sms'\n");
+ exit (EXIT_FAILURE);
+ }
+
+ if (create_with_data_str && create_with_text_str) {
+ g_printerr ("error: `--messaging-create-with-data' and "
+ "`--messaging-create-with-text' cannot be used at the "
+ "same time\n");
+ exit (EXIT_FAILURE);
+ }
+
if (status_flag)
mmcli_force_sync_operation ();
@@ -164,9 +183,35 @@ mmcli_modem_messaging_shutdown (void)
context_free ();
}
+static void
+get_file_contents (const gchar *filename,
+ gchar **contents,
+ gsize *contents_size)
+{
+ GError *error = NULL;
+ gchar *path;
+ GFile *file;
+
+ g_debug ("Reading data from file '%s'", filename);
+
+ file = g_file_new_for_commandline_arg (filename);
+ path = g_file_get_path (file);
+ if (!g_file_get_contents (path,
+ contents,
+ contents_size,
+ &error)) {
+ g_printerr ("error: cannot read from file '%s': '%s'\n",
+ filename, error->message);
+ exit (EXIT_FAILURE);
+ }
+ g_free (path);
+ g_object_unref (file);
+}
+
static MMSmsProperties *
build_sms_properties_from_input (const gchar *properties_string,
- const gchar *data_file)
+ const gchar *data_file,
+ const gchar *text_file)
{
GError *error = NULL;
MMSmsProperties *properties;
@@ -178,27 +223,34 @@ build_sms_properties_from_input (const gchar *properties_string,
}
if (data_file) {
- gchar *path;
- GFile *file;
gchar *contents;
gsize contents_size;
g_debug ("Reading data from file '%s'", data_file);
+ get_file_contents (data_file, &contents, &contents_size);
+ mm_sms_properties_set_data (properties, (guint8 *)contents, contents_size);
+ g_free (contents);
+ }
- file = g_file_new_for_commandline_arg (data_file);
- path = g_file_get_path (file);
- if (!g_file_get_contents (path,
- &contents,
- &contents_size,
- &error)) {
- g_printerr ("error: cannot read from file '%s': '%s'\n",
- data_file, error->message);
+ if (text_file) {
+ gchar *contents;
+ gsize contents_size;
+
+ if (mm_sms_properties_get_text(properties))
+ {
+ g_printerr ("error: cannot use `--messaging-create-with-text': text "
+ "has already been set using `--messaging-create-sms'\n");
exit (EXIT_FAILURE);
}
- g_free (path);
- g_object_unref (file);
- mm_sms_properties_set_data (properties, (guint8 *)contents, contents_size);
+ g_debug ("Reading message text from file '%s'", data_file);
+ get_file_contents (text_file, &contents, &contents_size);
+
+ if (!g_utf8_validate (contents, contents_size, NULL)) {
+ g_printerr ("error: file '%s' contains invalid UTF-8\n", text_file);
+ exit (EXIT_FAILURE);
+ }
+ mm_sms_properties_set_text (properties, contents);
g_free (contents);
}
@@ -380,7 +432,8 @@ get_modem_ready (GObject *source,
MMSmsProperties *properties;
properties = build_sms_properties_from_input (create_str,
- create_with_data_str);
+ create_with_data_str,
+ create_with_text_str);
g_debug ("Asynchronously creating new SMS in modem...");
mm_modem_messaging_create (ctx->modem_messaging,
properties,
@@ -463,7 +516,8 @@ mmcli_modem_messaging_run_synchronous (GDBusConnection *connection)
MMSmsProperties *properties;
properties = build_sms_properties_from_input (create_str,
- create_with_data_str);
+ create_with_data_str,
+ create_with_text_str);
g_debug ("Synchronously creating new SMS in modem...");
sms = mm_modem_messaging_create_sync (ctx->modem_messaging,
properties,
diff --git a/docs/man/mmcli.1 b/docs/man/mmcli.1
index e5728a119..39bed0dbd 100644
--- a/docs/man/mmcli.1
+++ b/docs/man/mmcli.1
@@ -536,6 +536,9 @@ be 'sm', 'me', 'mt', 'sr', 'bm', 'ta'.
.B \-\-messaging\-create\-sms\-with\-data=PATH
Use \fBPATH\fR to a filename as the data to create a new SMS.
.TP
+.B \-\-messaging\-create\-sms\-with\-text=PATH
+Use \fBPATH\fR to a filename as the message to create a new SMS.
+.TP
.B \-\-messaging\-delete\-sms=[PATH|INDEX]
Delete an SMS from a given modem.