"Fossies" - the Fresh Open Source Software Archive

Member "evolution-mapi-3.46.1/src/libexchangemapi/camel-mapi-settings.c" (2 Dec 2022, 15703 Bytes) of package /linux/misc/evolution-mapi-3.46.1.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "camel-mapi-settings.c" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * camel-mapi-settings.c
    3  *
    4  * This program is free software; you can redistribute it and/or
    5  * modify it under the terms of the GNU Lesser General Public
    6  * License as published by the Free Software Foundation; either
    7  * version 2 of the License, or (at your option) version 3.
    8  *
    9  * This program is distributed in the hope that it will be useful,
   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12  * Lesser General Public License for more details.
   13  *
   14  * You should have received a copy of the GNU Lesser General Public
   15  * License along with the program; if not, see <http://www.gnu.org/licenses/>
   16  *
   17  */
   18 
   19 #include "camel-mapi-settings.h"
   20 
   21 struct _CamelMapiSettingsPrivate {
   22     GMutex property_lock;
   23 
   24     gboolean check_all;
   25     gboolean filter_junk;
   26     gboolean filter_junk_inbox;
   27     gboolean kerberos;
   28     gboolean listen_notifications;
   29 
   30     gchar *domain;
   31     gchar *profile;
   32     gchar *realm;
   33 };
   34 
   35 enum {
   36     PROP_0,
   37     PROP_AUTH_MECHANISM,
   38     PROP_CHECK_ALL,
   39     PROP_DOMAIN,
   40     PROP_FILTER_JUNK,
   41     PROP_FILTER_JUNK_INBOX,
   42     PROP_HOST,
   43     PROP_KERBEROS,
   44     PROP_PORT,
   45     PROP_PROFILE,
   46     PROP_REALM,
   47     PROP_SECURITY_METHOD,
   48     PROP_USER,
   49     PROP_LISTEN_NOTIFICATIONS
   50 };
   51 
   52 G_DEFINE_TYPE_WITH_CODE (
   53     CamelMapiSettings,
   54     camel_mapi_settings,
   55     CAMEL_TYPE_OFFLINE_SETTINGS,
   56     G_ADD_PRIVATE (CamelMapiSettings)
   57     G_IMPLEMENT_INTERFACE (
   58         CAMEL_TYPE_NETWORK_SETTINGS, NULL))
   59 
   60 static void
   61 mapi_settings_set_property (GObject *object,
   62                             guint property_id,
   63                             const GValue *value,
   64                             GParamSpec *pspec)
   65 {
   66     switch (property_id) {
   67         case PROP_AUTH_MECHANISM:
   68             camel_network_settings_set_auth_mechanism (
   69                 CAMEL_NETWORK_SETTINGS (object),
   70                 g_value_get_string (value));
   71             return;
   72 
   73         case PROP_CHECK_ALL:
   74             camel_mapi_settings_set_check_all (
   75                 CAMEL_MAPI_SETTINGS (object),
   76                 g_value_get_boolean (value));
   77             return;
   78 
   79         case PROP_DOMAIN:
   80             camel_mapi_settings_set_domain (
   81                 CAMEL_MAPI_SETTINGS (object),
   82                 g_value_get_string (value));
   83             return;
   84 
   85         case PROP_FILTER_JUNK:
   86             camel_mapi_settings_set_filter_junk (
   87                 CAMEL_MAPI_SETTINGS (object),
   88                 g_value_get_boolean (value));
   89             return;
   90 
   91         case PROP_FILTER_JUNK_INBOX:
   92             camel_mapi_settings_set_filter_junk_inbox (
   93                 CAMEL_MAPI_SETTINGS (object),
   94                 g_value_get_boolean (value));
   95             return;
   96 
   97         case PROP_HOST:
   98             camel_network_settings_set_host (
   99                 CAMEL_NETWORK_SETTINGS (object),
  100                 g_value_get_string (value));
  101             return;
  102 
  103         case PROP_KERBEROS:
  104             camel_mapi_settings_set_kerberos (
  105                 CAMEL_MAPI_SETTINGS (object),
  106                 g_value_get_boolean (value));
  107             return;
  108 
  109         case PROP_PORT:
  110             camel_network_settings_set_port (
  111                 CAMEL_NETWORK_SETTINGS (object),
  112                 g_value_get_uint (value));
  113             return;
  114 
  115         case PROP_PROFILE:
  116             camel_mapi_settings_set_profile (
  117                 CAMEL_MAPI_SETTINGS (object),
  118                 g_value_get_string (value));
  119             return;
  120 
  121         case PROP_REALM:
  122             camel_mapi_settings_set_realm (
  123                 CAMEL_MAPI_SETTINGS (object),
  124                 g_value_get_string (value));
  125             return;
  126 
  127         case PROP_SECURITY_METHOD:
  128             camel_network_settings_set_security_method (
  129                 CAMEL_NETWORK_SETTINGS (object),
  130                 g_value_get_enum (value));
  131             return;
  132 
  133         case PROP_USER:
  134             camel_network_settings_set_user (
  135                 CAMEL_NETWORK_SETTINGS (object),
  136                 g_value_get_string (value));
  137             return;
  138 
  139         case PROP_LISTEN_NOTIFICATIONS:
  140             camel_mapi_settings_set_listen_notifications (
  141                 CAMEL_MAPI_SETTINGS (object),
  142                 g_value_get_boolean (value));
  143             return;
  144 
  145     }
  146 
  147     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
  148 }
  149 
  150 static void
  151 mapi_settings_get_property (GObject *object,
  152                             guint property_id,
  153                             GValue *value,
  154                             GParamSpec *pspec)
  155 {
  156     switch (property_id) {
  157         case PROP_AUTH_MECHANISM:
  158             g_value_set_string (
  159                 value,
  160                 camel_network_settings_get_auth_mechanism (
  161                 CAMEL_NETWORK_SETTINGS (object)));
  162             return;
  163 
  164         case PROP_CHECK_ALL:
  165             g_value_set_boolean (
  166                 value,
  167                 camel_mapi_settings_get_check_all (
  168                 CAMEL_MAPI_SETTINGS (object)));
  169             return;
  170 
  171         case PROP_DOMAIN:
  172             g_value_set_string (
  173                 value,
  174                 camel_mapi_settings_get_domain (
  175                 CAMEL_MAPI_SETTINGS (object)));
  176             return;
  177 
  178         case PROP_FILTER_JUNK:
  179             g_value_set_boolean (
  180                 value,
  181                 camel_mapi_settings_get_filter_junk (
  182                 CAMEL_MAPI_SETTINGS (object)));
  183             return;
  184 
  185         case PROP_FILTER_JUNK_INBOX:
  186             g_value_set_boolean (
  187                 value,
  188                 camel_mapi_settings_get_filter_junk_inbox (
  189                 CAMEL_MAPI_SETTINGS (object)));
  190             return;
  191 
  192         case PROP_HOST:
  193             g_value_set_string (
  194                 value,
  195                 camel_network_settings_get_host (
  196                 CAMEL_NETWORK_SETTINGS (object)));
  197             return;
  198 
  199         case PROP_KERBEROS:
  200             g_value_set_boolean (
  201                 value,
  202                 camel_mapi_settings_get_kerberos (
  203                 CAMEL_MAPI_SETTINGS (object)));
  204             return;
  205 
  206         case PROP_PORT:
  207             g_value_set_uint (
  208                 value,
  209                 camel_network_settings_get_port (
  210                 CAMEL_NETWORK_SETTINGS (object)));
  211             return;
  212 
  213         case PROP_PROFILE:
  214             g_value_set_string (
  215                 value,
  216                 camel_mapi_settings_get_profile (
  217                 CAMEL_MAPI_SETTINGS (object)));
  218             return;
  219 
  220         case PROP_REALM:
  221             g_value_set_string (
  222                 value,
  223                 camel_mapi_settings_get_realm (
  224                 CAMEL_MAPI_SETTINGS (object)));
  225             return;
  226 
  227         case PROP_SECURITY_METHOD:
  228             g_value_set_enum (
  229                 value,
  230                 camel_network_settings_get_security_method (
  231                 CAMEL_NETWORK_SETTINGS (object)));
  232             return;
  233 
  234         case PROP_USER:
  235             g_value_set_string (
  236                 value,
  237                 camel_network_settings_get_user (
  238                 CAMEL_NETWORK_SETTINGS (object)));
  239             return;
  240 
  241         case PROP_LISTEN_NOTIFICATIONS:
  242             g_value_set_boolean (
  243                 value,
  244                 camel_mapi_settings_get_listen_notifications (
  245                 CAMEL_MAPI_SETTINGS (object)));
  246             return;
  247     }
  248 
  249     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
  250 }
  251 
  252 static void
  253 mapi_settings_finalize (GObject *object)
  254 {
  255     CamelMapiSettings *mapi_settings = CAMEL_MAPI_SETTINGS (object);
  256 
  257     g_mutex_clear (&mapi_settings->priv->property_lock);
  258 
  259     g_free (mapi_settings->priv->domain);
  260     g_free (mapi_settings->priv->profile);
  261     g_free (mapi_settings->priv->realm);
  262 
  263     /* Chain up to parent's finalize() method. */
  264     G_OBJECT_CLASS (camel_mapi_settings_parent_class)->finalize (object);
  265 }
  266 
  267 static void
  268 camel_mapi_settings_class_init (CamelMapiSettingsClass *class)
  269 {
  270     GObjectClass *object_class;
  271 
  272     object_class = G_OBJECT_CLASS (class);
  273     object_class->set_property = mapi_settings_set_property;
  274     object_class->get_property = mapi_settings_get_property;
  275     object_class->finalize = mapi_settings_finalize;
  276 
  277     /* Inherited from CamelNetworkSettings. */
  278     g_object_class_override_property (
  279         object_class,
  280         PROP_AUTH_MECHANISM,
  281         "auth-mechanism");
  282 
  283     g_object_class_install_property (
  284         object_class,
  285         PROP_CHECK_ALL,
  286         g_param_spec_boolean (
  287             "check-all",
  288             "Check All",
  289             "Check all folders for new messages",
  290             FALSE,
  291             G_PARAM_READWRITE |
  292             G_PARAM_CONSTRUCT |
  293             G_PARAM_STATIC_STRINGS));
  294 
  295     g_object_class_install_property (
  296         object_class,
  297         PROP_DOMAIN,
  298         g_param_spec_string (
  299             "domain",
  300             "Domain",
  301             "Windows domain",
  302             NULL,
  303             G_PARAM_READWRITE |
  304             G_PARAM_CONSTRUCT |
  305             G_PARAM_STATIC_STRINGS));
  306 
  307     g_object_class_install_property (
  308         object_class,
  309         PROP_FILTER_JUNK,
  310         g_param_spec_boolean (
  311             "filter-junk",
  312             "Filter Junk",
  313             "Whether to filter junk from all folders",
  314             FALSE,
  315             G_PARAM_READWRITE |
  316             G_PARAM_CONSTRUCT |
  317             G_PARAM_STATIC_STRINGS));
  318 
  319     g_object_class_install_property (
  320         object_class,
  321         PROP_FILTER_JUNK_INBOX,
  322         g_param_spec_boolean (
  323             "filter-junk-inbox",
  324             "Filter Junk Inbox",
  325             "Whether to filter junk from Inbox only",
  326             FALSE,
  327             G_PARAM_READWRITE |
  328             G_PARAM_CONSTRUCT |
  329             G_PARAM_STATIC_STRINGS));
  330 
  331     /* Inherited from CamelNetworkSettings. */
  332     g_object_class_override_property (
  333         object_class,
  334         PROP_HOST,
  335         "host");
  336 
  337     g_object_class_install_property (
  338         object_class,
  339         PROP_KERBEROS,
  340         g_param_spec_boolean (
  341             "kerberos",
  342             "Kerberos",
  343             "Use Kerberos authentication",
  344             FALSE,
  345             G_PARAM_READWRITE |
  346             G_PARAM_CONSTRUCT |
  347             G_PARAM_STATIC_STRINGS));
  348 
  349     /* Inherited from CamelNetworkSettings. */
  350     g_object_class_override_property (
  351         object_class,
  352         PROP_PORT,
  353         "port");
  354 
  355     g_object_class_install_property (
  356         object_class,
  357         PROP_PROFILE,
  358         g_param_spec_string (
  359             "profile",
  360             "Profile",
  361             "OpenChange user profile",
  362             NULL,
  363             G_PARAM_READWRITE |
  364             G_PARAM_CONSTRUCT |
  365             G_PARAM_STATIC_STRINGS));
  366 
  367     g_object_class_install_property (
  368         object_class,
  369         PROP_REALM,
  370         g_param_spec_string (
  371             "realm",
  372             "Realm",
  373             "Kerberos realm",
  374             NULL,
  375             G_PARAM_READWRITE |
  376             G_PARAM_CONSTRUCT |
  377             G_PARAM_STATIC_STRINGS));
  378 
  379     g_object_class_install_property (
  380         object_class,
  381         PROP_LISTEN_NOTIFICATIONS,
  382         g_param_spec_boolean (
  383             "listen-notifications",
  384             "Listen Notifications",
  385             "Whether to listen for server notifications",
  386             TRUE,
  387             G_PARAM_READWRITE |
  388             G_PARAM_CONSTRUCT |
  389             G_PARAM_STATIC_STRINGS));
  390 
  391     /* Inherited from CamelNetworkSettings. */
  392     g_object_class_override_property (
  393         object_class,
  394         PROP_SECURITY_METHOD,
  395         "security-method");
  396 
  397     /* Inherited from CamelNetworkSettings. */
  398     g_object_class_override_property (
  399         object_class,
  400         PROP_USER,
  401         "user");
  402 }
  403 
  404 static void
  405 camel_mapi_settings_init (CamelMapiSettings *settings)
  406 {
  407     settings->priv = camel_mapi_settings_get_instance_private (settings);
  408     g_mutex_init (&settings->priv->property_lock);
  409 }
  410 
  411 gboolean
  412 camel_mapi_settings_get_check_all (CamelMapiSettings *settings)
  413 {
  414     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), FALSE);
  415 
  416     return settings->priv->check_all;
  417 }
  418 
  419 void
  420 camel_mapi_settings_set_check_all (CamelMapiSettings *settings,
  421                                    gboolean check_all)
  422 {
  423     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  424 
  425     if ((settings->priv->check_all ? 1 : 0) == (check_all ? 1 : 0))
  426         return;
  427 
  428     settings->priv->check_all = check_all;
  429 
  430     g_object_notify (G_OBJECT (settings), "check-all");
  431 }
  432 
  433 const gchar *
  434 camel_mapi_settings_get_domain (CamelMapiSettings *settings)
  435 {
  436     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
  437 
  438     return settings->priv->domain;
  439 }
  440 
  441 gchar *
  442 camel_mapi_settings_dup_domain (CamelMapiSettings *settings)
  443 {
  444     const gchar *protected;
  445     gchar *duplicate;
  446 
  447     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
  448 
  449     g_mutex_lock (&settings->priv->property_lock);
  450 
  451     protected = camel_mapi_settings_get_domain (settings);
  452     duplicate = g_strdup (protected);
  453 
  454     g_mutex_unlock (&settings->priv->property_lock);
  455 
  456     return duplicate;
  457 }
  458 
  459 void
  460 camel_mapi_settings_set_domain (CamelMapiSettings *settings,
  461                                 const gchar *domain)
  462 {
  463     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  464 
  465     /* The value should never be NULL. */
  466     if (domain == NULL)
  467         domain = "";
  468 
  469     g_mutex_lock (&settings->priv->property_lock);
  470 
  471     if (g_strcmp0 (settings->priv->domain, domain) == 0) {
  472         g_mutex_unlock (&settings->priv->property_lock);
  473         return;
  474     }
  475 
  476     g_free (settings->priv->domain);
  477     settings->priv->domain = g_strdup (domain);
  478 
  479     g_mutex_unlock (&settings->priv->property_lock);
  480 
  481     g_object_notify (G_OBJECT (settings), "domain");
  482 }
  483 
  484 gboolean
  485 camel_mapi_settings_get_filter_junk (CamelMapiSettings *settings)
  486 {
  487     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), FALSE);
  488 
  489     return settings->priv->filter_junk;
  490 }
  491 
  492 void
  493 camel_mapi_settings_set_filter_junk (CamelMapiSettings *settings,
  494                                      gboolean filter_junk)
  495 {
  496     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  497 
  498     if ((settings->priv->filter_junk ? 1 : 0) == (filter_junk ? 1 : 0))
  499         return;
  500 
  501     settings->priv->filter_junk = filter_junk;
  502 
  503     g_object_notify (G_OBJECT (settings), "filter-junk");
  504 }
  505 
  506 gboolean
  507 camel_mapi_settings_get_filter_junk_inbox (CamelMapiSettings *settings)
  508 {
  509     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), FALSE);
  510 
  511     return settings->priv->filter_junk_inbox;
  512 }
  513 
  514 void
  515 camel_mapi_settings_set_filter_junk_inbox (CamelMapiSettings *settings,
  516                                            gboolean filter_junk_inbox)
  517 {
  518     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  519 
  520     if ((settings->priv->filter_junk_inbox ? 1 : 0) == (filter_junk_inbox ? 1 : 0))
  521         return;
  522 
  523     settings->priv->filter_junk_inbox = filter_junk_inbox;
  524 
  525     g_object_notify (G_OBJECT (settings), "filter-junk-inbox");
  526 }
  527 
  528 gboolean
  529 camel_mapi_settings_get_kerberos (CamelMapiSettings *settings)
  530 {
  531     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), FALSE);
  532 
  533     return settings->priv->kerberos;
  534 }
  535 
  536 void
  537 camel_mapi_settings_set_kerberos (CamelMapiSettings *settings,
  538                                   gboolean kerberos)
  539 {
  540     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  541 
  542     if ((settings->priv->kerberos ? 1 : 0) == (kerberos ? 1 : 0))
  543         return;
  544 
  545     settings->priv->kerberos = kerberos;
  546 
  547     g_object_notify (G_OBJECT (settings), "kerberos");
  548 }
  549 
  550 const gchar *
  551 camel_mapi_settings_get_profile (CamelMapiSettings *settings)
  552 {
  553     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
  554 
  555     return settings->priv->profile;
  556 }
  557 
  558 gchar *
  559 camel_mapi_settings_dup_profile (CamelMapiSettings *settings)
  560 {
  561     const gchar *protected;
  562     gchar *duplicate;
  563 
  564     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
  565 
  566     g_mutex_lock (&settings->priv->property_lock);
  567 
  568     protected = camel_mapi_settings_get_profile (settings);
  569     duplicate = g_strdup (protected);
  570 
  571     g_mutex_unlock (&settings->priv->property_lock);
  572 
  573     return duplicate;
  574 }
  575 
  576 void
  577 camel_mapi_settings_set_profile (CamelMapiSettings *settings,
  578                                  const gchar *profile)
  579 {
  580     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  581 
  582     g_mutex_lock (&settings->priv->property_lock);
  583 
  584     if (g_strcmp0 (settings->priv->profile, profile) == 0) {
  585         g_mutex_unlock (&settings->priv->property_lock);
  586         return;
  587     }
  588 
  589     g_free (settings->priv->profile);
  590     settings->priv->profile = g_strdup (profile);
  591 
  592     g_mutex_unlock (&settings->priv->property_lock);
  593 
  594     g_object_notify (G_OBJECT (settings), "profile");
  595 }
  596 
  597 const gchar *
  598 camel_mapi_settings_get_realm (CamelMapiSettings *settings)
  599 {
  600     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
  601 
  602     return settings->priv->realm;
  603 }
  604 
  605 gchar *
  606 camel_mapi_settings_dup_realm (CamelMapiSettings *settings)
  607 {
  608     const gchar *protected;
  609     gchar *duplicate;
  610 
  611     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
  612 
  613     g_mutex_lock (&settings->priv->property_lock);
  614 
  615     protected = camel_mapi_settings_get_realm (settings);
  616     duplicate = g_strdup (protected);
  617 
  618     g_mutex_unlock (&settings->priv->property_lock);
  619 
  620     return duplicate;
  621 }
  622 
  623 void
  624 camel_mapi_settings_set_realm (CamelMapiSettings *settings,
  625                                const gchar *realm)
  626 {
  627     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  628 
  629     /* The value should never be NULL. */
  630     if (realm == NULL)
  631         realm = "";
  632 
  633     g_mutex_lock (&settings->priv->property_lock);
  634 
  635     if (g_strcmp0 (settings->priv->realm, realm) == 0) {
  636         g_mutex_unlock (&settings->priv->property_lock);
  637         return;
  638     }
  639 
  640     g_free (settings->priv->realm);
  641     settings->priv->realm = g_strdup (realm);
  642 
  643     g_mutex_unlock (&settings->priv->property_lock);
  644 
  645     g_object_notify (G_OBJECT (settings), "realm");
  646 }
  647 
  648 gboolean
  649 camel_mapi_settings_get_listen_notifications (CamelMapiSettings *settings)
  650 {
  651     g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), FALSE);
  652 
  653     return settings->priv->listen_notifications;
  654 }
  655 
  656 void
  657 camel_mapi_settings_set_listen_notifications (CamelMapiSettings *settings,
  658                           gboolean listen_notifications)
  659 {
  660     g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
  661 
  662     if ((settings->priv->listen_notifications ? 1 : 0) == (listen_notifications ? 1 : 0))
  663         return;
  664 
  665     settings->priv->listen_notifications = listen_notifications;
  666 
  667     g_object_notify (G_OBJECT (settings), "listen-notifications");
  668 }