Diffstat (limited to 'kmicromail/libetpan/generic/imapdriver_tools.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libetpan/generic/imapdriver_tools.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/kmicromail/libetpan/generic/imapdriver_tools.c b/kmicromail/libetpan/generic/imapdriver_tools.c index 3d737f3..de4008f 100644 --- a/kmicromail/libetpan/generic/imapdriver_tools.c +++ b/kmicromail/libetpan/generic/imapdriver_tools.c | |||
@@ -3014,335 +3014,359 @@ uid_list_to_env_list(clist * fetch_result, | |||
3014 | MAILIMAP_FLAG_DELETED, | 3014 | MAILIMAP_FLAG_DELETED, |
3015 | MAILIMAP_FLAG_SEEN, | 3015 | MAILIMAP_FLAG_SEEN, |
3016 | MAILIMAP_FLAG_DRAFT, | 3016 | MAILIMAP_FLAG_DRAFT, |
3017 | MAILIMAP_FLAG_KEYWORD, | 3017 | MAILIMAP_FLAG_KEYWORD, |
3018 | MAILIMAP_FLAG_EXTENSION | 3018 | MAILIMAP_FLAG_EXTENSION |
3019 | */ | 3019 | */ |
3020 | 3020 | ||
3021 | static int imap_flags_to_flags(struct mailimap_msg_att_dynamic * att_dyn, | 3021 | static int imap_flags_to_flags(struct mailimap_msg_att_dynamic * att_dyn, |
3022 | struct mail_flags ** result) | 3022 | struct mail_flags ** result) |
3023 | { | 3023 | { |
3024 | struct mail_flags * flags; | 3024 | struct mail_flags * flags; |
3025 | clist * flag_list; | 3025 | clist * flag_list; |
3026 | clistiter * cur; | 3026 | clistiter * cur; |
3027 | 3027 | ||
3028 | flags = mail_flags_new_empty(); | 3028 | flags = mail_flags_new_empty(); |
3029 | if (flags == NULL) | 3029 | if (flags == NULL) |
3030 | goto err; | 3030 | goto err; |
3031 | flags->fl_flags = 0; | 3031 | flags->fl_flags = 0; |
3032 | 3032 | ||
3033 | flag_list = att_dyn->att_list; | 3033 | flag_list = att_dyn->att_list; |
3034 | if (flag_list != NULL) { | 3034 | if (flag_list != NULL) { |
3035 | for(cur = clist_begin(flag_list) ; cur != NULL ; | 3035 | for(cur = clist_begin(flag_list) ; cur != NULL ; |
3036 | cur = clist_next(cur)) { | 3036 | cur = clist_next(cur)) { |
3037 | struct mailimap_flag_fetch * flag_fetch; | 3037 | struct mailimap_flag_fetch * flag_fetch; |
3038 | 3038 | ||
3039 | flag_fetch = clist_content(cur); | 3039 | flag_fetch = clist_content(cur); |
3040 | if (flag_fetch->fl_type == MAILIMAP_FLAG_FETCH_RECENT) | 3040 | if (flag_fetch->fl_type == MAILIMAP_FLAG_FETCH_RECENT) |
3041 | flags->fl_flags |= MAIL_FLAG_NEW; | 3041 | flags->fl_flags |= MAIL_FLAG_NEW; |
3042 | else { | 3042 | else { |
3043 | char * keyword; | 3043 | char * keyword; |
3044 | int r; | 3044 | int r; |
3045 | 3045 | ||
3046 | switch (flag_fetch->fl_flag->fl_type) { | 3046 | switch (flag_fetch->fl_flag->fl_type) { |
3047 | case MAILIMAP_FLAG_ANSWERED: | 3047 | case MAILIMAP_FLAG_ANSWERED: |
3048 | flags->fl_flags |= MAIL_FLAG_ANSWERED; | 3048 | flags->fl_flags |= MAIL_FLAG_ANSWERED; |
3049 | break; | 3049 | break; |
3050 | case MAILIMAP_FLAG_FLAGGED: | 3050 | case MAILIMAP_FLAG_FLAGGED: |
3051 | flags->fl_flags |= MAIL_FLAG_FLAGGED; | 3051 | flags->fl_flags |= MAIL_FLAG_FLAGGED; |
3052 | break; | 3052 | break; |
3053 | case MAILIMAP_FLAG_DELETED: | 3053 | case MAILIMAP_FLAG_DELETED: |
3054 | flags->fl_flags |= MAIL_FLAG_DELETED; | 3054 | flags->fl_flags |= MAIL_FLAG_DELETED; |
3055 | break; | 3055 | break; |
3056 | case MAILIMAP_FLAG_SEEN: | 3056 | case MAILIMAP_FLAG_SEEN: |
3057 | flags->fl_flags |= MAIL_FLAG_SEEN; | 3057 | flags->fl_flags |= MAIL_FLAG_SEEN; |
3058 | break; | 3058 | break; |
3059 | case MAILIMAP_FLAG_DRAFT: | 3059 | case MAILIMAP_FLAG_DRAFT: |
3060 | keyword = strdup("Draft"); | 3060 | keyword = strdup("Draft"); |
3061 | if (keyword == NULL) | 3061 | if (keyword == NULL) |
3062 | goto free; | 3062 | goto free; |
3063 | r = clist_append(flags->fl_extension, keyword); | 3063 | r = clist_append(flags->fl_extension, keyword); |
3064 | if (r < 0) { | 3064 | if (r < 0) { |
3065 | free(keyword); | 3065 | free(keyword); |
3066 | goto free; | 3066 | goto free; |
3067 | } | 3067 | } |
3068 | break; | 3068 | break; |
3069 | case MAILIMAP_FLAG_KEYWORD: | 3069 | case MAILIMAP_FLAG_KEYWORD: |
3070 | if (strcasecmp(flag_fetch->fl_flag->fl_data.fl_keyword, | 3070 | if (strcasecmp(flag_fetch->fl_flag->fl_data.fl_keyword, |
3071 | "$Forwarded") == 0) { | 3071 | "$Forwarded") == 0) { |
3072 | flags->fl_flags |= MAIL_FLAG_FORWARDED; | 3072 | flags->fl_flags |= MAIL_FLAG_FORWARDED; |
3073 | } | 3073 | } |
3074 | else { | 3074 | else { |
3075 | keyword = strdup(flag_fetch->fl_flag->fl_data.fl_keyword); | 3075 | keyword = strdup(flag_fetch->fl_flag->fl_data.fl_keyword); |
3076 | if (keyword == NULL) | 3076 | if (keyword == NULL) |
3077 | goto free; | 3077 | goto free; |
3078 | r = clist_append(flags->fl_extension, keyword); | 3078 | r = clist_append(flags->fl_extension, keyword); |
3079 | if (r < 0) { | 3079 | if (r < 0) { |
3080 | free(keyword); | 3080 | free(keyword); |
3081 | goto free; | 3081 | goto free; |
3082 | } | 3082 | } |
3083 | } | 3083 | } |
3084 | break; | 3084 | break; |
3085 | case MAILIMAP_FLAG_EXTENSION: | 3085 | case MAILIMAP_FLAG_EXTENSION: |
3086 | /* do nothing */ | 3086 | /* do nothing */ |
3087 | break; | 3087 | break; |
3088 | } | 3088 | } |
3089 | } | 3089 | } |
3090 | } | 3090 | } |
3091 | /* | 3091 | /* |
3092 | MAIL_FLAG_NEW was set for \Recent messages. | 3092 | MAIL_FLAG_NEW was set for \Recent messages. |
3093 | Correct this flag for \Seen messages by unsetting it. | 3093 | Correct this flag for \Seen messages by unsetting it. |
3094 | */ | 3094 | */ |
3095 | if ((flags->fl_flags & MAIL_FLAG_SEEN) && (flags->fl_flags & MAIL_FLAG_NEW)) { | 3095 | if ((flags->fl_flags & MAIL_FLAG_SEEN) && (flags->fl_flags & MAIL_FLAG_NEW)) { |
3096 | flags->fl_flags &= ~MAIL_FLAG_NEW; | 3096 | flags->fl_flags &= ~MAIL_FLAG_NEW; |
3097 | } | 3097 | } |
3098 | } | 3098 | } |
3099 | 3099 | ||
3100 | * result = flags; | 3100 | * result = flags; |
3101 | 3101 | ||
3102 | return MAIL_NO_ERROR; | 3102 | return MAIL_NO_ERROR; |
3103 | 3103 | ||
3104 | free: | 3104 | free: |
3105 | mail_flags_free(flags); | 3105 | mail_flags_free(flags); |
3106 | err: | 3106 | err: |
3107 | return MAIL_ERROR_MEMORY; | 3107 | return MAIL_ERROR_MEMORY; |
3108 | } | 3108 | } |
3109 | 3109 | ||
3110 | static int flags_to_imap_flags(struct mail_flags * flags, | 3110 | int imap_flags_to_imap_flags(struct mail_flags * flags, |
3111 | struct mailimap_store_att_flags ** result) | 3111 | struct mailimap_flag_list ** result) |
3112 | { | 3112 | { |
3113 | struct mailimap_flag * flag; | 3113 | struct mailimap_flag * flag; |
3114 | struct mailimap_flag_list * flag_list; | 3114 | struct mailimap_flag_list * flag_list; |
3115 | struct mailimap_store_att_flags * att_flags; | ||
3116 | int res; | 3115 | int res; |
3117 | clistiter * cur; | 3116 | clistiter * cur; |
3118 | int r; | 3117 | int r; |
3119 | 3118 | ||
3120 | flag_list = mailimap_flag_list_new_empty(); | 3119 | flag_list = mailimap_flag_list_new_empty(); |
3121 | if (flag_list == NULL) { | 3120 | if (flag_list == NULL) { |
3122 | res = MAIL_ERROR_MEMORY; | 3121 | res = MAIL_ERROR_MEMORY; |
3123 | goto err; | 3122 | goto err; |
3124 | } | 3123 | } |
3125 | 3124 | ||
3126 | if ((flags->fl_flags & MAIL_FLAG_DELETED) != 0) { | 3125 | if ((flags->fl_flags & MAIL_FLAG_DELETED) != 0) { |
3127 | flag = mailimap_flag_new_deleted(); | 3126 | flag = mailimap_flag_new_deleted(); |
3128 | if (flag == NULL) { | 3127 | if (flag == NULL) { |
3129 | res = MAIL_ERROR_MEMORY; | 3128 | res = MAIL_ERROR_MEMORY; |
3130 | goto free_flag_list; | 3129 | goto free_flag_list; |
3131 | } | 3130 | } |
3132 | r = mailimap_flag_list_add(flag_list, flag); | 3131 | r = mailimap_flag_list_add(flag_list, flag); |
3133 | if (r != MAILIMAP_NO_ERROR) { | 3132 | if (r != MAILIMAP_NO_ERROR) { |
3134 | mailimap_flag_free(flag); | 3133 | mailimap_flag_free(flag); |
3135 | res = MAIL_ERROR_MEMORY; | 3134 | res = MAIL_ERROR_MEMORY; |
3136 | goto free_flag_list; | 3135 | goto free_flag_list; |
3137 | } | 3136 | } |
3138 | } | 3137 | } |
3139 | 3138 | ||
3140 | if ((flags->fl_flags & MAIL_FLAG_FLAGGED) != 0) { | 3139 | if ((flags->fl_flags & MAIL_FLAG_FLAGGED) != 0) { |
3141 | flag = mailimap_flag_new_flagged(); | 3140 | flag = mailimap_flag_new_flagged(); |
3142 | if (flag == NULL) { | 3141 | if (flag == NULL) { |
3143 | res = MAIL_ERROR_MEMORY; | 3142 | res = MAIL_ERROR_MEMORY; |
3144 | goto free_flag_list; | 3143 | goto free_flag_list; |
3145 | } | 3144 | } |
3146 | r = mailimap_flag_list_add(flag_list, flag); | 3145 | r = mailimap_flag_list_add(flag_list, flag); |
3147 | if (r != MAILIMAP_NO_ERROR) { | 3146 | if (r != MAILIMAP_NO_ERROR) { |
3148 | mailimap_flag_free(flag); | 3147 | mailimap_flag_free(flag); |
3149 | res = MAIL_ERROR_MEMORY; | 3148 | res = MAIL_ERROR_MEMORY; |
3150 | goto free_flag_list; | 3149 | goto free_flag_list; |
3151 | } | 3150 | } |
3152 | } | 3151 | } |
3153 | 3152 | ||
3154 | if ((flags->fl_flags & MAIL_FLAG_SEEN) != 0) { | 3153 | if ((flags->fl_flags & MAIL_FLAG_SEEN) != 0) { |
3155 | flag = mailimap_flag_new_seen(); | 3154 | flag = mailimap_flag_new_seen(); |
3156 | if (flag == NULL) { | 3155 | if (flag == NULL) { |
3157 | res = MAIL_ERROR_MEMORY; | 3156 | res = MAIL_ERROR_MEMORY; |
3158 | goto free_flag_list; | 3157 | goto free_flag_list; |
3159 | } | 3158 | } |
3160 | r = mailimap_flag_list_add(flag_list, flag); | 3159 | r = mailimap_flag_list_add(flag_list, flag); |
3161 | if (r != MAILIMAP_NO_ERROR) { | 3160 | if (r != MAILIMAP_NO_ERROR) { |
3162 | res = MAIL_ERROR_MEMORY; | 3161 | res = MAIL_ERROR_MEMORY; |
3163 | goto free_flag_list; | 3162 | goto free_flag_list; |
3164 | } | 3163 | } |
3165 | } | 3164 | } |
3166 | 3165 | ||
3167 | if ((flags->fl_flags & MAIL_FLAG_ANSWERED) != 0) { | 3166 | if ((flags->fl_flags & MAIL_FLAG_ANSWERED) != 0) { |
3168 | flag = mailimap_flag_new_answered(); | 3167 | flag = mailimap_flag_new_answered(); |
3169 | if (flag == NULL) { | 3168 | if (flag == NULL) { |
3170 | res = MAIL_ERROR_MEMORY; | 3169 | res = MAIL_ERROR_MEMORY; |
3171 | goto free_flag_list; | 3170 | goto free_flag_list; |
3172 | } | 3171 | } |
3173 | r = mailimap_flag_list_add(flag_list, flag); | 3172 | r = mailimap_flag_list_add(flag_list, flag); |
3174 | if (r != MAILIMAP_NO_ERROR) { | 3173 | if (r != MAILIMAP_NO_ERROR) { |
3175 | mailimap_flag_free(flag); | 3174 | mailimap_flag_free(flag); |
3176 | res = MAIL_ERROR_MEMORY; | 3175 | res = MAIL_ERROR_MEMORY; |
3177 | goto free_flag_list; | 3176 | goto free_flag_list; |
3178 | } | 3177 | } |
3179 | } | 3178 | } |
3180 | 3179 | ||
3181 | if ((flags->fl_flags & MAIL_FLAG_FORWARDED) != 0) { | 3180 | if ((flags->fl_flags & MAIL_FLAG_FORWARDED) != 0) { |
3182 | char * flag_str; | 3181 | char * flag_str; |
3183 | 3182 | ||
3184 | flag_str = strdup("$Forwarded"); | 3183 | flag_str = strdup("$Forwarded"); |
3185 | if (flag_str == NULL) { | 3184 | if (flag_str == NULL) { |
3186 | res = MAIL_ERROR_MEMORY; | 3185 | res = MAIL_ERROR_MEMORY; |
3187 | goto free_flag_list; | 3186 | goto free_flag_list; |
3188 | } | 3187 | } |
3189 | flag = mailimap_flag_new_flag_keyword(flag_str); | 3188 | flag = mailimap_flag_new_flag_keyword(flag_str); |
3190 | if (flag == NULL) { | 3189 | if (flag == NULL) { |
3191 | free(flag_str); | 3190 | free(flag_str); |
3192 | res = MAIL_ERROR_MEMORY; | 3191 | res = MAIL_ERROR_MEMORY; |
3193 | goto free_flag_list; | 3192 | goto free_flag_list; |
3194 | } | 3193 | } |
3195 | r = mailimap_flag_list_add(flag_list, flag); | 3194 | r = mailimap_flag_list_add(flag_list, flag); |
3196 | if (r != MAILIMAP_NO_ERROR) { | 3195 | if (r != MAILIMAP_NO_ERROR) { |
3197 | mailimap_flag_free(flag); | 3196 | mailimap_flag_free(flag); |
3198 | res = MAIL_ERROR_MEMORY; | 3197 | res = MAIL_ERROR_MEMORY; |
3199 | goto free_flag_list; | 3198 | goto free_flag_list; |
3200 | } | 3199 | } |
3201 | } | 3200 | } |
3202 | 3201 | ||
3203 | for(cur = clist_begin(flags->fl_extension) ; cur != NULL ; | 3202 | for(cur = clist_begin(flags->fl_extension) ; cur != NULL ; |
3204 | cur = clist_next(cur)) { | 3203 | cur = clist_next(cur)) { |
3205 | char * flag_str; | 3204 | char * flag_str; |
3206 | 3205 | ||
3207 | flag_str = clist_content(cur); | 3206 | flag_str = clist_content(cur); |
3208 | 3207 | ||
3209 | if (strcasecmp(flag_str, "Draft") == 0) { | 3208 | if (strcasecmp(flag_str, "Draft") == 0) { |
3210 | flag = mailimap_flag_new_draft(); | 3209 | flag = mailimap_flag_new_draft(); |
3211 | if (flag == NULL) { | 3210 | if (flag == NULL) { |
3212 | res = MAIL_ERROR_MEMORY; | 3211 | res = MAIL_ERROR_MEMORY; |
3213 | goto free_flag_list; | 3212 | goto free_flag_list; |
3214 | } | 3213 | } |
3215 | r = mailimap_flag_list_add(flag_list, flag); | 3214 | r = mailimap_flag_list_add(flag_list, flag); |
3216 | if (r != MAILIMAP_NO_ERROR) { | 3215 | if (r != MAILIMAP_NO_ERROR) { |
3217 | mailimap_flag_free(flag); | 3216 | mailimap_flag_free(flag); |
3218 | res = MAIL_ERROR_MEMORY; | 3217 | res = MAIL_ERROR_MEMORY; |
3219 | goto free_flag_list; | 3218 | goto free_flag_list; |
3220 | } | 3219 | } |
3221 | } | 3220 | } |
3222 | else { | 3221 | else { |
3223 | flag_str = strdup(flag_str); | 3222 | flag_str = strdup(flag_str); |
3224 | if (flag_str == NULL) { | 3223 | if (flag_str == NULL) { |
3225 | res = MAIL_ERROR_MEMORY; | 3224 | res = MAIL_ERROR_MEMORY; |
3226 | goto free_flag_list; | 3225 | goto free_flag_list; |
3227 | } | 3226 | } |
3228 | flag = mailimap_flag_new_flag_keyword(flag_str); | 3227 | flag = mailimap_flag_new_flag_keyword(flag_str); |
3229 | if (flag == NULL) { | 3228 | if (flag == NULL) { |
3230 | free(flag_str); | 3229 | free(flag_str); |
3231 | res = MAIL_ERROR_MEMORY; | 3230 | res = MAIL_ERROR_MEMORY; |
3232 | goto free_flag_list; | 3231 | goto free_flag_list; |
3233 | } | 3232 | } |
3234 | r = mailimap_flag_list_add(flag_list, flag); | 3233 | r = mailimap_flag_list_add(flag_list, flag); |
3235 | if (r != MAILIMAP_NO_ERROR) { | 3234 | if (r != MAILIMAP_NO_ERROR) { |
3236 | mailimap_flag_free(flag); | 3235 | mailimap_flag_free(flag); |
3237 | res = MAIL_ERROR_MEMORY; | 3236 | res = MAIL_ERROR_MEMORY; |
3238 | goto free_flag_list; | 3237 | goto free_flag_list; |
3239 | } | 3238 | } |
3240 | } | 3239 | } |
3241 | } | 3240 | } |
3241 | |||
3242 | * result = flag_list; | ||
3243 | |||
3244 | return MAIL_NO_ERROR; | ||
3245 | |||
3246 | free_flag_list: | ||
3247 | mailimap_flag_list_free(flag_list); | ||
3248 | err: | ||
3249 | return res; | ||
3250 | } | ||
3242 | 3251 | ||
3252 | static int flags_to_imap_flags(struct mail_flags * flags, | ||
3253 | struct mailimap_store_att_flags ** result) | ||
3254 | { | ||
3255 | struct mailimap_flag_list * flag_list; | ||
3256 | struct mailimap_store_att_flags * att_flags; | ||
3257 | int res; | ||
3258 | int r; | ||
3259 | |||
3260 | r = imap_flags_to_imap_flags(flags, | ||
3261 | &flag_list); | ||
3262 | if (r != MAIL_NO_ERROR) { | ||
3263 | res = r; | ||
3264 | goto err; | ||
3265 | } | ||
3266 | |||
3243 | att_flags = mailimap_store_att_flags_new_set_flags_silent(flag_list); | 3267 | att_flags = mailimap_store_att_flags_new_set_flags_silent(flag_list); |
3244 | if (att_flags == NULL) { | 3268 | if (att_flags == NULL) { |
3245 | res = MAIL_ERROR_MEMORY; | 3269 | res = MAIL_ERROR_MEMORY; |
3246 | goto free_flag_list; | 3270 | goto free_flag_list; |
3247 | } | 3271 | } |
3248 | 3272 | ||
3249 | * result = att_flags; | 3273 | * result = att_flags; |
3250 | 3274 | ||
3251 | return MAIL_NO_ERROR; | 3275 | return MAIL_NO_ERROR; |
3252 | 3276 | ||
3253 | free_flag_list: | 3277 | free_flag_list: |
3254 | mailimap_flag_list_free(flag_list); | 3278 | mailimap_flag_list_free(flag_list); |
3255 | err: | 3279 | err: |
3256 | return res; | 3280 | return res; |
3257 | } | 3281 | } |
3258 | 3282 | ||
3259 | 3283 | ||
3260 | static int | 3284 | static int |
3261 | imap_fetch_result_to_flags(clist * fetch_result, uint32_t index, | 3285 | imap_fetch_result_to_flags(clist * fetch_result, uint32_t index, |
3262 | struct mail_flags ** result) | 3286 | struct mail_flags ** result) |
3263 | { | 3287 | { |
3264 | clistiter * cur; | 3288 | clistiter * cur; |
3265 | int r; | 3289 | int r; |
3266 | 3290 | ||
3267 | for(cur = clist_begin(fetch_result) ; cur != NULL ; | 3291 | for(cur = clist_begin(fetch_result) ; cur != NULL ; |
3268 | cur = clist_next(cur)) { | 3292 | cur = clist_next(cur)) { |
3269 | struct mailimap_msg_att * msg_att; | 3293 | struct mailimap_msg_att * msg_att; |
3270 | clistiter * item_cur; | 3294 | clistiter * item_cur; |
3271 | uint32_t uid; | 3295 | uint32_t uid; |
3272 | struct mailimap_msg_att_dynamic * att_dyn; | 3296 | struct mailimap_msg_att_dynamic * att_dyn; |
3273 | 3297 | ||
3274 | msg_att = clist_content(cur); | 3298 | msg_att = clist_content(cur); |
3275 | 3299 | ||
3276 | uid = 0; | 3300 | uid = 0; |
3277 | att_dyn = NULL; | 3301 | att_dyn = NULL; |
3278 | 3302 | ||
3279 | for(item_cur = clist_begin(msg_att->att_list) ; item_cur != NULL ; | 3303 | for(item_cur = clist_begin(msg_att->att_list) ; item_cur != NULL ; |
3280 | item_cur = clist_next(item_cur)) { | 3304 | item_cur = clist_next(item_cur)) { |
3281 | struct mailimap_msg_att_item * item; | 3305 | struct mailimap_msg_att_item * item; |
3282 | 3306 | ||
3283 | item = clist_content(item_cur); | 3307 | item = clist_content(item_cur); |
3284 | 3308 | ||
3285 | if (item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { | 3309 | if (item->att_type == MAILIMAP_MSG_ATT_ITEM_STATIC) { |
3286 | switch (item->att_data.att_static->att_type) { | 3310 | switch (item->att_data.att_static->att_type) { |
3287 | case MAILIMAP_MSG_ATT_UID: | 3311 | case MAILIMAP_MSG_ATT_UID: |
3288 | uid = item->att_data.att_static->att_data.att_uid; | 3312 | uid = item->att_data.att_static->att_data.att_uid; |
3289 | break; | 3313 | break; |
3290 | } | 3314 | } |
3291 | } | 3315 | } |
3292 | else if (item->att_type == MAILIMAP_MSG_ATT_ITEM_DYNAMIC) { | 3316 | else if (item->att_type == MAILIMAP_MSG_ATT_ITEM_DYNAMIC) { |
3293 | if (att_dyn == NULL) { | 3317 | if (att_dyn == NULL) { |
3294 | att_dyn = item->att_data.att_dyn; | 3318 | att_dyn = item->att_data.att_dyn; |
3295 | } | 3319 | } |
3296 | } | 3320 | } |
3297 | } | 3321 | } |
3298 | 3322 | ||
3299 | if (uid != 0) { | 3323 | if (uid != 0) { |
3300 | if (uid == index) { | 3324 | if (uid == index) { |
3301 | struct mail_flags * flags; | 3325 | struct mail_flags * flags; |
3302 | 3326 | ||
3303 | if (att_dyn != NULL) { | 3327 | if (att_dyn != NULL) { |
3304 | r = imap_flags_to_flags(att_dyn, &flags); | 3328 | r = imap_flags_to_flags(att_dyn, &flags); |
3305 | 3329 | ||
3306 | if (r == MAIL_NO_ERROR) { | 3330 | if (r == MAIL_NO_ERROR) { |
3307 | * result = flags; | 3331 | * result = flags; |
3308 | return MAIL_NO_ERROR; | 3332 | return MAIL_NO_ERROR; |
3309 | } | 3333 | } |
3310 | } | 3334 | } |
3311 | } | 3335 | } |
3312 | } | 3336 | } |
3313 | } | 3337 | } |
3314 | 3338 | ||
3315 | return MAIL_ERROR_MSG_NOT_FOUND; | 3339 | return MAIL_ERROR_MSG_NOT_FOUND; |
3316 | } | 3340 | } |
3317 | 3341 | ||
3318 | 3342 | ||
3319 | int imap_fetch_flags(mailimap * imap, | 3343 | int imap_fetch_flags(mailimap * imap, |
3320 | uint32_t index, struct mail_flags ** result) | 3344 | uint32_t index, struct mail_flags ** result) |
3321 | { | 3345 | { |
3322 | struct mailimap_fetch_att * fetch_att; | 3346 | struct mailimap_fetch_att * fetch_att; |
3323 | struct mailimap_fetch_type * fetch_type; | 3347 | struct mailimap_fetch_type * fetch_type; |
3324 | struct mailimap_set * set; | 3348 | struct mailimap_set * set; |
3325 | int r; | 3349 | int r; |
3326 | int res; | 3350 | int res; |
3327 | clist * fetch_result; | 3351 | clist * fetch_result; |
3328 | struct mail_flags * flags; | 3352 | struct mail_flags * flags; |
3329 | 3353 | ||
3330 | fetch_type = mailimap_fetch_type_new_fetch_att_list_empty(); | 3354 | fetch_type = mailimap_fetch_type_new_fetch_att_list_empty(); |
3331 | if (fetch_type == NULL) { | 3355 | if (fetch_type == NULL) { |
3332 | res = MAIL_ERROR_MEMORY; | 3356 | res = MAIL_ERROR_MEMORY; |
3333 | goto err; | 3357 | goto err; |
3334 | } | 3358 | } |
3335 | 3359 | ||
3336 | fetch_att = mailimap_fetch_att_new_uid(); | 3360 | fetch_att = mailimap_fetch_att_new_uid(); |
3337 | if (fetch_att == NULL) { | 3361 | if (fetch_att == NULL) { |
3338 | res = MAIL_ERROR_MEMORY; | 3362 | res = MAIL_ERROR_MEMORY; |
3339 | goto free_fetch_type; | 3363 | goto free_fetch_type; |
3340 | } | 3364 | } |
3341 | 3365 | ||
3342 | r = mailimap_fetch_type_new_fetch_att_list_add(fetch_type, fetch_att); | 3366 | r = mailimap_fetch_type_new_fetch_att_list_add(fetch_type, fetch_att); |
3343 | if (r != MAILIMAP_NO_ERROR) { | 3367 | if (r != MAILIMAP_NO_ERROR) { |
3344 | mailimap_fetch_att_free(fetch_att); | 3368 | mailimap_fetch_att_free(fetch_att); |
3345 | res = MAIL_ERROR_MEMORY; | 3369 | res = MAIL_ERROR_MEMORY; |
3346 | goto free_fetch_type; | 3370 | goto free_fetch_type; |
3347 | } | 3371 | } |
3348 | 3372 | ||