void eee_calendar_properties_commit(EPlugin *epl, ECalConfigTargetSource *target) { ESource *source = target->source; ESourceGroup *group = e_source_peek_group(source); const char *color = e_source_peek_color_spec(source); GdkColor parsed_color; char converted_color[COLOR_COMPONENT_SIZE * 3 * 2 + 2]; //3 components, 2 hex chars in byte, 2 additional chars (# and \0) if (!gdk_color_parse(color, &parsed_color)) { g_warning("EEE: Unable to convert color \"%s\" from Evolution.", color); parsed_color.red = -1; parsed_color.green = 0; parsed_color.blue = 0; } parsed_color.red >>= (2 - COLOR_COMPONENT_SIZE) * 8; //GdkColor comonent is 2 byte integer, there are 8 bits in byte parsed_color.green >>= (2 - COLOR_COMPONENT_SIZE) * 8; parsed_color.blue >>= (2 - COLOR_COMPONENT_SIZE) * 8; snprintf(converted_color, COLOR_COMPONENT_SIZE * 3 * 2 + 2, "#%0*X%0*X%0*X", COLOR_COMPONENT_SIZE * 2, parsed_color.red, COLOR_COMPONENT_SIZE * 2, parsed_color.green, COLOR_COMPONENT_SIZE * 2, parsed_color.blue); converted_color[COLOR_COMPONENT_SIZE * 3 * 2 + 1] = '\0'; //g_debug("** EEE ** Properties Dialog Commit Hook Call:\n\n%s\n\n", e_source_to_standalone_xml(target->source)); if (!e_source_group_is_3e(group)) { return; } if (!eee_plugin_online) { return; } if (is_new_calendar_dialog(source)) { char *calname = NULL; EeeAccount *account = eee_accounts_manager_find_account_by_group(mgr(), group); if (account == NULL || account->state != EEE_ACCOUNT_STATE_ONLINE) { return; } if (eee_account_create_new_calendar(account, &calname)) { eee_account_update_calendar_settings(account, account->name, calname, e_source_peek_name(source), converted_color); } eee_account_disconnect(account); e_source_set_3e_properties(source, calname, account->name, account, "write", NULL, 0); // title and color are already set eee_accounts_manager_add_source(mgr(), account->name, g_object_ref(source)); g_free(calname); } else { EeeAccount *account = eee_accounts_manager_find_account_by_source(mgr(), source); if (account == NULL || account->state != EEE_ACCOUNT_STATE_ONLINE) { return; } const char *calname = e_source_get_property(source, "eee-calname"); const char *owner = e_source_get_property(source, "eee-owner"); eee_account_update_calendar_settings(account, owner, calname, e_source_peek_name(source), converted_color); eee_account_disconnect(account); struct acl_context * ctx = g_object_get_data (G_OBJECT (target->source), "eee-acl-context"); store_acl (ctx); acl_gui_destroy (); } eee_accounts_manager_restart_sync(mgr()); }
int set_opt(struct option_array *opt, sstr * str) { sstr *tok; int sep; if (rereading && !opt->reloadable) return (0); tok = sstr_init(0); sstr_ncat2(str, "\n", 1); /*For sstr_token */ opt->essential = FALSE; switch (opt->type) { case BOOL: sstr_token(str, tok, " \t\r\n", 0); if (!sstr_casecmp2(tok, "yes")) *(int *) opt->var = TRUE; else if (!sstr_casecmp2(tok, "no")) *(int *) opt->var = FALSE; else return (-1); break; case FILENAME: case STRING: sstr_token(str, tok, " \t\r\n", SSTR_QTOK); *(char **) opt->var = strdup(sstr_buf(tok)); break; case DIRECTRY: sstr_token(str, tok, " \t\r\n", SSTR_QTOK); if (sstr_getchar(tok, sstr_len(tok) - 1) != '/') sstr_ncat2(tok, "/", 1); *(char **) opt->var = strdup(sstr_buf(tok)); break; case ADDRESS: sstr_token(str, tok, " \t\r\n", 0); return name2addr(tok, (struct in_addr *) opt->var); break; case ADDRPRT: sep = sstr_token(str, tok, " :\t\r\n", 0); if( name2addr(tok, &((struct sockaddr_in *) opt->var)->sin_addr)==-1) return(-1); if (sep == ':') ((struct sockaddr_in *) opt->var)->sin_port = ntohs(sstr_atoi(str)); ((struct sockaddr_in *) opt->var)->sin_family = AF_INET; break; case INT: sstr_token(str, tok, " \t\r\n", 0); *(int *) opt->var = sstr_atoi(tok); break; case PRTRNGE: sstr_token(str, tok, " \t-,\r\n", 0); ((int *) opt->var)[0] = sstr_atoi(tok); ((int *) opt->var)[1] = sstr_atoi(str); if(!valid_uint16(((int *) opt->var)[0]) || !valid_uint16(((int *) opt->var)[1])) { fprintf(stderr, "Port out of range\n"); return -1; } if(((int *) opt->var)[0] >= ((int *) opt->var)[1]) { fprintf(stderr, "Port range is inverted\n"); return -1; } break; case ACL: return store_acl(str, (struct acl_list *) opt->var); break; case SUBSECT: return store_subsect(str, (struct subsect_list *) opt->var); } sstr_free(tok); return (0); }