fix: unicode problems (removed optUTF8)

This commit is contained in:
Massimo Melina 2020-05-08 01:32:03 +02:00
parent 5628b4f08b
commit b49c15d043
3 changed files with 26 additions and 36 deletions

View File

@ -3552,12 +3552,12 @@ try
end; end;
if otpl <> filelistTpl then if otpl <> filelistTpl then
diffTpl.fullText:=optUTF8(diffTpl.over, folder.getRecursiveDiffTplAsStr()); diffTpl.fullText:=folder.getRecursiveDiffTplAsStr();
isDMbrowser:= otpl = dmBrowserTpl; isDMbrowser:= otpl = dmBrowserTpl;
fullEncode:=FALSE; fullEncode:=FALSE;
ofsRelUrl:=length(folder.url(fullEncode))+1; ofsRelUrl:=length(folder.url(fullEncode))+1;
ofsRelItemUrl:=length(optUTF8(diffTpl, folder.pathTill()))+1; ofsRelItemUrl:=length(folder.pathTill())+1;
// pathTill() is '/' for root, and 'just/folder', so we must accordingly consider a starting and trailing '/' for the latter case (bugfix by mars) // pathTill() is '/' for root, and 'just/folder', so we must accordingly consider a starting and trailing '/' for the latter case (bugfix by mars)
if not folder.isRoot() then if not folder.isRoot() then
inc(ofsRelItemUrl, 2); inc(ofsRelItemUrl, 2);
@ -3669,7 +3669,7 @@ else result:='-'
end; // getETA end; // getETA
function tplFromFile(f:Tfile):Ttpl; function tplFromFile(f:Tfile):Ttpl;
begin result:=Ttpl.create(optUTF8(tpl, f.getRecursiveDiffTplAsStr()), tpl) end; begin result:=Ttpl.create(f.getRecursiveDiffTplAsStr(), tpl) end;
procedure setDefaultIP(v:string); procedure setDefaultIP(v:string);
var var
@ -3743,7 +3743,7 @@ var
begin begin
if d.conn.reply.bodymode <> RBM_FILE then continue; if d.conn.reply.bodymode <> RBM_FILE then continue;
t:=tpl2use['progress-download-file']; t:=tpl2use['progress-download-file'];
fn:=optUTF8(tpl2use, d.lastFN); fn:=d.lastFN;
bytes:=d.conn.bytesSentLastItem; bytes:=d.conn.bytesSentLastItem;
total:=d.conn.bytesPartial; total:=d.conn.bytesPartial;
end; end;
@ -3793,12 +3793,12 @@ var
for i:=0 to length(data.uploadResults)-1 do for i:=0 to length(data.uploadResults)-1 do
with data.uploadResults[i] do with data.uploadResults[i] do
files:=files+xtpl(tpl2use[ if_(reason='','upload-success','upload-failed') ],[ files:=files+xtpl(tpl2use[ if_(reason='','upload-success','upload-failed') ],[
'%item-name%', htmlEncode(macroQuote(optUTF8(tpl2use, fn))), '%item-name%', htmlEncode(macroQuote(fn)),
'%item-url%', macroQuote(encodeURL(fn)), '%item-url%', macroQuote(encodeURL(fn)),
'%item-size%', smartsize(size), '%item-size%', smartsize(size),
'%item-resource%', f.resource+'\'+fn, '%item-resource%', f.resource+'\'+fn,
'%idx%', intToStr(i+1), '%idx%', intToStr(i+1),
'%reason%', optUTF8(tpl2use, reason), '%reason%', reason,
'%speed%', intToStr(speed div 1000), // legacy '%speed%', intToStr(speed div 1000), // legacy
'%smart-speed%', smartsize(speed) '%smart-speed%', smartsize(speed)
]); ]);
@ -3840,7 +3840,7 @@ try
addUploadResultsSymbols(); addUploadResultsSymbols();
if data = NIL then s:='' if data = NIL then s:=''
else s:=first(data.banReason, data.disconnectReason); else s:=first(data.banReason, data.disconnectReason);
addArray(md.table, ['%reason%', optUTF8(tpl2use, s)]); addArray(md.table, ['%reason%', s]);
data.conn.reply.contentType:=name2mimetype(sectionName, 'text/html'); data.conn.reply.contentType:=name2mimetype(sectionName, 'text/html');
if sectionName = 'ban' then data.conn.reply.mode:=HRM_DENY; if sectionName = 'ban' then data.conn.reply.mode:=HRM_DENY;
@ -4448,7 +4448,6 @@ function setTplText(text:string):boolean;
begin begin
result:=FALSE; // mod by mars result:=FALSE; // mod by mars
//patch290(); //patch290();
// if we'd use optUTF8() here, we couldn't make use of tpl.utf8, because text would not be parsed yet
tpl.fullText:=text; tpl.fullText:=text;
tplIsCustomized:= text <> defaultTpl; tplIsCustomized:= text <> defaultTpl;
if boolOnce(tplImport) then if boolOnce(tplImport) then

