"Fossies" - the Fresh Open Source Software Archive

Member "evolution-mapi-3.46.1/src/libexchangemapi/e-source-mapi-folder.c" (2 Dec 2022, 11910 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 "e-source-mapi-folder.c" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * e-source-mapi-folder.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 "e-source-mapi-folder.h"
   20 
   21 struct _ESourceMapiFolderPrivate {
   22     guint64 fid;
   23     guint64 parent_fid;
   24     gboolean is_public;
   25     gboolean server_notification;
   26     gchar *foreign_username;
   27     gboolean allow_partial;
   28     gint partial_count;
   29 };
   30 
   31 enum {
   32     PROP_0,
   33     PROP_ID,
   34     PROP_PARENT_ID,
   35     PROP_IS_PUBLIC,
   36     PROP_SERVER_NOTIFICATION,
   37     PROP_FOREIGN_USERNAME,
   38     PROP_ALLOW_PARTIAL,
   39     PROP_PARTIAL_COUNT
   40 };
   41 
   42 G_DEFINE_DYNAMIC_TYPE_EXTENDED (
   43     ESourceMapiFolder,
   44     e_source_mapi_folder,
   45     E_TYPE_SOURCE_EXTENSION,
   46     0,
   47     G_ADD_PRIVATE_DYNAMIC (ESourceMapiFolder))
   48 
   49 static void
   50 source_mapi_folder_set_property (GObject *object,
   51                  guint property_id,
   52                                  const GValue *value,
   53                                  GParamSpec *pspec)
   54 {
   55     switch (property_id) {
   56         case PROP_ID:
   57             e_source_mapi_folder_set_id (
   58                 E_SOURCE_MAPI_FOLDER (object),
   59                 g_value_get_uint64 (value));
   60             return;
   61 
   62         case PROP_PARENT_ID:
   63             e_source_mapi_folder_set_parent_id (
   64                 E_SOURCE_MAPI_FOLDER (object),
   65                 g_value_get_uint64 (value));
   66             return;
   67 
   68         case PROP_IS_PUBLIC:
   69             e_source_mapi_folder_set_is_public (
   70                 E_SOURCE_MAPI_FOLDER (object),
   71                 g_value_get_boolean (value));
   72             return;
   73 
   74         case PROP_SERVER_NOTIFICATION:
   75             e_source_mapi_folder_set_server_notification (
   76                 E_SOURCE_MAPI_FOLDER (object),
   77                 g_value_get_boolean (value));
   78             return;
   79 
   80         case PROP_FOREIGN_USERNAME:
   81             e_source_mapi_folder_set_foreign_username (
   82                 E_SOURCE_MAPI_FOLDER (object),
   83                 g_value_get_string (value));
   84             return;
   85 
   86         case PROP_ALLOW_PARTIAL:
   87             e_source_mapi_folder_set_allow_partial (
   88                 E_SOURCE_MAPI_FOLDER (object),
   89                 g_value_get_boolean (value));
   90             return;
   91 
   92         case PROP_PARTIAL_COUNT:
   93             e_source_mapi_folder_set_partial_count (
   94                 E_SOURCE_MAPI_FOLDER (object),
   95                 g_value_get_int (value));
   96             return;
   97     }
   98 
   99     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
  100 }
  101 
  102 static void
  103 source_mapi_folder_get_property (GObject *object,
  104                  guint property_id,
  105                                  GValue *value,
  106                                  GParamSpec *pspec)
  107 {
  108     switch (property_id) {
  109         case PROP_ID:
  110             g_value_set_uint64 (
  111                 value,
  112                 e_source_mapi_folder_get_id (
  113                 E_SOURCE_MAPI_FOLDER (object)));
  114             return;
  115 
  116         case PROP_PARENT_ID:
  117             g_value_set_uint64 (
  118                 value,
  119                 e_source_mapi_folder_get_parent_id (
  120                 E_SOURCE_MAPI_FOLDER (object)));
  121             return;
  122 
  123         case PROP_IS_PUBLIC:
  124             g_value_set_boolean (
  125                 value,
  126                 e_source_mapi_folder_is_public (
  127                 E_SOURCE_MAPI_FOLDER (object)));
  128             return;
  129 
  130         case PROP_SERVER_NOTIFICATION:
  131             g_value_set_boolean (
  132                 value,
  133                 e_source_mapi_folder_get_server_notification (
  134                 E_SOURCE_MAPI_FOLDER (object)));
  135             return;
  136 
  137         case PROP_FOREIGN_USERNAME:
  138             g_value_take_string (
  139                 value,
  140                 e_source_mapi_folder_dup_foreign_username (
  141                 E_SOURCE_MAPI_FOLDER (object)));
  142             return;
  143 
  144         case PROP_ALLOW_PARTIAL:
  145             g_value_set_boolean (
  146                 value,
  147                 e_source_mapi_folder_get_allow_partial (
  148                 E_SOURCE_MAPI_FOLDER (object)));
  149             return;
  150 
  151         case PROP_PARTIAL_COUNT:
  152             g_value_set_int (
  153                 value,
  154                 e_source_mapi_folder_get_partial_count (
  155                 E_SOURCE_MAPI_FOLDER (object)));
  156             return;
  157     }
  158 
  159     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
  160 }
  161 
  162 static void
  163 source_mapi_folder_finalize (GObject *object)
  164 {
  165     ESourceMapiFolder *extension = E_SOURCE_MAPI_FOLDER (object);
  166 
  167     g_free (extension->priv->foreign_username);
  168 
  169     /* Chain up to parent's finalize() method. */
  170     G_OBJECT_CLASS (e_source_mapi_folder_parent_class)->finalize (object);
  171 }
  172 
  173 static void
  174 e_source_mapi_folder_class_init (ESourceMapiFolderClass *class)
  175 {
  176     GObjectClass *object_class;
  177     ESourceExtensionClass *extension_class;
  178 
  179     object_class = G_OBJECT_CLASS (class);
  180     object_class->set_property = source_mapi_folder_set_property;
  181     object_class->get_property = source_mapi_folder_get_property;
  182     object_class->finalize = source_mapi_folder_finalize;
  183 
  184     extension_class = E_SOURCE_EXTENSION_CLASS (class);
  185     extension_class->name = E_SOURCE_EXTENSION_MAPI_FOLDER;
  186 
  187     g_object_class_install_property (
  188         object_class,
  189         PROP_ID,
  190         g_param_spec_uint64 (
  191             "id",
  192             "ID",
  193             "The server-assigned folder ID",
  194             0, G_MAXUINT64, 0,
  195             G_PARAM_READWRITE |
  196             G_PARAM_STATIC_STRINGS |
  197             E_SOURCE_PARAM_SETTING));
  198 
  199     g_object_class_install_property (
  200         object_class,
  201         PROP_PARENT_ID,
  202         g_param_spec_uint64 (
  203             "parent-id",
  204             "Parent ID",
  205             "The server-assigned folder's parent ID",
  206             0, G_MAXUINT64, 0,
  207             G_PARAM_READWRITE |
  208             G_PARAM_STATIC_STRINGS |
  209             E_SOURCE_PARAM_SETTING));
  210 
  211     g_object_class_install_property (
  212         object_class,
  213         PROP_IS_PUBLIC,
  214         g_param_spec_boolean (
  215             "is-public",
  216             "Is Public",
  217             "Folder is a public folder",
  218             FALSE,
  219             G_PARAM_READWRITE |
  220             G_PARAM_STATIC_STRINGS |
  221             E_SOURCE_PARAM_SETTING));
  222 
  223     g_object_class_install_property (
  224         object_class,
  225         PROP_SERVER_NOTIFICATION,
  226         g_param_spec_boolean (
  227             "server-notification",
  228             "Server Notification",
  229             "Whether to listen for server notifications on this folder",
  230             FALSE,
  231             G_PARAM_READWRITE |
  232             G_PARAM_STATIC_STRINGS |
  233             E_SOURCE_PARAM_SETTING));
  234 
  235     g_object_class_install_property (
  236         object_class,
  237         PROP_FOREIGN_USERNAME,
  238         g_param_spec_string (
  239             "foreign-username",
  240             "Foreign Username",
  241             "Set for folders belonging to other (foreign) users",
  242             NULL,
  243             G_PARAM_READWRITE |
  244             G_PARAM_STATIC_STRINGS |
  245             E_SOURCE_PARAM_SETTING));
  246 
  247     g_object_class_install_property (
  248         object_class,
  249         PROP_ALLOW_PARTIAL,
  250         g_param_spec_boolean (
  251             "allow-partial",
  252             "Allow Partial",
  253             "Allow Partial fetching for GAL",
  254             TRUE,
  255             G_PARAM_READWRITE |
  256             G_PARAM_STATIC_STRINGS |
  257             E_SOURCE_PARAM_SETTING));
  258 
  259     g_object_class_install_property (
  260         object_class,
  261         PROP_PARTIAL_COUNT,
  262         g_param_spec_int (
  263             "partial-count",
  264             "Partial Count",
  265             "Count of contacts for Partial fetching of GAL",
  266             G_MININT, G_MAXINT, 50,
  267             G_PARAM_READWRITE |
  268             G_PARAM_STATIC_STRINGS |
  269             E_SOURCE_PARAM_SETTING));
  270 }
  271 
  272 static void
  273 e_source_mapi_folder_class_finalize (ESourceMapiFolderClass *class)
  274 {
  275 }
  276 
  277 static void
  278 e_source_mapi_folder_init (ESourceMapiFolder *extension)
  279 {
  280     extension->priv = e_source_mapi_folder_get_instance_private (extension);
  281 
  282     extension->priv->fid = 0;
  283     extension->priv->parent_fid = 0;
  284     extension->priv->is_public = FALSE;
  285     extension->priv->server_notification = FALSE;
  286     extension->priv->foreign_username = NULL;
  287     extension->priv->allow_partial = TRUE;
  288     extension->priv->partial_count = 50;
  289 }
  290 
  291 void
  292 e_source_mapi_folder_type_register (GTypeModule *type_module)
  293 {
  294     /* XXX G_DEFINE_DYNAMIC_TYPE_EXTENDED declares a static type registration
  295      *     function, so we have to wrap it with a public function in
  296      *     order to register types from a separate compilation unit. */
  297     e_source_mapi_folder_register_type (type_module);
  298 }
  299 
  300 guint64
  301 e_source_mapi_folder_get_id (ESourceMapiFolder *extension)
  302 {
  303     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), 0);
  304 
  305     return extension->priv->fid;
  306 }
  307 
  308 void
  309 e_source_mapi_folder_set_id (ESourceMapiFolder *extension,
  310                  guint64 id)
  311 {
  312     g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
  313 
  314     if (extension->priv->fid == id)
  315         return;
  316 
  317     extension->priv->fid = id;
  318 
  319     g_object_notify (G_OBJECT (extension), "id");
  320 }
  321 
  322 guint64
  323 e_source_mapi_folder_get_parent_id (ESourceMapiFolder *extension)
  324 {
  325     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), 0);
  326 
  327     return extension->priv->parent_fid;
  328 }
  329 
  330 void
  331 e_source_mapi_folder_set_parent_id (ESourceMapiFolder *extension,
  332                     guint64 id)
  333 {
  334     g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
  335 
  336     if (extension->priv->parent_fid == id)
  337         return;
  338 
  339     extension->priv->parent_fid = id;
  340 
  341     g_object_notify (G_OBJECT (extension), "parent-id");
  342 }
  343 
  344 gboolean
  345 e_source_mapi_folder_is_public (ESourceMapiFolder *extension)
  346 {
  347     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
  348 
  349     return extension->priv->is_public;
  350 }
  351 
  352 void
  353 e_source_mapi_folder_set_is_public (ESourceMapiFolder *extension,
  354                     gboolean is_public)
  355 {
  356     g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
  357 
  358     if ((extension->priv->is_public ? 1 : 0) == (is_public ? 1 : 0))
  359         return;
  360 
  361     extension->priv->is_public = is_public;
  362 
  363     g_object_notify (G_OBJECT (extension), "is-public");
  364 }
  365 
  366 gboolean
  367 e_source_mapi_folder_get_allow_partial (ESourceMapiFolder *extension)
  368 {
  369     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
  370 
  371     return extension->priv->allow_partial;
  372 }
  373 
  374 void
  375 e_source_mapi_folder_set_allow_partial (ESourceMapiFolder *extension,
  376                     gboolean allow_partial)
  377 {
  378     g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
  379 
  380     if ((extension->priv->allow_partial ? 1 : 0) == (allow_partial ? 1 : 0))
  381         return;
  382 
  383     extension->priv->allow_partial = allow_partial;
  384 
  385     g_object_notify (G_OBJECT (extension), "allow-partial");
  386 }
  387 
  388 gint
  389 e_source_mapi_folder_get_partial_count (ESourceMapiFolder *extension)
  390 {
  391     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
  392 
  393     return extension->priv->partial_count;
  394 }
  395 
  396 void
  397 e_source_mapi_folder_set_partial_count (ESourceMapiFolder *extension,
  398                     gint partial_count)
  399 {
  400     g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
  401 
  402     if (extension->priv->partial_count == partial_count)
  403         return;
  404 
  405     extension->priv->partial_count = partial_count;
  406 
  407     g_object_notify (G_OBJECT (extension), "partial-count");
  408 }
  409 
  410 gboolean
  411 e_source_mapi_folder_get_server_notification (ESourceMapiFolder *extension)
  412 {
  413     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), FALSE);
  414 
  415     return extension->priv->server_notification;
  416 }
  417 
  418 void
  419 e_source_mapi_folder_set_server_notification (ESourceMapiFolder *extension,
  420                           gboolean server_notification)
  421 {
  422     g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
  423 
  424     if ((extension->priv->server_notification ? 1 : 0) == (server_notification ? 1 : 0))
  425         return;
  426 
  427     extension->priv->server_notification = server_notification;
  428 
  429     g_object_notify (G_OBJECT (extension), "server-notification");
  430 }
  431 
  432 const gchar *
  433 e_source_mapi_folder_get_foreign_username (ESourceMapiFolder *extension)
  434 {
  435     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), NULL);
  436 
  437     return extension->priv->foreign_username;
  438 }
  439 
  440 gchar *
  441 e_source_mapi_folder_dup_foreign_username (ESourceMapiFolder *extension)
  442 {
  443     gchar *duplicate;
  444 
  445     g_return_val_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension), NULL);
  446 
  447     e_source_extension_property_lock (E_SOURCE_EXTENSION (extension));
  448 
  449     duplicate = g_strdup (e_source_mapi_folder_get_foreign_username (extension));
  450 
  451     e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension));
  452 
  453     return duplicate;
  454 }
  455 
  456 void
  457 e_source_mapi_folder_set_foreign_username (ESourceMapiFolder *extension,
  458                       const gchar *foreign_username)
  459 {
  460     g_return_if_fail (E_IS_SOURCE_MAPI_FOLDER (extension));
  461 
  462     e_source_extension_property_lock (E_SOURCE_EXTENSION (extension));
  463 
  464     if (foreign_username && !*foreign_username)
  465         foreign_username = NULL;
  466 
  467     if (g_strcmp0 (extension->priv->foreign_username, foreign_username) == 0) {
  468         e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension));
  469         return;
  470     }
  471 
  472     g_free (extension->priv->foreign_username);
  473     extension->priv->foreign_username = g_strdup (foreign_username);
  474 
  475     e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension));
  476 
  477     g_object_notify (G_OBJECT (extension), "foreign-username");
  478 }