Variant f_imap_fetch_overview(const Resource& imap_stream, const String& sequence, int64_t options /* = 0 */) { if (options && options != FT_UID) { Logger::Warning("invalid value for the options parameter"); return false; } ImapStream *obj = imap_stream.getTyped<ImapStream>(); Array ret(Array::Create()); long status = (options & FT_UID) ? mail_uid_sequence(obj->m_stream, (unsigned char *)sequence.data()) : mail_sequence(obj->m_stream, (unsigned char *)sequence.data()); if (status) { MESSAGECACHE *elt; ENVELOPE *env; for (unsigned long i = 1; i <= obj->m_stream->nmsgs; i++) { if (((elt = mail_elt(obj->m_stream, i))->sequence) && (env = mail_fetch_structure(obj->m_stream, i, NIL, NIL))) { Object myoverview(SystemLib::AllocStdClassObject()); OBJ_SET_ENTRY(myoverview, env, "subject", subject); if (env->from) { env->from->next = NULL; char *address = _php_rfc822_write_address(env->from); if (address) { myoverview.o_set("from", String(address, AttachString)); } } if (env->to) { env->to->next = NULL; char *address = _php_rfc822_write_address(env->to); if (address) { myoverview.o_set("to", String(address, AttachString)); } } OBJ_SET_ENTRY(myoverview, env, "date", date); OBJ_SET_ENTRY(myoverview, env, "message_id", message_id); OBJ_SET_ENTRY(myoverview, env, "references", references); OBJ_SET_ENTRY(myoverview, env, "in_reply_to", in_reply_to); myoverview.o_set("size", (int64_t)elt->rfc822_size); myoverview.o_set("uid", (int64_t)mail_uid(obj->m_stream, i)); myoverview.o_set("msgno", (int64_t)i); myoverview.o_set("recent", (int64_t)elt->recent); myoverview.o_set("flagged", (int64_t)elt->flagged); myoverview.o_set("answered", (int64_t)elt->answered); myoverview.o_set("deleted", (int64_t)elt->deleted); myoverview.o_set("seen", (int64_t)elt->seen); myoverview.o_set("draft", (int64_t)elt->draft); ret.append(myoverview); } } } return ret; }
void smime_info_screen(struct pine *ps) { long msgno; OtherMenu what; int offset = 0; BODY *body; ENVELOPE *env; HANDLE_S *handles = NULL; SCROLL_S scrollargs; STORE_S *store = NULL; ps->prev_screen = smime_info_screen; ps->next_screen = SCREEN_FUN_NULL; if(mn_total_cur(ps->msgmap) > 1L){ q_status_message(SM_ORDER | SM_DING, 0, 3, _("Can only view one message's information at a time.")); return; } /* else check for existence of smime bits */ msgno = mn_m2raw(ps->msgmap, mn_get_cur(ps->msgmap)); env = mail_fetch_structure(ps->mail_stream, msgno, &body, 0); if(!env || !body){ q_status_message(SM_ORDER, 0, 3, _("Can't fetch body of message.")); return; } what = FirstMenu; store = so_get(CharStar, NULL, EDIT_ACCESS); while(ps->next_screen == SCREEN_FUN_NULL){ ClearLine(1); so_truncate(store, 0); view_writec_init(store, &handles, HEADER_ROWS(ps), HEADER_ROWS(ps) + ps->ttyo->screen_rows - (HEADER_ROWS(ps) + HEADER_ROWS(ps))); gf_puts_uline("Overview", view_writec); gf_puts(NEWLINE, view_writec); format_smime_info(1, body, msgno, view_writec); gf_puts(NEWLINE, view_writec); format_smime_info(2, body, msgno, view_writec); view_writec_destroy(); ps->next_screen = SCREEN_FUN_NULL; memset(&scrollargs, 0, sizeof(SCROLL_S)); scrollargs.text.text = so_text(store); scrollargs.text.src = CharStar; scrollargs.text.desc = "S/MIME information"; scrollargs.body_valid = 1; if(offset){ /* resize? preserve paging! */ scrollargs.start.on = Offset; scrollargs.start.loc.offset = offset; offset = 0L; } scrollargs.bar.title = "S/MIME INFORMATION"; /* scrollargs.end_scroll = view_end_scroll; */ scrollargs.resize_exit = 1; scrollargs.help.text = NULL; scrollargs.help.title = "HELP FOR S/MIME INFORMATION VIEW"; scrollargs.keys.menu = &smime_info_keymenu; scrollargs.keys.what = what; setbitmap(scrollargs.keys.bitmap); if(scrolltool(&scrollargs) == MC_RESIZE) offset = scrollargs.start.loc.offset; } so_give(&store); }