aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog8
-rw-r--r--calendar/cal-util/cal-component.c110
-rw-r--r--calendar/cal-util/cal-component.h21
3 files changed, 128 insertions, 11 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 199b355241..243e579602 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,5 +1,13 @@
2000-07-03 Federico Mena Quintero <federico@helixcode.com>
+ * cal-util/cal-component.c (cal_component_get_summary): Use
+ CalComponentText instead of CalComponentPropSummary. Removed the
+ latter typedef.
+ (cal_component_set_summary): Likewise.
+ (scan_property): Handle the CLASSIFICATION property.
+ (cal_component_get_classification): Ditto.
+ (cal_component_set_classification): Ditto.
+
* cal-util/cal-component.c (cal_component_free_text_list): Renamed
from cal_component_free_description_list(). We can share this
function since both comments and descriptions have the same form.
diff --git a/calendar/cal-util/cal-component.c b/calendar/cal-util/cal-component.c
index 9c497c0429..a16aefd0ca 100644
--- a/calendar/cal-util/cal-component.c
+++ b/calendar/cal-util/cal-component.c
@@ -20,6 +20,7 @@
*/
#include <config.h>
+#include <string.h>
#include <unistd.h>
#include "cal-component.h"
#include "timeutil.h"
@@ -40,6 +41,8 @@ typedef struct {
};
GSList *categories_list;
+ icalproperty *classification;
+
struct text {
icalproperty *prop;
icalparameter *altrep_param;
@@ -172,6 +175,9 @@ free_icalcomponent (CalComponent *comp)
priv->categories_list = free_slist (priv->categories_list);
+ priv->classification = NULL;
+ priv->comment_list = NULL;
+
priv->description_list = free_slist (priv->description_list);
priv->dtstart.prop = NULL;
@@ -385,6 +391,10 @@ scan_property (CalComponent *comp, icalproperty *prop)
scan_categories (comp, prop);
break;
+ case ICAL_CLASS_PROPERTY:
+ priv->classification = prop;
+ break;
+
case ICAL_COMMENT_PROPERTY:
scan_text (comp, &priv->comment_list, prop);
break;
@@ -816,6 +826,102 @@ cal_component_free_categories_list (GSList *categ_list)
}
/**
+ * cal_component_get_classification:
+ * @comp: A calendar component object.
+ * @classif: Return value for the classification.
+ *
+ * Queries the classification of a calendar component object. If the
+ * classification property is not set on this component, this function returns
+ * #CAL_COMPONENT_CLASS_NONE.
+ **/
+void
+cal_component_get_classification (CalComponent *comp, CalComponentClassification *classif)
+{
+ CalComponentPrivate *priv;
+ const char *class;
+
+ g_return_if_fail (comp != NULL);
+ g_return_if_fail (IS_CAL_COMPONENT (comp));
+ g_return_if_fail (classif != NULL);
+
+ priv = comp->priv;
+ g_return_if_fail (priv->icalcomp != NULL);
+
+ if (!priv->classification) {
+ *classif = CAL_COMPONENT_CLASS_NONE;
+ return;
+ }
+
+ class = icalproperty_get_class (priv->classification);
+
+ if (strcasecmp (class, "PUBLIC") == 0)
+ *classif = CAL_COMPONENT_CLASS_PUBLIC;
+ else if (strcasecmp (class, "PRIVATE") == 0)
+ *classif = CAL_COMPONENT_CLASS_PRIVATE;
+ else if (strcasecmp (class, "CONFIDENTIAL") == 0)
+ *classif = CAL_COMPONENT_CLASS_CONFIDENTIAL;
+ else
+ *classif = CAL_COMPONENT_CLASS_UNKNOWN;
+}
+
+/**
+ * cal_component_set_classification:
+ * @comp: A calendar component object.
+ * @classif: Classification to use.
+ *
+ * Sets the classification property of a calendar component object. To unset
+ * the property, specify CAL_COMPONENT_CLASS_NONE for @classif.
+ **/
+void
+cal_component_set_classification (CalComponent *comp, CalComponentClassification classif)
+{
+ CalComponentPrivate *priv;
+ char *str;
+
+ g_return_if_fail (comp != NULL);
+ g_return_if_fail (IS_CAL_COMPONENT (comp));
+ g_return_if_fail (classif != CAL_COMPONENT_CLASS_UNKNOWN);
+
+ priv = comp->priv;
+ g_return_if_fail (priv->icalcomp != NULL);
+
+ if (classif == CAL_COMPONENT_CLASS_NONE) {
+ if (priv->classification) {
+ icalcomponent_remove_property (priv->icalcomp, priv->classification);
+ icalproperty_free (priv->classification);
+ priv->classification = NULL;
+ }
+
+ return;
+ }
+
+ switch (classif) {
+ case CAL_COMPONENT_CLASS_PUBLIC:
+ str = "PUBLIC";
+ break;
+
+ case CAL_COMPONENT_CLASS_PRIVATE:
+ str = "PRIVATE";
+ break;
+
+ case CAL_COMPONENT_CLASS_CONFIDENTIAL:
+ str = "CONFIDENTIAL";
+ break;
+
+ default:
+ g_assert_not_reached ();
+ str = NULL;
+ }
+
+ if (priv->classification)
+ icalproperty_set_class (priv->classification, str);
+ else {
+ priv->classification = icalproperty_new_class (str);
+ icalcomponent_add_property (priv->icalcomp, priv->classification);
+ }
+}
+
+/**
* cal_component_free_text_list:
* @text_list: List of #CalComponentText structures.
*
@@ -1261,7 +1367,7 @@ cal_component_set_due (CalComponent *comp, CalComponentDateTime *dt)
* Queries the summary of a calendar component object.
**/
void
-cal_component_get_summary (CalComponent *comp, CalComponentPropSummary *summary)
+cal_component_get_summary (CalComponent *comp, CalComponentText *summary)
{
CalComponentPrivate *priv;
@@ -1291,7 +1397,7 @@ cal_component_get_summary (CalComponent *comp, CalComponentPropSummary *summary)
* Sets the summary of a calendar component object.
**/
void
-cal_component_set_summary (CalComponent *comp, const CalComponentPropSummary *summary)
+cal_component_set_summary (CalComponent *comp, CalComponentText *summary)
{
CalComponentPrivate *priv;
diff --git a/calendar/cal-util/cal-component.h b/calendar/cal-util/cal-component.h
index d2d2c2c96f..dbb0096830 100644
--- a/calendar/cal-util/cal-component.h
+++ b/calendar/cal-util/cal-component.h
@@ -53,13 +53,13 @@ typedef enum {
/* Structures to return properties and their parameters */
-typedef struct {
- /* Summary string */
- const char *value;
-
- /* Alternate representation URI */
- const char *altrep;
-} CalComponentPropSummary;
+typedef enum {
+ CAL_COMPONENT_CLASS_NONE,
+ CAL_COMPONENT_CLASS_PUBLIC,
+ CAL_COMPONENT_CLASS_PRIVATE,
+ CAL_COMPONENT_CLASS_CONFIDENTIAL,
+ CAL_COMPONENT_CLASS_UNKNOWN
+} CalComponentClassification;
typedef struct {
/* Description string */
@@ -111,6 +111,9 @@ void cal_component_get_categories_list (CalComponent *comp, GSList **categ_list)
void cal_component_set_categories_list (CalComponent *comp, GSList *categ_list);
void cal_component_free_categories_list (GSList *categ_list);
+void cal_component_get_classification (CalComponent *comp, CalComponentClassification *classif);
+void cal_component_set_classification (CalComponent *comp, CalComponentClassification classif);
+
void cal_component_free_text_list (GSList *text_list);
void cal_component_get_comment_list (CalComponent *comp, GSList **text_list);
@@ -130,8 +133,8 @@ void cal_component_set_dtend (CalComponent *comp, CalComponentDateTime *dt);
void cal_component_get_due (CalComponent *comp, CalComponentDateTime *dt);
void cal_component_set_due (CalComponent *comp, CalComponentDateTime *dt);
-void cal_component_get_summary (CalComponent *comp, CalComponentPropSummary *summary);
-void cal_component_set_summary (CalComponent *comp, const CalComponentPropSummary *summary);
+void cal_component_get_summary (CalComponent *comp, CalComponentText *summary);
+void cal_component_set_summary (CalComponent *comp, CalComponentText *summary);