Mail-Transport-Dbx
view release on metacpan or search on metacpan
SvREFCNT_inc(self);
if (dbx->dbx->type == DBX_TYPE_EMAIL) {
DBX_EMAIL *ret;
New(0, ret, 1, DBX_EMAIL);
ST(0) = sv_newmortal();
ret->dbx = self;
ret->email = (DBXEMAIL*) ret_type;
ret->header = NULL;
ret->body = NULL;
sv_setref_pv(ST(0), "Mail::Transport::Dbx::Email", (void*)ret);
XSRETURN(1);
}
else if (dbx->dbx->type == DBX_TYPE_FOLDER) {
if (!dbx->subfolders) {
int id;
SV *sv;
Newz(0, dbx->subfolders, dbx->dbx->indexCount, SV*);
/* New(0, dbx->indexid, dbx->indexsize = dbx->dbx->indexCount, int); */
id = get_folder(self, index, &dbx->subfolders[index]);
/*
if (id >= dbx->indexsize) {
dbx->indexsize = id+1;
Renew(dbx->indexid, dbx->indexsize, int);
}
dbx->indexid[id] = index;
*/
ST(0) = sv_mortalcopy(dbx->subfolders[index]);
} else
ST(0) = sv_mortalcopy(dbx->subfolders[index]);
//SvREFCNT_inc(self);
XSRETURN(1);
}
int
error (...)
CODE:
RETVAL = dbx_errno;
OUTPUT:
RETVAL
char*
errstr (...)
CODE:
RETVAL = errstr();
OUTPUT:
RETVAL
int
msgcount (self)
DBX_BOX *self;
CODE:
RETVAL = self->dbx->indexCount;
OUTPUT:
RETVAL
void
emails (object)
SV *object;
PREINIT:
DBX_BOX *self;
PPCODE:
self = (DBX_BOX*)SvIV((SV*)SvRV(object));
if (GIMME_V == G_SCALAR) {
if (self->dbx->type == DBX_TYPE_EMAIL)
XSRETURN_YES;
else
XSRETURN_NO;
}
if (GIMME_V == G_ARRAY) {
int i;
if (self->dbx->type != DBX_TYPE_EMAIL || self->dbx->indexCount == 0)
XSRETURN_EMPTY;
for (i = 0; i < self->dbx->indexCount; i++) {
SV *o = sv_newmortal();
void *item = dbx_get(self->dbx, i, 0);
DBX_EMAIL *ret = (DBX_EMAIL*) safemalloc(sizeof(DBX_EMAIL));
ret->dbx = object;
ret->email = (DBXEMAIL*) item;
ret->header = NULL;
ret->body = NULL;
SvREFCNT_inc(object);
o = sv_setref_pv(o, "Mail::Transport::Dbx::Email", (void*)ret);
XPUSHs(o);
}
XSRETURN(i);
}
void
subfolders (object)
SV *object;
PREINIT:
DBX_BOX *self;
PPCODE:
self = (DBX_BOX*)SvIV((SV*)SvRV(object));
if (GIMME_V == G_SCALAR) {
if (self->dbx->type == DBX_TYPE_FOLDER)
XSRETURN_YES;
else
XSRETURN_NO;
}
if (GIMME_V == G_ARRAY) {
int i;
if (self->dbx->type != DBX_TYPE_FOLDER || self->dbx->indexCount == 0)
XSRETURN_EMPTY;
if (self->subfolders) {
EXTEND(SP, self->dbx->indexCount);
for (i = 0; i < self->dbx->indexCount; i++) {
if (!self->subfolders[i]) {
int id = get_folder(object, i, &self->subfolders[i]);
/*
if (id >= self->indexsize) {
self->indexsize = id+1;
Renew(self->indexid, self->indexsize, int);
}
self->indexid[id] = i;
*/
}
ST(i) = sv_mortalcopy(self->subfolders[i]);
SvREFCNT_inc(object);
}
XSRETURN(self->dbx->indexCount);
} else {
EXTEND(SP, self->dbx->indexCount);
New(0, self->subfolders, self->dbx->indexCount, SV*);
/* New(0, self->indexid, self->indexsize = self->dbx->indexCount, int); */
for (i = 0; i < self->dbx->indexCount; i++) {
int id = get_folder(object, i, &self->subfolders[i]);
/*
if (id >= self->indexsize) {
self->indexsize = id+1;
Renew(self->indexid, self->indexsize, int);
}
self->indexid[id] = i;
*/
PUSHs(sv_mortalcopy(self->subfolders[i]));
SvREFCNT_inc(object);
}
XSRETURN(self->dbx->indexCount);
}
}
void
DESTROY (self)
DBX_BOX *self;
PREINIT:
register int i;
CODE:
IN_DBX_DESTROY = 1;
if (self->subfolders) {
for (i = 0; i < self->dbx->indexCount; i++) {
SvREFCNT_dec(self->subfolders[i]);
char *
sender_name (self)
DBX_EMAIL *self;
CODE:
RETVAL = self->email->sender_name;
OUTPUT:
RETVAL
char *
sender_address (self)
DBX_EMAIL *self;
CODE:
RETVAL = self->email->sender_address;
OUTPUT:
RETVAL
char *
recip_name (self)
DBX_EMAIL *self;
CODE:
RETVAL = self->email->recip_name;
OUTPUT:
RETVAL
char *
recip_address (self)
DBX_EMAIL *self;
CODE:
RETVAL = self->email->recip_address;
OUTPUT:
RETVAL
char *
oe_account_name (self)
DBX_EMAIL *self;
CODE:
RETVAL = self->email->oe_account_name;
OUTPUT:
RETVAL
char *
oe_account_num (self)
DBX_EMAIL *self;
CODE:
RETVAL = self->email->oe_account_num;
OUTPUT:
RETVAL
char *
fetched_server (self)
DBX_EMAIL *self;
CODE:
RETVAL = self->email->fetched_server;
OUTPUT:
RETVAL
void
rcvd_localtime (self)
DBX_EMAIL *self;
PPCODE:
XSRETURN(datify(aTHX_ &(self->email->date), 0));
void
rcvd_gmtime (self)
DBX_EMAIL *self;
PPCODE:
XSRETURN(datify(aTHX_ &(self->email->date), 1));
char *
date_received (self, ...)
DBX_EMAIL *self;
PREINIT:
char *format = "%a %b %e %H:%M:%S %Y";
STRLEN n_a;
size_t max_len = 25;
time_t time;
struct tm *tstruct;
char *string;
CODE:
if (items > 1)
format = (char *) SvPV(ST(1), n_a);
if (items > 2)
max_len = (int) SvIV(ST(2));
time = FileTimeToUnixTime(&(self->email->date), NULL);
if (items > 3 && SvTRUE(ST(3)))
tstruct = gmtime(&time);
else
tstruct = localtime(&time);
string = (char*) safemalloc(sizeof(char) * max_len);
strftime(string, max_len, format, tstruct);
RETVAL = string;
OUTPUT:
RETVAL
int
is_seen (self)
DBX_EMAIL *self;
CODE:
RETVAL = (self->email->flag & DBX_EMAIL_FLAG_ISSEEN) > 0 ? 1 : 0;
OUTPUT:
RETVAL
int
is_email (self)
DBX_EMAIL *self;
CODE:
RETVAL = 1;
OUTPUT:
RETVAL
int
is_folder (self)
DBX_EMAIL *self;
CODE:
RETVAL = 0;
OUTPUT:
RETVAL
void
DESTROY (self)
DBX_EMAIL *self;
CODE:
if (self->header)
( run in 0.563 second using v1.01-cache-2.11-cpan-5511b514fd6 )