Skip to content
Snippets Groups Projects
Commit 94053a4f authored by rswindell's avatar rswindell
Browse files

Added msgbase header properties: when_written_zone_offset and

when_imported_zone_offset which are the UTC offset (minutes east of UTC)
for the respective time zone (read only).
Change LAZY_* macros to allow property flags to be specified.
parent 00c484e1
No related branches found
No related tags found
No related merge requests found
...@@ -643,64 +643,64 @@ js_get_msg_index(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r ...@@ -643,64 +643,64 @@ js_get_msg_index(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r
return(JS_TRUE); return(JS_TRUE);
} }
#define LAZY_INTEGER(PropName, PropValue) \ #define LAZY_INTEGER(PropName, PropValue, flags) \
if(name==NULL || strcmp(name, (PropName))==0) { \ if(name==NULL || strcmp(name, (PropName))==0) { \
JS_NewNumberValue(cx,(PropValue),&v); \ JS_NewNumberValue(cx,(PropValue),&v); \
JS_DefineProperty(cx, obj, (PropName), v, NULL,NULL,JSPROP_ENUMERATE); \ JS_DefineProperty(cx, obj, (PropName), v, NULL,NULL,flags); \
if(name) return(JS_TRUE); \ if(name) return(JS_TRUE); \
} }
#define LAZY_INTEGER_EXPAND(PropName, PropValue) \ #define LAZY_INTEGER_EXPAND(PropName, PropValue, flags) \
if(name==NULL || strcmp(name, (PropName))==0) { \ if(name==NULL || strcmp(name, (PropName))==0) { \
if(p->expand_fields || (PropValue)) { \ if(p->expand_fields || (PropValue)) { \
JS_NewNumberValue(cx,(PropValue),&v); \ JS_NewNumberValue(cx,(PropValue),&v); \
JS_DefineProperty(cx, obj, (PropName), v, NULL,NULL,JSPROP_ENUMERATE); \ JS_DefineProperty(cx, obj, (PropName), v, NULL,NULL,flags); \
if(name) return(JS_TRUE); \ if(name) return(JS_TRUE); \
} \ } \
else if(name) return(JS_TRUE); \ else if(name) return(JS_TRUE); \
} }
#define LAZY_INTEGER_COND(PropName, Condition, PropValue) \ #define LAZY_INTEGER_COND(PropName, Condition, PropValue, flags) \
if(name==NULL || strcmp(name, (PropName))==0) { \ if(name==NULL || strcmp(name, (PropName))==0) { \
if(Condition) { \ if(Condition) { \
JS_NewNumberValue(cx,(PropValue),&v); \ JS_NewNumberValue(cx,(PropValue),&v); \
JS_DefineProperty(cx, obj, (PropName), v, NULL,NULL,JSPROP_ENUMERATE); \ JS_DefineProperty(cx, obj, (PropName), v, NULL,NULL,flags); \
if(name) return(JS_TRUE); \ if(name) return(JS_TRUE); \
} \ } \
else if(name) return(JS_TRUE); \ else if(name) return(JS_TRUE); \
} }
#define LAZY_STRING(PropName, PropValue) \ #define LAZY_STRING(PropName, PropValue, flags) \
if(name==NULL || strcmp(name, (PropName))==0) { \ if(name==NULL || strcmp(name, (PropName))==0) { \
if((js_str=JS_NewStringCopyZ(cx, (PropValue)))!=NULL) { \ if((js_str=JS_NewStringCopyZ(cx, (PropValue)))!=NULL) { \
JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, JSPROP_ENUMERATE); \ JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, flags); \
if(name) return(JS_TRUE); \ if(name) return(JS_TRUE); \
} \ } \
else if(name) return(JS_TRUE); \ else if(name) return(JS_TRUE); \
} }
#define LAZY_STRING_TRUNCSP(PropName, PropValue) \ #define LAZY_STRING_TRUNCSP(PropName, PropValue, flags) \
if(name==NULL || strcmp(name, (PropName))==0) { \ if(name==NULL || strcmp(name, (PropName))==0) { \
if((js_str=JS_NewStringCopyZ(cx, truncsp(PropValue)))!=NULL) { \ if((js_str=JS_NewStringCopyZ(cx, truncsp(PropValue)))!=NULL) { \
JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, JSPROP_ENUMERATE); \ JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, flags); \
if(name) return(JS_TRUE); \ if(name) return(JS_TRUE); \
} \ } \
else if(name) return(JS_TRUE); \ else if(name) return(JS_TRUE); \
} }
#define LAZY_STRING_COND(PropName, Condition, PropValue) \ #define LAZY_STRING_COND(PropName, Condition, PropValue, flags) \
if(name==NULL || strcmp(name, (PropName))==0) { \ if(name==NULL || strcmp(name, (PropName))==0) { \
if((Condition) && (js_str=JS_NewStringCopyZ(cx, (PropValue)))!=NULL) { \ if((Condition) && (js_str=JS_NewStringCopyZ(cx, (PropValue)))!=NULL) { \
JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, JSPROP_ENUMERATE); \ JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, flags); \
if(name) return(JS_TRUE); \ if(name) return(JS_TRUE); \
} \ } \
else if(name) return(JS_TRUE); \ else if(name) return(JS_TRUE); \
} }
#define LAZY_STRING_TRUNCSP_NULL(PropName, PropValue) \ #define LAZY_STRING_TRUNCSP_NULL(PropName, PropValue, flags) \
if(name==NULL || strcmp(name, (PropName))==0) { \ if(name==NULL || strcmp(name, (PropName))==0) { \
if((PropValue) != NULL && (js_str=JS_NewStringCopyZ(cx, truncsp(PropValue)))!=NULL) { \ if((PropValue) != NULL && (js_str=JS_NewStringCopyZ(cx, truncsp(PropValue)))!=NULL) { \
JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, JSPROP_ENUMERATE); \ JS_DefineProperty(cx, obj, PropName, STRING_TO_JSVAL(js_str), NULL, NULL, flags); \
if(name) return(JS_TRUE); \ if(name) return(JS_TRUE); \
} \ } \
else if(name) return(JS_TRUE); \ else if(name) return(JS_TRUE); \
...@@ -733,57 +733,59 @@ static JSBool js_get_msg_header_resolve(JSContext *cx, JSObject *obj, jsval id) ...@@ -733,57 +733,59 @@ static JSBool js_get_msg_header_resolve(JSContext *cx, JSObject *obj, jsval id)
if((p->msg).hdr.number==0) /* No valid message number/id/offset specified */ if((p->msg).hdr.number==0) /* No valid message number/id/offset specified */
return(JS_TRUE); return(JS_TRUE);
LAZY_INTEGER("number", p->msg.hdr.number); LAZY_INTEGER("number", p->msg.hdr.number, JSPROP_ENUMERATE);
LAZY_INTEGER("offset", p->msg.offset); LAZY_INTEGER("offset", p->msg.offset, JSPROP_ENUMERATE, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP("to",p->msg.to); LAZY_STRING_TRUNCSP("to",p->msg.to, JSPROP_ENUMERATE, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP("from",p->msg.from); LAZY_STRING_TRUNCSP("from",p->msg.from, JSPROP_ENUMERATE, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP("subject",p->msg.subj); LAZY_STRING_TRUNCSP("subject",p->msg.subj, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("summary", p->msg.summary); LAZY_STRING_TRUNCSP_NULL("summary", p->msg.summary, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("to_ext", p->msg.to_ext); LAZY_STRING_TRUNCSP_NULL("to_ext", p->msg.to_ext, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("from_ext", p->msg.from_ext); LAZY_STRING_TRUNCSP_NULL("from_ext", p->msg.from_ext, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("from_org", p->msg.from_org); LAZY_STRING_TRUNCSP_NULL("from_org", p->msg.from_org, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("replyto", p->msg.replyto); LAZY_STRING_TRUNCSP_NULL("replyto", p->msg.replyto, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("replyto_ext", p->msg.replyto_ext); LAZY_STRING_TRUNCSP_NULL("replyto_ext", p->msg.replyto_ext, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("reverse_path", p->msg.reverse_path); LAZY_STRING_TRUNCSP_NULL("reverse_path", p->msg.reverse_path, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("forward_path", p->msg.forward_path); LAZY_STRING_TRUNCSP_NULL("forward_path", p->msg.forward_path, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("to_agent", p->msg.to_agent); LAZY_INTEGER_EXPAND("to_agent", p->msg.to_agent, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("from_agent", p->msg.from_agent); LAZY_INTEGER_EXPAND("from_agent", p->msg.from_agent, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("replyto_agent", p->msg.replyto_agent); LAZY_INTEGER_EXPAND("replyto_agent", p->msg.replyto_agent, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("to_net_type", p->msg.to_net.type); LAZY_INTEGER_EXPAND("to_net_type", p->msg.to_net.type, JSPROP_ENUMERATE);
LAZY_STRING_COND("to_net_addr", p->msg.to_net.type && p->msg.to_net.addr, smb_netaddr(&(p->msg).to_net)); LAZY_STRING_COND("to_net_addr", p->msg.to_net.type && p->msg.to_net.addr, smb_netaddr(&(p->msg).to_net), JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("from_net_type", p->msg.from_net.type); LAZY_INTEGER_EXPAND("from_net_type", p->msg.from_net.type, JSPROP_ENUMERATE);
/* exception here because p->msg.from_net is NULL */ /* exception here because p->msg.from_net is NULL */
LAZY_STRING_COND("from_net_addr", p->msg.from_net.type && p->msg.from_net.addr, smb_netaddr(&(p->msg).from_net)); LAZY_STRING_COND("from_net_addr", p->msg.from_net.type && p->msg.from_net.addr, smb_netaddr(&(p->msg).from_net), JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("replyto_net_type", p->msg.replyto_net.type); LAZY_INTEGER_EXPAND("replyto_net_type", p->msg.replyto_net.type, JSPROP_ENUMERATE);
LAZY_STRING_COND("replyto_net_addr", p->msg.replyto_net.type && p->msg.replyto_net.addr, smb_netaddr(&(p->msg).replyto_net)); LAZY_STRING_COND("replyto_net_addr", p->msg.replyto_net.type && p->msg.replyto_net.addr, smb_netaddr(&(p->msg).replyto_net), JSPROP_ENUMERATE);
LAZY_STRING_COND("from_ip_addr", (val=smb_get_hfield(&(p->msg),SENDERIPADDR,NULL))!=NULL, val); LAZY_STRING_COND("from_ip_addr", (val=smb_get_hfield(&(p->msg),SENDERIPADDR,NULL))!=NULL, val, JSPROP_ENUMERATE);
LAZY_STRING_COND("from_host_name", (val=smb_get_hfield(&(p->msg),SENDERHOSTNAME,NULL))!=NULL, val); LAZY_STRING_COND("from_host_name", (val=smb_get_hfield(&(p->msg),SENDERHOSTNAME,NULL))!=NULL, val, JSPROP_ENUMERATE);
LAZY_STRING_COND("from_protocol", (val=smb_get_hfield(&(p->msg),SENDERPROTOCOL,NULL))!=NULL, val); LAZY_STRING_COND("from_protocol", (val=smb_get_hfield(&(p->msg),SENDERPROTOCOL,NULL))!=NULL, val, JSPROP_ENUMERATE);
LAZY_STRING_COND("from_port", (val=smb_get_hfield(&(p->msg),SENDERPORT,NULL))!=NULL, val); LAZY_STRING_COND("from_port", (val=smb_get_hfield(&(p->msg),SENDERPORT,NULL))!=NULL, val, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("forwarded", p->msg.forwarded); LAZY_INTEGER_EXPAND("forwarded", p->msg.forwarded, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("expiration", p->msg.expiration); LAZY_INTEGER_EXPAND("expiration", p->msg.expiration, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("priority", p->msg.priority); LAZY_INTEGER_EXPAND("priority", p->msg.priority, JSPROP_ENUMERATE);
LAZY_INTEGER_EXPAND("cost", p->msg.cost); LAZY_INTEGER_EXPAND("cost", p->msg.cost, JSPROP_ENUMERATE);
/* Fixed length portion of msg header */ /* Fixed length portion of msg header */
LAZY_INTEGER("type", p->msg.hdr.type); LAZY_INTEGER("type", p->msg.hdr.type, JSPROP_ENUMERATE);
LAZY_INTEGER("version", p->msg.hdr.version); LAZY_INTEGER("version", p->msg.hdr.version, JSPROP_ENUMERATE);
LAZY_INTEGER("attr", p->msg.hdr.attr); LAZY_INTEGER("attr", p->msg.hdr.attr, JSPROP_ENUMERATE);
LAZY_INTEGER("auxattr", p->msg.hdr.auxattr); LAZY_INTEGER("auxattr", p->msg.hdr.auxattr, JSPROP_ENUMERATE);
LAZY_INTEGER("netattr", p->msg.hdr.netattr); LAZY_INTEGER("netattr", p->msg.hdr.netattr, JSPROP_ENUMERATE);
LAZY_INTEGER("when_written_time", p->msg.hdr.when_written.time); LAZY_INTEGER("when_written_time", p->msg.hdr.when_written.time, JSPROP_ENUMERATE);
LAZY_INTEGER("when_written_zone", p->msg.hdr.when_written.zone); LAZY_INTEGER("when_written_zone", p->msg.hdr.when_written.zone, JSPROP_ENUMERATE);
LAZY_INTEGER("when_imported_time", p->msg.hdr.when_imported.time); LAZY_INTEGER("when_written_zone_offset", smb_tzutc(p->msg.hdr.when_written.zone), JSPROP_ENUMERATE|JSPROP_READONLY);
LAZY_INTEGER("when_imported_zone", p->msg.hdr.when_imported.zone); LAZY_INTEGER("when_imported_time", p->msg.hdr.when_imported.time, JSPROP_ENUMERATE);
LAZY_INTEGER("thread_back", p->msg.hdr.thread_back); LAZY_INTEGER("when_imported_zone", p->msg.hdr.when_imported.zone, JSPROP_ENUMERATE);
LAZY_INTEGER("thread_orig", p->msg.hdr.thread_back); LAZY_INTEGER("when_imported_zone_offset", smb_tzutc(p->msg.hdr.when_imported.zone), JSPROP_ENUMERATE|JSPROP_READONLY);
LAZY_INTEGER("thread_next", p->msg.hdr.thread_next); LAZY_INTEGER("thread_back", p->msg.hdr.thread_back, JSPROP_ENUMERATE);
LAZY_INTEGER("thread_first", p->msg.hdr.thread_first); LAZY_INTEGER("thread_orig", p->msg.hdr.thread_back, JSPROP_ENUMERATE);
LAZY_INTEGER("delivery_attempts", p->msg.hdr.delivery_attempts); LAZY_INTEGER("thread_next", p->msg.hdr.thread_next, JSPROP_ENUMERATE);
LAZY_INTEGER("last_downloaded", p->msg.hdr.last_downloaded); LAZY_INTEGER("thread_first", p->msg.hdr.thread_first, JSPROP_ENUMERATE);
LAZY_INTEGER("times_downloaded", p->msg.hdr.times_downloaded); LAZY_INTEGER("delivery_attempts", p->msg.hdr.delivery_attempts, JSPROP_ENUMERATE);
LAZY_INTEGER("data_length", smb_getmsgdatlen(&(p->msg))); LAZY_INTEGER("last_downloaded", p->msg.hdr.last_downloaded, JSPROP_ENUMERATE);
LAZY_STRING("date", msgdate((p->msg).hdr.when_written,date)); LAZY_INTEGER("times_downloaded", p->msg.hdr.times_downloaded, JSPROP_ENUMERATE);
LAZY_INTEGER("data_length", smb_getmsgdatlen(&(p->msg)), JSPROP_ENUMERATE);
LAZY_STRING("date", msgdate((p->msg).hdr.when_written,date), JSPROP_ENUMERATE);
if(name==NULL || strcmp(name,"reply_id")==0) { if(name==NULL || strcmp(name,"reply_id")==0) {
/* Reply-ID (References) */ /* Reply-ID (References) */
...@@ -834,16 +836,16 @@ static JSBool js_get_msg_header_resolve(JSContext *cx, JSObject *obj, jsval id) ...@@ -834,16 +836,16 @@ static JSBool js_get_msg_header_resolve(JSContext *cx, JSObject *obj, jsval id)
} }
/* USENET Fields */ /* USENET Fields */
LAZY_STRING_TRUNCSP_NULL("path", p->msg.path); LAZY_STRING_TRUNCSP_NULL("path", p->msg.path, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("newsgroups", p->msg.newsgroups); LAZY_STRING_TRUNCSP_NULL("newsgroups", p->msg.newsgroups, JSPROP_ENUMERATE);
/* FidoNet Header Fields */ /* FidoNet Header Fields */
LAZY_STRING_TRUNCSP_NULL("ftn_msgid", p->msg.ftn_msgid); LAZY_STRING_TRUNCSP_NULL("ftn_msgid", p->msg.ftn_msgid, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("ftn_reply", p->msg.ftn_reply); LAZY_STRING_TRUNCSP_NULL("ftn_reply", p->msg.ftn_reply, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("ftn_pid", p->msg.ftn_pid); LAZY_STRING_TRUNCSP_NULL("ftn_pid", p->msg.ftn_pid, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("ftn_tid", p->msg.ftn_tid); LAZY_STRING_TRUNCSP_NULL("ftn_tid", p->msg.ftn_tid, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("ftn_area", p->msg.ftn_area); LAZY_STRING_TRUNCSP_NULL("ftn_area", p->msg.ftn_area, JSPROP_ENUMERATE);
LAZY_STRING_TRUNCSP_NULL("ftn_flags", p->msg.ftn_flags); LAZY_STRING_TRUNCSP_NULL("ftn_flags", p->msg.ftn_flags, JSPROP_ENUMERATE);
if(name==NULL || strcmp(name,"field_list")==0) { if(name==NULL || strcmp(name,"field_list")==0) {
/* Create hdr.field_list[] with repeating header fields (including type and data) */ /* Create hdr.field_list[] with repeating header fields (including type and data) */
...@@ -1800,9 +1802,11 @@ static jsSyncMethodSpec js_msgbase_functions[] = { ...@@ -1800,9 +1802,11 @@ static jsSyncMethodSpec js_msgbase_functions[] = {
"<tr><td align=top><tt>auxattr</tt><td>Auxillary attribute bitfield" "<tr><td align=top><tt>auxattr</tt><td>Auxillary attribute bitfield"
"<tr><td align=top><tt>netattr</tt><td>Network attribute bitfield" "<tr><td align=top><tt>netattr</tt><td>Network attribute bitfield"
"<tr><td align=top><tt>when_written_time</tt><td>Date/time (in time_t format)" "<tr><td align=top><tt>when_written_time</tt><td>Date/time (in time_t format)"
"<tr><td align=top><tt>when_written_zone</tt><td>Time zone" "<tr><td align=top><tt>when_written_zone</tt><td>Time zone (in SMB format)"
"<tr><td align=top><tt>when_written_zone_offset</tt><td>Time zone in minutes east of UTC"
"<tr><td align=top><tt>when_imported_time</tt><td>Date/time message was imported" "<tr><td align=top><tt>when_imported_time</tt><td>Date/time message was imported"
"<tr><td align=top><tt>when_imported_zone</tt><td>Time zone" "<tr><td align=top><tt>when_imported_zone</tt><td>Time zone (in SMB format)"
"<tr><td align=top><tt>when_imported_zone_offset</tt><td>Time zone in minutes east of UTC"
"<tr><td align=top><tt>thread_back</tt><td>Message number that this message is a reply to" "<tr><td align=top><tt>thread_back</tt><td>Message number that this message is a reply to"
"<tr><td align=top><tt>thread_next</tt><td>Message number of the next reply to the original message in this thread" "<tr><td align=top><tt>thread_next</tt><td>Message number of the next reply to the original message in this thread"
"<tr><td align=top><tt>thread_first</tt><td>Message number of the first reply to this message" "<tr><td align=top><tt>thread_first</tt><td>Message number of the first reply to this message"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment