731 |
return NULL; |
return NULL; |
732 |
} |
} |
733 |
|
|
734 |
|
|
735 |
struct |
struct |
736 |
{ |
{ |
737 |
char *name; |
char *name; |
741 |
{ "\\Flagged", MU_ATTRIBUTE_FLAGGED }, |
{ "\\Flagged", MU_ATTRIBUTE_FLAGGED }, |
742 |
{ "\\Deleted", MU_ATTRIBUTE_DELETED }, |
{ "\\Deleted", MU_ATTRIBUTE_DELETED }, |
743 |
{ "\\Draft", MU_ATTRIBUTE_DRAFT }, |
{ "\\Draft", MU_ATTRIBUTE_DRAFT }, |
744 |
{ "\\Seen", MU_ATTRIBUTE_SEEN }, |
{ "\\Seen", MU_ATTRIBUTE_READ }, |
745 |
{ "\\Recent", MU_ATTRIBUTE_RECENT }, |
{ "\\Recent", MU_ATTRIBUTE_RECENT }, |
746 |
}; |
}; |
747 |
|
|
762 |
return 1; |
return 1; |
763 |
} |
} |
764 |
|
|
765 |
|
/* Note: currently unused. Not needed, possibly? */ |
766 |
int |
int |
767 |
util_type_to_attribute (int type, char **attr_str) |
util_type_to_attribute (int type, char **attr_str) |
768 |
{ |
{ |
769 |
*attr_str = NULL; |
char *attr_list[NATTR]; |
770 |
if (type == MU_ATTRIBUTE_RECENT) |
int nattr = 0; |
771 |
|
int i; |
772 |
|
size_t len = 0; |
773 |
|
|
774 |
|
if (MU_ATTRIBUTE_IS_UNSEEN(type)) |
775 |
*attr_str = strdup("\\Recent"); |
*attr_str = strdup("\\Recent"); |
776 |
else |
else |
777 |
|
*attr_str = NULL; |
778 |
|
|
779 |
|
for (i = 0; i < _imap4d_nattr; i++) |
780 |
|
if (type & _imap4d_attrlist[i].flag) |
781 |
|
{ |
782 |
|
attr_list[nattr++] = _imap4d_attrlist[i].name; |
783 |
|
len += 1 + strlen(_imap4d_attrlist[i].name); |
784 |
|
} |
785 |
|
|
786 |
|
*attr_str = malloc(len+1); |
787 |
|
(*attr_str)[0] = 0; |
788 |
|
if (*attr_str) |
789 |
{ |
{ |
790 |
char *attr_list[NATTR]; |
for (i = 0; i < nattr; i++) |
|
int nattr = 0; |
|
|
int i; |
|
|
size_t len = 0; |
|
|
|
|
|
for (i = 0; i < _imap4d_nattr; i++) |
|
|
if (type & _imap4d_attrlist[i].flag) |
|
|
{ |
|
|
attr_list[nattr++] = _imap4d_attrlist[i].name; |
|
|
len += 1 + strlen(_imap4d_attrlist[i].name); |
|
|
} |
|
|
|
|
|
*attr_str = malloc(len+1); |
|
|
(*attr_str)[0] = 0; |
|
|
if (*attr_str) |
|
791 |
{ |
{ |
792 |
for (i = 0; i < nattr; i++) |
strcat(*attr_str, attr_list[i]); |
793 |
{ |
if (i != nattr-1) |
794 |
strcat(*attr_str, attr_list[i]); |
strcat(*attr_str, " "); |
|
if (i != nattr-1) |
|
|
strcat(*attr_str, " "); |
|
|
} |
|
795 |
} |
} |
796 |
} |
} |
797 |
|
|
798 |
if (!*attr_str) |
if (!*attr_str) |
799 |
imap4d_bye (ERR_NO_MEM); |
imap4d_bye (ERR_NO_MEM); |
800 |
return 0; |
return 0; |
801 |
} |
} |
802 |
|
|
803 |
|
void |
804 |
|
util_print_flags(attribute_t attr) |
805 |
|
{ |
806 |
|
int i; |
807 |
|
int flags = 0; |
808 |
|
int space = 0; |
809 |
|
|
810 |
|
attribute_get_flags (attr, &flags); |
811 |
|
for (i = 0; i < _imap4d_nattr; i++) |
812 |
|
if (flags & _imap4d_attrlist[i].flag) |
813 |
|
{ |
814 |
|
if (space) |
815 |
|
util_send (" "); |
816 |
|
else |
817 |
|
space = 1; |
818 |
|
util_send (_imap4d_attrlist[i].name); |
819 |
|
} |
820 |
|
|
821 |
|
if (MU_ATTRIBUTE_IS_UNSEEN(flags)) |
822 |
|
{ |
823 |
|
if (space) |
824 |
|
util_send (" "); |
825 |
|
util_send ("\\Recent"); |
826 |
|
} |
827 |
|
} |
828 |
|
|
829 |
|
int |
830 |
|
util_attribute_matches_flag (attribute_t attr, const char *item) |
831 |
|
{ |
832 |
|
int flags = 0, mask = 0; |
833 |
|
|
834 |
|
attribute_get_flags (attr, &flags); |
835 |
|
util_attribute_to_type (item, &mask); |
836 |
|
if (mask == MU_ATTRIBUTE_RECENT) |
837 |
|
return MU_ATTRIBUTE_IS_UNSEEN (flags); |
838 |
|
|
839 |
|
return flags & mask; |
840 |
|
} |
841 |
|
|
842 |
|
|
843 |
int |
int |
844 |
util_parse_attributes(char *items, char **save, int *flags) |
util_parse_attributes(char *items, char **save, int *flags) |
845 |
{ |
{ |