dav/tags.h

changeset 400
90c6bfa94fa2
parent 390
26998dc980f9
child 414
ea50585ec9d9
--- a/dav/tags.h	Fri Jun 01 08:52:05 2018 +0200
+++ b/dav/tags.h	Fri Jun 01 09:01:00 2018 +0200
@@ -39,11 +39,33 @@
 extern "C" {
 #endif
 
+
+/* OFF must be zero, other constants are arbitrary */
+#define DAV_SYNC_TAGFILTER_OFF     0
+#define DAV_SYNC_TAGFILTER_AND     1
+#define DAV_SYNC_TAGFILTER_OR      2
+#define DAV_SYNC_TAGFILTER_ONE     3
+#define DAV_SYNC_TAGFILTER_NONE    4
+    
 typedef struct DavTag {
     char *name;
     char *color;
 } DavTag;
 
+/**
+ * filter ::= operator? , (tag_list | ("(" , filter , ")")+)
+ * tag_list ::= tag , ("," tag)*
+ * operator ::= "&" | "|" | "1" | "0"
+ */
+typedef struct SyncTagFilter SyncTagFilter;
+
+struct SyncTagFilter {
+    int mode;
+    UcxList* tags;
+    size_t subfilter_count;
+    SyncTagFilter** subfilters;
+};
+
 void free_dav_tag(DavTag* tag);
 
 int compare_tagname(DavTag* left, DavTag* right, void* ignorecase);
@@ -60,6 +82,14 @@
 UcxList* parse_macos_taglist(const char *buf, size_t length);
 UcxBuffer* create_macos_taglist(UcxList *tags);
 
+
+/* ----------- ----------- tag filter  ---------------------- */
+
+SyncTagFilter* parse_tagfilter_string(const char* filterstring);
+void free_tagfilter(SyncTagFilter* filter);
+
+int matches_tagfilter(UcxList *dav_tags, SyncTagFilter *tagfilter);
+
 #ifdef __cplusplus
 }
 #endif

mercurial