[evolution-ews] I#153 - Limit Subject/Summary/Location text length
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-ews] I#153 - Limit Subject/Summary/Location text length
- Date: Fri, 16 Sep 2022 07:23:08 +0000 (UTC)
commit 3c3193ad813c6b2d6cef291992330e96d9efeab0
Author: Milan Crha <mcrha redhat com>
Date: Fri Sep 16 09:22:11 2022 +0200
I#153 - Limit Subject/Summary/Location text length
Closes https://gitlab.gnome.org/GNOME/evolution-ews/-/issues/153
src/EWS/evolution/CMakeLists.txt | 2 +
src/EWS/evolution/e-ews-comp-editor-extension.c | 50 +++++++++
src/EWS/evolution/e-ews-composer-extension.c | 130 ++++++++++++++++++++++++
src/EWS/evolution/e-ews-composer-extension.h | 18 ++++
src/EWS/evolution/module-ews-configuration.c | 2 +
5 files changed, 202 insertions(+)
---
diff --git a/src/EWS/evolution/CMakeLists.txt b/src/EWS/evolution/CMakeLists.txt
index 8c11d2cf..f2906e03 100644
--- a/src/EWS/evolution/CMakeLists.txt
+++ b/src/EWS/evolution/CMakeLists.txt
@@ -37,6 +37,8 @@ set(sources
e-mail-part-ews-sharing-metadata.h
e-ews-comp-editor-extension.c
e-ews-comp-editor-extension.h
+ e-ews-composer-extension.c
+ e-ews-composer-extension.h
e-ews-config-lookup.c
e-ews-config-lookup.h
e-ews-config-ui-extension.c
diff --git a/src/EWS/evolution/e-ews-comp-editor-extension.c b/src/EWS/evolution/e-ews-comp-editor-extension.c
index ff7a900c..ea989dce 100644
--- a/src/EWS/evolution/e-ews-comp-editor-extension.c
+++ b/src/EWS/evolution/e-ews-comp-editor-extension.c
@@ -29,6 +29,53 @@ typedef struct _EEwsCompEditorExtensionClass {
G_DEFINE_DYNAMIC_TYPE (EEwsCompEditorExtension, e_ews_comp_editor_extension, E_TYPE_EXTENSION)
+static void
+e_ews_comp_editor_extension_target_client_changed_cb (ECompEditor *comp_editor)
+{
+ ECalClient *target_client;
+ ECompEditorPropertyPart *part;
+ gboolean can_use;
+
+ target_client = e_comp_editor_get_target_client (comp_editor);
+
+ can_use = target_client != NULL;
+
+ if (can_use) {
+ ESource *source;
+
+ source = e_client_get_source (E_CLIENT (target_client));
+
+ #define check_is_ews_backend(ext) (e_source_has_extension (source, ext) && \
+ g_strcmp0 (e_source_backend_get_backend_name (e_source_get_extension (source, ext)),
"ews") == 0)
+
+ can_use = source && (
+ check_is_ews_backend (E_SOURCE_EXTENSION_CALENDAR) ||
+ check_is_ews_backend (E_SOURCE_EXTENSION_MEMO_LIST) ||
+ check_is_ews_backend (E_SOURCE_EXTENSION_TASK_LIST));
+
+ #undef check_is_ews_backend
+ }
+
+ /* These two have limited length on the EWS server */
+ part = e_comp_editor_get_property_part (comp_editor, I_CAL_SUMMARY_PROPERTY);
+ if (part) {
+ GtkWidget *edit_widget;
+
+ edit_widget = e_comp_editor_property_part_get_edit_widget (part);
+ if (GTK_IS_ENTRY (edit_widget))
+ gtk_entry_set_max_length (GTK_ENTRY (edit_widget), can_use ? 255 : 0);
+ }
+
+ part = e_comp_editor_get_property_part (comp_editor, I_CAL_LOCATION_PROPERTY);
+ if (part) {
+ GtkWidget *edit_widget;
+
+ edit_widget = e_comp_editor_property_part_get_edit_widget (part);
+ if (GTK_IS_ENTRY (edit_widget))
+ gtk_entry_set_max_length (GTK_ENTRY (edit_widget), can_use ? 255 : 0);
+ }
+}
+
static void
e_ews_comp_editor_extension_update_actions (ECompEditor *comp_editor)
{
@@ -241,6 +288,9 @@ e_ews_comp_editor_extension_constructed (GObject *object)
g_signal_connect (comp_editor, "fill-component",
G_CALLBACK (e_ews_comp_editor_extension_fill_component_cb), NULL);
}
+
+ g_signal_connect (extensible, "notify::target-client",
+ G_CALLBACK (e_ews_comp_editor_extension_target_client_changed_cb), NULL);
}
static void
diff --git a/src/EWS/evolution/e-ews-composer-extension.c b/src/EWS/evolution/e-ews-composer-extension.c
new file mode 100644
index 00000000..674955c2
--- /dev/null
+++ b/src/EWS/evolution/e-ews-composer-extension.c
@@ -0,0 +1,130 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * SPDX-FileCopyrightText: (C) 2022 Red Hat (www.redhat.com)
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#include "evolution-ews-config.h"
+
+#include <glib-object.h>
+
+#include <composer/e-msg-composer.h>
+#include <composer/e-composer-from-header.h>
+
+#include "e-ews-composer-extension.h"
+
+#define E_TYPE_EWS_COMPOSER_EXTENSION (e_ews_composer_extension_get_type ())
+
+GType e_ews_composer_extension_get_type (void);
+
+typedef struct _EEwsComposerExtension {
+ EExtension parent;
+} EEwsComposerExtension;
+
+typedef struct _EEwsComposerExtensionClass {
+ EExtensionClass parent_class;
+} EEwsComposerExtensionClass;
+
+G_DEFINE_DYNAMIC_TYPE (EEwsComposerExtension, e_ews_composer_extension, E_TYPE_EXTENSION)
+
+static gboolean
+e_ews_composer_extension_is_ews_transport (ESourceRegistry *registry,
+ const gchar *uid)
+{
+ ESource *source;
+ gboolean is_ews_transport = FALSE;
+
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
+ g_return_val_if_fail (uid != NULL, FALSE);
+
+ source = e_source_registry_ref_source (registry, uid);
+ if (source && e_source_has_extension (source, E_SOURCE_EXTENSION_MAIL_SUBMISSION)) {
+ ESourceMailSubmission *mail_submission;
+ const gchar *transport_uid;
+
+ mail_submission = e_source_get_extension (source, E_SOURCE_EXTENSION_MAIL_SUBMISSION);
+ transport_uid = e_source_mail_submission_get_transport_uid (mail_submission);
+
+ if (transport_uid && *transport_uid) {
+ ESource *transport_source;
+
+ transport_source = e_source_registry_ref_source (registry, transport_uid);
+ if (transport_source && e_source_has_extension (transport_source,
E_SOURCE_EXTENSION_MAIL_TRANSPORT)) {
+ ESourceBackend *mail_transport;
+
+ mail_transport = e_source_get_extension (transport_source,
E_SOURCE_EXTENSION_MAIL_TRANSPORT);
+ is_ews_transport = g_strcmp0 ("ews", e_source_backend_get_backend_name
(mail_transport)) == 0;
+ }
+
+ g_clear_object (&transport_source);
+ }
+ }
+
+ g_clear_object (&source);
+
+ return is_ews_transport;
+}
+
+static void
+e_ews_composer_extension_from_changed_cb (EComposerHeader *from_header,
+ EComposerHeaderTable *header_table)
+{
+ EComposerHeader *subject_header;
+ gchar *uid;
+ gboolean is_ews_transport;
+
+ uid = e_composer_from_header_dup_active_id (E_COMPOSER_FROM_HEADER (from_header), NULL, NULL);
+ is_ews_transport = e_ews_composer_extension_is_ews_transport (e_composer_header_get_registry
(from_header), uid);
+ g_free (uid);
+
+ subject_header = e_composer_header_table_get_header (header_table, E_COMPOSER_HEADER_SUBJECT);
+ if (subject_header && GTK_IS_ENTRY (subject_header->input_widget))
+ gtk_entry_set_max_length (GTK_ENTRY (subject_header->input_widget), is_ews_transport ? 255 :
0);
+}
+
+static void
+e_ews_composer_extension_constructed (GObject *object)
+{
+ EExtensible *extensible;
+ EComposerHeaderTable *header_table;
+ EComposerHeader *header;
+
+ /* Chain up to parent's method */
+ G_OBJECT_CLASS (e_ews_composer_extension_parent_class)->constructed (object);
+
+ extensible = e_extension_get_extensible (E_EXTENSION (object));
+ header_table = e_msg_composer_get_header_table (E_MSG_COMPOSER (extensible));
+ header = e_composer_header_table_get_header (header_table, E_COMPOSER_HEADER_FROM);
+
+ g_signal_connect_object (header, "changed",
+ G_CALLBACK (e_ews_composer_extension_from_changed_cb), header_table, 0);
+}
+
+static void
+e_ews_composer_extension_class_init (EEwsComposerExtensionClass *klass)
+{
+ GObjectClass *object_class;
+ EExtensionClass *extension_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->constructed = e_ews_composer_extension_constructed;
+
+ extension_class = E_EXTENSION_CLASS (klass);
+ extension_class->extensible_type = E_TYPE_MSG_COMPOSER;
+}
+
+static void
+e_ews_composer_extension_class_finalize (EEwsComposerExtensionClass *klass)
+{
+}
+
+static void
+e_ews_composer_extension_init (EEwsComposerExtension *extension)
+{
+}
+
+void
+e_ews_composer_extension_type_register (GTypeModule *type_module)
+{
+ e_ews_composer_extension_register_type (type_module);
+}
diff --git a/src/EWS/evolution/e-ews-composer-extension.h b/src/EWS/evolution/e-ews-composer-extension.h
new file mode 100644
index 00000000..e4c155f5
--- /dev/null
+++ b/src/EWS/evolution/e-ews-composer-extension.h
@@ -0,0 +1,18 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * SPDX-FileCopyrightText: (C) 2022 Red Hat (www.redhat.com)
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ */
+
+#ifndef E_EWS_COMPOSER_EXTENSION_H
+#define E_EWS_COMPOSER_EXTENSION_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+void e_ews_composer_extension_type_register (GTypeModule *type_module);
+
+G_END_DECLS
+
+#endif /* E_EWS_COMPOSER_EXTENSION_H */
diff --git a/src/EWS/evolution/module-ews-configuration.c b/src/EWS/evolution/module-ews-configuration.c
index 7ce0e8fe..61ae3707 100644
--- a/src/EWS/evolution/module-ews-configuration.c
+++ b/src/EWS/evolution/module-ews-configuration.c
@@ -28,6 +28,7 @@
#include "e-ews-photo-source.h"
#include "e-ews-comp-editor-extension.h"
+#include "e-ews-composer-extension.h"
#include "e-ews-config-ui-extension.h"
#include "common/camel-sasl-xoauth2-office365.h"
#include "common/e-oauth2-service-office365.h"
@@ -59,6 +60,7 @@ e_module_load (GTypeModule *type_module)
e_mail_parser_ews_sharing_metadata_type_register (type_module);
e_mail_part_ews_sharing_metadata_type_register (type_module);
e_ews_comp_editor_extension_type_register (type_module);
+ e_ews_composer_extension_type_register (type_module);
e_ews_config_lookup_type_register (type_module);
e_ews_config_ui_extension_type_register (type_module);
e_ews_ooo_notificator_type_register (type_module);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]