mcabber/src/settings.c
changeset 1065 230dca34dbea
parent 1004 b57a01ffeed6
child 1068 6646d2ed7f74
equal deleted inserted replaced
1064:516b5f7d1023 1065:230dca34dbea
    30 
    30 
    31 static GSList *option;
    31 static GSList *option;
    32 static GSList *alias;
    32 static GSList *alias;
    33 static GSList *binding;
    33 static GSList *binding;
    34 
    34 
    35 
       
    36 typedef struct {
    35 typedef struct {
    37   gchar *name;
    36   gchar *name;
    38   gchar *value;
    37   gchar *value;
    39 } T_setting;
    38 } T_setting;
    40 
    39 
       
    40 #ifdef HAVE_GPGME     /* PGP settings */
       
    41 static GHashTable *pgpopt;
       
    42 
       
    43 typedef struct {
       
    44   gchar *pgp_keyid;   /* KeyId the contact is supposed to use */
       
    45   guint pgp_disabled; /* If TRUE, PGP is disabled for outgoing messages */
       
    46 } T_pgpopt;
       
    47 #endif
       
    48 
    41 static inline GSList **get_list_ptr(guint type)
    49 static inline GSList **get_list_ptr(guint type)
    42 {
    50 {
    43   if      (type == SETTINGS_TYPE_OPTION)  return &option;
    51   if      (type == SETTINGS_TYPE_OPTION)  return &option;
    44   else if (type == SETTINGS_TYPE_ALIAS)   return &alias;
    52   else if (type == SETTINGS_TYPE_ALIAS)   return &alias;
    45   else if (type == SETTINGS_TYPE_BINDING) return &binding;
    53   else if (type == SETTINGS_TYPE_BINDING) return &binding;
    59 
    67 
    60   return ptr;
    68   return ptr;
    61 }
    69 }
    62 
    70 
    63 /* -- */
    71 /* -- */
       
    72 
       
    73 void settings_init(void)
       
    74 {
       
    75 #ifdef HAVE_GPGME
       
    76   pgpopt = g_hash_table_new(&g_str_hash, &g_str_equal);
       
    77 #endif
       
    78 }
    64 
    79 
    65 //  cfg_read_file(filename)
    80 //  cfg_read_file(filename)
    66 // Read and parse config file "filename".  If filename is NULL,
    81 // Read and parse config file "filename".  If filename is NULL,
    67 // try to open the configuration file at the default locations.
    82 // try to open the configuration file at the default locations.
    68 //
    83 //
   365       *p = 0;
   380       *p = 0;
   366   }
   381   }
   367   return nick;
   382   return nick;
   368 }
   383 }
   369 
   384 
       
   385 
       
   386 /* PGP settings */
       
   387 
       
   388 //  settings_pgp_setdisabled(jid, value)
       
   389 // Enable/disable PGP encryption for jid.
       
   390 // (Set value to TRUE to disable encryption)
       
   391 void settings_pgp_setdisabled(const char *bjid, guint value)
       
   392 {
       
   393 #ifdef HAVE_GPGME
       
   394   T_pgpopt *pgpdata;
       
   395   pgpdata = g_hash_table_lookup(pgpopt, bjid);
       
   396   if (!pgpdata) {
       
   397     // If value is 0, we do not need to create a structure (that's
       
   398     // the default value).
       
   399     if (value) {
       
   400       pgpdata = g_new0(T_pgpopt, 1);
       
   401       pgpdata->pgp_disabled = value;
       
   402       g_hash_table_insert(pgpopt, g_strdup(bjid), pgpdata);
       
   403     }
       
   404   } else {
       
   405     pgpdata->pgp_disabled = value;
       
   406     // We could remove the key/value if pgp_disabled is 0 and
       
   407     // pgp_keyid is NULL, actually.
       
   408   }
       
   409 #endif
       
   410 }
       
   411 
       
   412 //  settings_pgp_getdisabled(jid)
       
   413 // Return TRUE if PGP encryption should be disabled for jid.
       
   414 guint settings_pgp_getdisabled(const char *bjid)
       
   415 {
       
   416 #ifdef HAVE_GPGME
       
   417   T_pgpopt *pgpdata;
       
   418   pgpdata = g_hash_table_lookup(pgpopt, bjid);
       
   419   if (pgpdata)
       
   420     return pgpdata->pgp_disabled;
       
   421   else
       
   422     return FALSE; // default: not disabled
       
   423 #else
       
   424   return TRUE;    // No PGP support, let's say it's disabled.
       
   425 #endif
       
   426 }
       
   427 
       
   428 //  settings_pgp_setkeyid(jid, keyid)
       
   429 // Set the PGP KeyId for user jid.
       
   430 // Use keyid = NULL to erase the previous KeyId.
       
   431 void settings_pgp_setkeyid(const char *bjid, const char *keyid)
       
   432 {
       
   433 #ifdef HAVE_GPGME
       
   434   T_pgpopt *pgpdata;
       
   435   pgpdata = g_hash_table_lookup(pgpopt, bjid);
       
   436   if (!pgpdata) {
       
   437     // If keyid is NULL, we do not need to create a structure (that's
       
   438     // the default value).
       
   439     if (keyid) {
       
   440       pgpdata = g_new0(T_pgpopt, 1);
       
   441       pgpdata->pgp_keyid = g_strdup(keyid);
       
   442       g_hash_table_insert(pgpopt, g_strdup(bjid), pgpdata);
       
   443     }
       
   444   } else {
       
   445     g_free(pgpdata->pgp_keyid);
       
   446     if (keyid)
       
   447       pgpdata->pgp_keyid = g_strdup(keyid);
       
   448     else
       
   449       pgpdata->pgp_keyid = NULL;
       
   450     // We could remove the key/value if pgp_disabled is 0 and
       
   451     // pgp_keyid is NULL, actually.
       
   452   }
       
   453 #endif
       
   454 }
       
   455 
       
   456 //  settings_pgp_getkeyid(jid)
       
   457 // Get the PGP KeyId for user jid.
       
   458 const char *settings_pgp_getkeyid(const char *bjid)
       
   459 {
       
   460 #ifdef HAVE_GPGME
       
   461   T_pgpopt *pgpdata;
       
   462   pgpdata = g_hash_table_lookup(pgpopt, bjid);
       
   463   if (pgpdata)
       
   464     return pgpdata->pgp_keyid;
       
   465 #endif
       
   466   return NULL;
       
   467 }
       
   468 
   370 /* vim: set expandtab cindent cinoptions=>2\:2(0:  For Vim users... */
   469 /* vim: set expandtab cindent cinoptions=>2\:2(0:  For Vim users... */