summaryrefslogtreecommitdiff
path: root/pith/foldertype.h
diff options
context:
space:
mode:
authorEduardo Chappa <echappa@gmx.com>2013-02-03 00:59:38 -0700
committerEduardo Chappa <echappa@gmx.com>2013-02-03 00:59:38 -0700
commit094ca96844842928810f14844413109fc6cdd890 (patch)
treee60efbb980f38ba9308ccb4fb2b77b87bbc115f3 /pith/foldertype.h
downloadalpine-094ca96844842928810f14844413109fc6cdd890.tar.xz
Initial Alpine Version
Diffstat (limited to 'pith/foldertype.h')
-rw-r--r--pith/foldertype.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/pith/foldertype.h b/pith/foldertype.h
new file mode 100644
index 00000000..95d8b14a
--- /dev/null
+++ b/pith/foldertype.h
@@ -0,0 +1,163 @@
+/*
+ * $Id: foldertype.h 768 2007-10-24 00:10:03Z hubert@u.washington.edu $
+ *
+ * ========================================================================
+ * Copyright 2006-2007 University of Washington
+ * Copyright 2013 Eduardo Chappa
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * ========================================================================
+ */
+
+#ifndef PITH_FOLDERTYPE_INCLUDED
+#define PITH_FOLDERTYPE_INCLUDED
+
+
+#include "../pith/conftype.h"
+#include "../pith/string.h"
+
+
+/*
+ * Type definitions for folder and context structures.
+ */
+
+
+/*------------------------------
+ Used for displaying as well as
+ keeping track of folders.
+ ----*/
+typedef struct folder {
+ unsigned char name_len; /* name length */
+ unsigned isfolder:1; /* is it a folder? */
+ unsigned isdir:1; /* is it a directory? */
+ /* isdual is only set if the user has the separate
+ directory and folder display option set. Otherwise,
+ we can tell it's dual use because both isfolder
+ and isdir will be set. */
+ unsigned isdual:1; /* dual use */
+ unsigned haschildren:1; /* dir known to have children */
+ unsigned hasnochildren:1; /* known not to have children */
+ unsigned scanned:1; /* scanned by c-client */
+ unsigned selected:1; /* selected by user */
+ unsigned subscribed:1; /* selected by user */
+ unsigned unseen_valid:1; /* unseen count is valid */
+ unsigned long varhash; /* hash of var for incoming */
+ imapuid_t uidvalidity; /* only for #move folder */
+ imapuid_t uidnext; /* only for #move folder */
+ char *nickname; /* folder's short name */
+ unsigned long unseen; /* for monitoring unseen */
+ unsigned long new; /* for monitoring unseen */
+ unsigned long total; /* for monitoring unseen */
+ time_t last_unseen_update; /* see LUU_ constants below */
+ char name[1]; /* folder's name */
+} FOLDER_S;
+
+
+/* special values stored in last_unseen_update */
+#define LUU_INIT ((time_t) 0) /* before first check is done */
+#define LUU_NEVERCHK ((time_t) 1) /* don't check this folder */
+#define LUU_NOMORECHK ((time_t) 2) /* check failed so stop checking */
+
+/* this value is eligible for checking */
+#define LUU_YES(luu) (((luu) != LUU_NEVERCHK) && ((luu) != LUU_NOMORECHK))
+
+
+/*
+ * Folder List Structure - provides for two ways to access and manage
+ * folder list data. One as an array of pointers
+ * to folder structs or
+ */
+typedef struct folder_list {
+ unsigned used;
+ unsigned allocated;
+ FOLDER_S **folders; /* array of pointers to folder structs */
+} FLIST;
+
+
+/*
+ * digested form of context including pointer to the parent
+ * level of hierarchy...
+ */
+typedef struct folder_dir {
+ char *ref, /* collection location */
+ *desc, /* Optional description */
+ delim, /* dir/file delimiter */
+ status; /* folder data's status */
+ struct {
+ char *user,
+ *internal;
+ } view; /* file's within dir */
+
+ FLIST *folders; /* folder data */
+ struct folder_dir *prev; /* parent directory */
+} FDIR_S;
+
+
+typedef struct selected_s {
+ char *reference; /* location of selected */
+ STRLIST_S *folders; /* list of selected */
+ unsigned zoomed:1; /* zoomed state */
+ struct selected_s *sub;
+} SELECTED_S;
+
+
+/*------------------------------
+ Stucture to keep track of the various folder collections being
+ dealt with.
+ ----*/
+typedef struct context {
+ FDIR_S *dir; /* directory stack */
+ char *context, /* raw context string */
+ *server, /* server name/parms */
+ *nickname, /* user provided nickname */
+ *label, /* Description */
+ *comment, /* Optional comment */
+ last_folder[MAXFOLDER+1]; /* last folder used */
+ struct {
+ struct variable *v; /* variable where defined */
+ short i; /* index into config list */
+ } var;
+
+ unsigned short use, /* use flags (see below) */
+ d_line; /* display line for labels */
+ SELECTED_S selected;
+ struct context *next, /* next context struct */
+ *prev; /* previous context struct */
+} CONTEXT_S;
+
+/*
+ * Flags to indicate context (i.e., folder collection) use
+ */
+#define CNTXT_PSEUDO 0x0001 /* fake folder entry exists */
+#define CNTXT_INCMNG 0x0002 /* inbox collection */
+#define CNTXT_SAVEDFLT 0x0004 /* default save collection */
+#define CNTXT_PARTFIND 0x0008 /* partial find done */
+#define CNTXT_NOFIND 0x0010 /* no find done in context */
+#define CNTXT_FINDALL 0x0020 /* Do a find_all on context */
+#define CNTXT_NEWS 0x0040 /* News namespace collection */
+#define CNTXT_SUBDIR 0x0080 /* subdirectory within col'n */
+#define CNTXT_PRESRV 0x0100 /* preserve/restore selected */
+#define CNTXT_ZOOM 0x0200 /* context display narrowed */
+#define CNTXT_INHERIT 0x1000
+
+
+/*
+ * Macros to help users of above two structures...
+ */
+#define NEWS_TEST(c) ((c) && ((c)->use & CNTXT_NEWS))
+
+#define FOLDERS(c) ((c)->dir->folders)
+#define FLDR_NAME(X) ((X) ? ((X)->nickname ? (X)->nickname : (X)->name) :"")
+#define ALL_FOUND(X) (((X)->dir->status & CNTXT_NOFIND) == 0 && \
+ ((X)->dir->status & CNTXT_PARTFIND) == 0)
+
+
+/* exported protoypes */
+
+
+#endif /* PITH_FOLDERTYPE_INCLUDED */