View File

@ -556,7 +556,7 @@ var
s:=md.cd.urlvars.values[k]; s:=md.cd.urlvars.values[k];
if (s = '') and (md.cd.urlvars.indexOf(k) >= 0) then s:='1'; if (s = '') and (md.cd.urlvars.indexOf(k) >= 0) then s:='1';
try try
result:=noMacrosAllowed(optUTF8(md.tpl, s)); result:=noMacrosAllowed(s);
setVar(parEx('var'), result); // if no var is specified, it will break here, and result will have the value setVar(parEx('var'), result); // if no var is specified, it will break here, and result will have the value
result:=''; result:='';
except end; except end;
@ -648,7 +648,7 @@ var
if not satisfied(fld) then exit; if not satisfied(fld) then exit;
e:=htmlEncode(encodeMarkers(fld.url(TRUE))); e:=htmlEncode(encodeMarkers(fld.url(TRUE)));
d:=htmlEncode(encodeMarkers(optUTF8(md.tpl, fld.getFolder()+fld.name+'/'))); d:=htmlEncode(encodeMarkers(fld.getFolder()+fld.name+'/'));
ae:=split('/', e); ae:=split('/', e);
ad:=split('/', d); ad:=split('/', d);
p:=macroDequote(p); p:=macroDequote(p);
@ -1598,11 +1598,11 @@ var
else if name = '%style%' then else if name = '%style%' then
result:=tpl['style'] result:=tpl['style']
else if name = '%timestamp%' then else if name = '%timestamp%' then
result:=optUTF8(tpl, dateTimeToStr(now())) result:=dateTimeToStr(now())
else if name = '%date%' then else if name = '%date%' then
result:=optUTF8(tpl, dateToStr(now())) result:=dateToStr(now())
else if name = '%time%' then else if name = '%time%' then
result:=optUTF8(tpl, timeToStr(now())) result:=timeToStr(now())
else if name = '%now%' then else if name = '%now%' then
result:=floatToStr(now()) result:=floatToStr(now())
else if name = '%version%' then else if name = '%version%' then
@ -1610,7 +1610,7 @@ var
else if name = '%build%' then else if name = '%build%' then
result:=VERSION_BUILD result:=VERSION_BUILD
else if name = '%uptime%' then else if name = '%uptime%' then
result:=optUTF8(tpl, uptimestr()) result:=uptimestr()
else if name = '%speed-out%' then else if name = '%speed-out%' then
result:=floatToStrF(srv.speedOut/1000, ffFixed, 7,2) result:=floatToStrF(srv.speedOut/1000, ffFixed, 7,2)
else if name = '%speed-in%' then else if name = '%speed-in%' then
@ -1654,7 +1654,7 @@ var
else if name = '%url%' then else if name = '%url%' then
result:=macroQuote(md.cd.conn.request.url) result:=macroQuote(md.cd.conn.request.url)
else if name = '%user%' then else if name = '%user%' then
result:=optUTF8(md.tpl, macroQuote(usr)) result:=macroQuote(usr)
else if name = '%password%' then else if name = '%password%' then
result:=macroQuote(md.cd.conn.request.pwd) result:=macroQuote(md.cd.conn.request.pwd)
else if name = '%loggedin%' then else if name = '%loggedin%' then
@ -1673,12 +1673,12 @@ var
if assigned(md.folder) then if assigned(md.folder) then
if name = '%folder-item-comment%' then if name = '%folder-item-comment%' then
result:=optUTF8(md.tpl, md.folder.getDynamicComment()) result:=md.folder.getDynamicComment()
else if name = '%folder-comment%' then else if name = '%folder-comment%' then
begin begin
result:=md.folder.getDynamicComment(); result:=md.folder.getDynamicComment();
if result > '' then if result > '' then
result:=optUTF8(md.tpl, replaceText(tpl['folder-comment'], '%item-comment%', result)); result:=replaceText(tpl['folder-comment'], '%item-comment%', result)
end end
else if name = '%diskfree%' then else if name = '%diskfree%' then
result:=smartSize(diskSpaceAt(md.folder.resource)-minDiskSpace*MEGA) result:=smartSize(diskSpaceAt(md.folder.resource)-minDiskSpace*MEGA)
@ -1689,11 +1689,11 @@ var
else if name = '%parent-folder%' then else if name = '%parent-folder%' then
result:=md.folder.parentURL() result:=md.folder.parentURL()
else if name = '%folder-name%' then else if name = '%folder-name%' then
result:=optUTF8(md.tpl, md.folder.name) result:=md.folder.name
else if name = '%folder-resource%' then else if name = '%folder-resource%' then
result:=md.folder.resource result:=md.folder.resource
else if name = '%folder%' then else if name = '%folder%' then
with md.folder do result:=optUTF8(md.tpl, if_(isRoot(), '/', getFolder()+name+'/')) with md.folder do result:=if_(isRoot(), '/', getFolder()+name+'/')
; ;
if assigned(md.f) then if assigned(md.f) then
@ -1702,7 +1702,7 @@ var
s:=md.f.name; s:=md.f.name;
if md.hideExt and md.f.isFile() then if md.hideExt and md.f.isFile() then
setLength(s, length(s)-length(extractFileExt(s)) ); setLength(s, length(s)-length(extractFileExt(s)) );
result:=htmlEncode(macroQuote(optUTF8(md.tpl, s))) result:=htmlEncode(macroQuote(s))
end end
else if name = '%item-type%' then else if name = '%item-type%' then
if md.f.isLink() then if md.f.isLink() then
@ -1720,20 +1720,20 @@ var
else if name = '%item-resource%' then else if name = '%item-resource%' then
result:=macroQuote(md.f.resource) result:=macroQuote(md.f.resource)
else if name = '%item-ext%' then else if name = '%item-ext%' then
result:=macroQuote(optUTF8(md.tpl, copy(extractFileExt(md.f.name), 2, MAXINT))) result:=macroQuote(copy(extractFileExt(md.f.name), 2, MAXINT))
else if name = '%item-added-dt%' then else if name = '%item-added-dt%' then
result:=floatToStr(md.f.atime) result:=floatToStr(md.f.atime)
else if name = '%item-modified-dt%' then else if name = '%item-modified-dt%' then
result:=floatToStr(md.f.mtime) result:=floatToStr(md.f.mtime)
// these twos are actually redundant, {.time||when=%item-added-dt%.} // these twos are actually redundant, {.time||when=%item-added-dt%.}
else if name = '%item-added%' then else if name = '%item-added%' then
result:=optUTF8(md.tpl, datetimeToStr(md.f.atime)) result:=datetimeToStr(md.f.atime)
else if name = '%item-modified%' then else if name = '%item-modified%' then
result:=if_(md.f.mtime=0, 'error', optUTF8(md.tpl, datetimeToStr(md.f.mtime))) result:=if_(md.f.mtime=0, 'error', datetimeToStr(md.f.mtime))
else if name = '%item-comment%' then else if name = '%item-comment%' then
result:=optUTF8(md.tpl, md.f.getDynamicComment(TRUE)) result:=md.f.getDynamicComment(TRUE)
else if name = '%item-url%' then else if name = '%item-url%' then
result:=macroQuote(optUTF8(md.tpl, md.f.url())) result:=macroQuote(md.f.url())
; ;
if assigned(md.f) and assigned(md.tpl) then if assigned(md.f) and assigned(md.tpl) then
@ -1883,7 +1883,6 @@ try
r:=parF('when',now())+parF('offset',0); r:=parF('when',now())+parF('offset',0);
if s = 'y' then result:=floatToStr(r) if s = 'y' then result:=floatToStr(r)
else datetimeToString(result, first(s,'c'), r ); else datetimeToString(result, first(s,'c'), r );
result:=optUTF8(md.tpl, result); // we may have special chars from datetimeToString()
end; end;
if name = 'disconnect' then if name = 'disconnect' then
@ -2052,9 +2051,9 @@ try
else else
result:=p; result:=p;
if name = 'maybe utf8' then if name = 'maybe utf8' then // pre-unicode legacy
if satisfied(md.tpl) then if satisfied(md.tpl) then
result:=optUTF8(md.tpl.utf8, p); result:=p;
if name = 'after the list' then if name = 'after the list' then
if md.afterTheList then if md.afterTheList then

