Skip to content
Snippets Groups Projects
Commit 9f772107 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Add JS properties to assist with web-access to filebase

file_area.web_vpath_prefix
file-metadata-object (return value of FileBase.get()).vpath
parent 3e5326e0
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #2581 passed
...@@ -563,6 +563,16 @@ char* getfilepath(scfg_t* cfg, file_t* f, char* path) ...@@ -563,6 +563,16 @@ char* getfilepath(scfg_t* cfg, file_t* f, char* path)
return path; return path;
} }
char* getfilevpath(scfg_t* cfg, file_t* f, char* path)
{
const char* name = f->name == NULL ? f->file_idx.name : f->name;
if(f->dir >= cfg->total_dirs)
return "";
safe_snprintf(path, MAX_PATH, "%s/%s"
,cfg->lib[cfg->dir[f->dir]->lib]->sname, cfg->dir[f->dir]->code_suffix, name);
return path;
}
off_t getfilesize(scfg_t* cfg, file_t* f) off_t getfilesize(scfg_t* cfg, file_t* f)
{ {
char fpath[MAX_PATH + 1]; char fpath[MAX_PATH + 1];
......
...@@ -49,6 +49,7 @@ DLLEXPORT str_list_t loadfilenames(smb_t*, const char* filespec, time_t t, enum ...@@ -49,6 +49,7 @@ DLLEXPORT str_list_t loadfilenames(smb_t*, const char* filespec, time_t t, enum
DLLEXPORT void sortfilenames(str_list_t, size_t count, enum file_sort); DLLEXPORT void sortfilenames(str_list_t, size_t count, enum file_sort);
DLLEXPORT bool updatefile(scfg_t*, file_t*); DLLEXPORT bool updatefile(scfg_t*, file_t*);
DLLEXPORT char* getfilepath(scfg_t*, file_t*, char* path); DLLEXPORT char* getfilepath(scfg_t*, file_t*, char* path);
DLLEXPORT char* getfilevpath(scfg_t*, file_t*, char* path);
DLLEXPORT off_t getfilesize(scfg_t*, file_t*); DLLEXPORT off_t getfilesize(scfg_t*, file_t*);
DLLEXPORT time_t getfiletime(scfg_t*, file_t*); DLLEXPORT time_t getfiletime(scfg_t*, file_t*);
DLLEXPORT ulong gettimetodl(scfg_t*, file_t*, uint rate_cps); DLLEXPORT ulong gettimetodl(scfg_t*, file_t*, uint rate_cps);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
static char* file_area_prop_desc[] = { static char* file_area_prop_desc[] = {
"minimum amount of available disk space (in kilobytes) required for user uploads to be allowed" "minimum amount of available disk space (in kilobytes) required for user uploads to be allowed"
,"file area settings (bitfield) - see <tt>FM_*</tt> in <tt>sbbsdefs.js</tt> for details" ,"file area settings (bitfield) - see <tt>FM_*</tt> in <tt>sbbsdefs.js</tt> for details"
,"web file virtual path prefix <i>(introduced in v3.19c)</i>"
,NULL ,NULL
}; };
...@@ -230,6 +231,17 @@ JSBool js_file_area_resolve(JSContext* cx, JSObject* areaobj, jsid id) ...@@ -230,6 +231,17 @@ JSBool js_file_area_resolve(JSContext* cx, JSObject* areaobj, jsid id)
return(JS_TRUE); return(JS_TRUE);
} }
if(name==NULL || strcmp(name, "web_vpath_prefix")==0) {
if(name)
free(name);
if((js_str=JS_NewStringCopyZ(cx, p->cfg->web_file_prefix))==NULL)
return JS_FALSE;
val=STRING_TO_JSVAL(js_str);
JS_DefineProperty(cx, areaobj, "web_vpath_prefix", val, NULL, NULL, JSPROP_ENUMERATE);
if(name)
return(JS_TRUE);
}
#ifdef BUILD_JSDOCS #ifdef BUILD_JSDOCS
js_CreateArrayOfStrings(cx, areaobj, "_property_desc_list", file_area_prop_desc, JSPROP_READONLY); js_CreateArrayOfStrings(cx, areaobj, "_property_desc_list", file_area_prop_desc, JSPROP_READONLY);
#endif #endif
......
...@@ -167,6 +167,7 @@ js_dump_file(JSContext *cx, uintN argc, jsval *arglist) ...@@ -167,6 +167,7 @@ js_dump_file(JSContext *cx, uintN argc, jsval *arglist)
static bool static bool
set_file_properties(JSContext *cx, JSObject* obj, file_t* f, enum file_detail detail) set_file_properties(JSContext *cx, JSObject* obj, file_t* f, enum file_detail detail)
{ {
char path[MAX_PATH + 1];
jsval val; jsval val;
JSString* js_str; JSString* js_str;
const uintN flags = JSPROP_ENUMERATE; const uintN flags = JSPROP_ENUMERATE;
...@@ -181,6 +182,10 @@ set_file_properties(JSContext *cx, JSObject* obj, file_t* f, enum file_detail de ...@@ -181,6 +182,10 @@ set_file_properties(JSContext *cx, JSObject* obj, file_t* f, enum file_detail de
|| !JS_DefineProperty(cx, obj, "name", STRING_TO_JSVAL(js_str), NULL, NULL, flags)) || !JS_DefineProperty(cx, obj, "name", STRING_TO_JSVAL(js_str), NULL, NULL, flags))
return false; return false;
if((js_str = JS_NewStringCopyZ(cx, getfilevpath(scfg, f, path))) == NULL
|| !JS_DefineProperty(cx, obj, "vpath", STRING_TO_JSVAL(js_str), NULL, NULL, flags | JSPROP_READONLY))
return false;
if(((f->from != NULL && *f->from != '\0') || detail > file_detail_metadata) if(((f->from != NULL && *f->from != '\0') || detail > file_detail_metadata)
&& ((js_str = JS_NewStringCopyZ(cx, f->from)) == NULL && ((js_str = JS_NewStringCopyZ(cx, f->from)) == NULL
|| !JS_DefineProperty(cx, obj, "from", STRING_TO_JSVAL(js_str), NULL, NULL, flags))) || !JS_DefineProperty(cx, obj, "from", STRING_TO_JSVAL(js_str), NULL, NULL, flags)))
...@@ -1596,6 +1601,7 @@ static jsSyncMethodSpec js_filebase_functions[] = { ...@@ -1596,6 +1601,7 @@ static jsSyncMethodSpec js_filebase_functions[] = {
"The file-meta-object may contain the following properties (depending on <i>detail</i> value):<br>" "The file-meta-object may contain the following properties (depending on <i>detail</i> value):<br>"
"<table>" "<table>"
"<tr><td align=top><tt>name</tt><td>Filename <i>(required)</i>" "<tr><td align=top><tt>name</tt><td>Filename <i>(required)</i>"
"<tr><td align=top><tt>vpath</tt><td>Virtual path to file <i>READ ONLY</i>"
"<tr><td align=top><tt>desc</tt><td>Description (summary, 58 chars or less)" "<tr><td align=top><tt>desc</tt><td>Description (summary, 58 chars or less)"
"<tr><td align=top><tt>extdesc</tt><td>Extended description (multi-line description, e.g. DIZ)" "<tr><td align=top><tt>extdesc</tt><td>Extended description (multi-line description, e.g. DIZ)"
"<tr><td align=top><tt>author</tt><td>File author name (e.g. from SAUCE record)" "<tr><td align=top><tt>author</tt><td>File author name (e.g. from SAUCE record)"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment