aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-sms.c63
1 files changed, 61 insertions, 2 deletions
diff --git a/src/mm-sms.c b/src/mm-sms.c
index a2d65daf..37025476 100644
--- a/src/mm-sms.c
+++ b/src/mm-sms.c
@@ -1228,6 +1228,9 @@ mm_sms_new_from_properties (MMBaseModem *modem,
GError **error)
{
MMSmsPart *part;
+ gchar **split_text;
+ guint n_parts;
+ MMSmsEncoding encoding;
/* Don't create SMS from properties if either text or number is missing */
if (!mm_sms_properties_get_number (properties) ||
@@ -1241,9 +1244,65 @@ mm_sms_new_from_properties (MMBaseModem *modem,
"number" : "text' or 'data"));
}
+ split_text = mm_sms_part_util_split_text (mm_sms_properties_get_text (properties),
+ &encoding);
+ n_parts = (split_text ? g_strv_length (split_text) : 0);
+
+ if (n_parts > 1) {
+ MMSms *sms = NULL;
+ guint i = 0;
+ /* wtf... is this really the way to go? */
+ guint reference = g_random_int_range (1,255);
+
+ /* Loop text chunks */
+ while (split_text[i]) {
+ mm_dbg (" Processing chunk '%u' of text with '%u' bytes",
+ i, (guint)strlen (split_text[i]));
+
+ /* Create new part */
+ part = mm_sms_part_new (SMS_PART_INVALID_INDEX);
+ mm_sms_part_set_text (part, split_text[i]);
+ mm_sms_part_set_encoding (part, encoding);
+ mm_sms_part_set_number (part, mm_sms_properties_get_number (properties));
+ mm_sms_part_set_smsc (part, mm_sms_properties_get_smsc (properties));
+ mm_sms_part_set_validity (part, mm_sms_properties_get_validity (properties));
+ mm_sms_part_set_class (part, mm_sms_properties_get_class (properties));
+ mm_sms_part_set_concat_reference (part, reference);
+ mm_sms_part_set_concat_sequence (part, i + 1);
+ mm_sms_part_set_concat_max (part, n_parts);
+
+ if (!sms) {
+ mm_dbg ("Building user-created multipart SMS...");
+ sms = mm_sms_multipart_new (
+ modem,
+ MM_SMS_STATE_UNKNOWN,
+ MM_SMS_STORAGE_UNKNOWN, /* not stored anywhere yet */
+ reference,
+ g_strv_length (split_text),
+ part,
+ error);
+ if (!sms)
+ break;
+ } else if (!mm_sms_multipart_take_part (sms, part, error)) {
+ g_clear_object (&sms);
+ break;
+ }
+
+ mm_dbg (" Added part '%u' to multipart SMS...", i + 1);
+ i++;
+ }
+
+ return sms;
+ }
+
+ /* Single part it will be */
part = mm_sms_part_new (SMS_PART_INVALID_INDEX);
- mm_sms_part_set_text (part, mm_sms_properties_get_text (properties));
- mm_sms_part_take_data (part, mm_sms_properties_get_data_bytearray (properties));
+ if (n_parts == 1) {
+ mm_sms_part_set_text (part, mm_sms_properties_get_text (properties));
+ mm_sms_part_set_encoding (part, encoding);
+ } else {
+ mm_sms_part_take_data (part, mm_sms_properties_get_data_bytearray (properties));
+ }
mm_sms_part_set_number (part, mm_sms_properties_get_number (properties));
mm_sms_part_set_smsc (part, mm_sms_properties_get_smsc (properties));
mm_sms_part_set_validity (part, mm_sms_properties_get_validity (properties));