View File

@ -215,8 +215,6 @@ function getTill(ss, s:string; included:boolean=FALSE):string; overload;
function getTill(i:integer; s:string):string; overload; function getTill(i:integer; s:string):string; overload;
function singleLine(s:string):boolean; function singleLine(s:string):boolean;
function poss(chars:TcharSet; s:string; ofs:integer=1):integer; function poss(chars:TcharSet; s:string; ofs:integer=1):integer;
function optUTF8(bool:boolean; s:string):string; overload;
function optUTF8(tpl:Ttpl; s:string):string; overload;
function optAnsi(bool:boolean; s:string):string; function optAnsi(bool:boolean; s:string):string;
function utf8Test(s:string):boolean; function utf8Test(s:string):boolean;
function jsEncode(s, chars:string):string; function jsEncode(s, chars:string):string;
@ -2045,12 +2043,6 @@ setLength(result, 1000);
setLength(result, getTempPath(length(result), @result[1])); setLength(result, getTempPath(length(result), @result[1]));
end; // getTempDir end; // getTempDir
function optUTF8(bool:boolean; s:string):string;
begin if bool then result:=ansiToUtf8(s) else result:=s end;
function optUTF8(tpl:Ttpl; s:string):string; inline;
begin result:=optUTF8(assigned(tpl) and tpl.utf8, s) end;
function optAnsi(bool:boolean; s:string):string; function optAnsi(bool:boolean; s:string):string;
begin if bool then result:=UTF8toAnsi(s) else result:=s end; begin if bool then result:=UTF8toAnsi(s) else result:=s end;