Mail-Transport-Dbx

 view release on metacpan or  search on metacpan

Dbx.xs  view on Meta::CPAN

	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]);

Dbx.xs  view on Meta::CPAN


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 )