Thumbnails: need to url_encode the source path before hashing for thumbnail name
This commit is contained in:
parent
b8372b6788
commit
29ef5bd143
@ -231,9 +231,16 @@ string QtGuiResListPager::iconUrl(RclConfig *config, Rcl::Doc& doc)
|
|||||||
ConfIndexer::docsToPaths(docs, paths);
|
ConfIndexer::docsToPaths(docs, paths);
|
||||||
if (!paths.empty()) {
|
if (!paths.empty()) {
|
||||||
string path;
|
string path;
|
||||||
|
LOGDEB2(("ResList::iconUrl: source path [%s]\n", paths[0].c_str()));
|
||||||
if (thumbPathForUrl(cstr_fileu + paths[0], 128, path)) {
|
if (thumbPathForUrl(cstr_fileu + paths[0], 128, path)) {
|
||||||
|
LOGDEB2(("ResList::iconUrl: icon path [%s]\n", path.c_str()));
|
||||||
return cstr_fileu + path;
|
return cstr_fileu + path;
|
||||||
|
} else {
|
||||||
|
LOGDEB2(("ResList::iconUrl: no icon: path [%s]\n",
|
||||||
|
path.c_str()));
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
LOGDEB(("ResList::iconUrl: docsToPaths failed\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ResListPager::iconUrl(config, doc);
|
return ResListPager::iconUrl(config, doc);
|
||||||
|
|||||||
@ -389,6 +389,52 @@ bool path_isdir(const string& path)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allowed punctuation in the path part of an URI according to RFC2396
|
||||||
|
// -_.!~*'():@&=+$,
|
||||||
|
/*
|
||||||
|
21 !
|
||||||
|
22 "
|
||||||
|
23 #
|
||||||
|
24 $
|
||||||
|
25 %
|
||||||
|
26 &
|
||||||
|
27 '
|
||||||
|
28 (
|
||||||
|
29 )
|
||||||
|
2A *
|
||||||
|
2B +
|
||||||
|
2C ,
|
||||||
|
2D -
|
||||||
|
2E .
|
||||||
|
2F /
|
||||||
|
30 0
|
||||||
|
...
|
||||||
|
39 9
|
||||||
|
3A :
|
||||||
|
3B ;
|
||||||
|
3C <
|
||||||
|
3D =
|
||||||
|
3E >
|
||||||
|
3F ?
|
||||||
|
40 @
|
||||||
|
41 A
|
||||||
|
...
|
||||||
|
5A Z
|
||||||
|
5B [
|
||||||
|
5C \
|
||||||
|
5D ]
|
||||||
|
5E ^
|
||||||
|
5F _
|
||||||
|
60 `
|
||||||
|
61 a
|
||||||
|
...
|
||||||
|
7A z
|
||||||
|
7B {
|
||||||
|
7C |
|
||||||
|
7D }
|
||||||
|
7E ~
|
||||||
|
7F DEL
|
||||||
|
*/
|
||||||
string url_encode(const string& url, string::size_type offs)
|
string url_encode(const string& url, string::size_type offs)
|
||||||
{
|
{
|
||||||
string out = url.substr(0, offs);
|
string out = url.substr(0, offs);
|
||||||
@ -397,24 +443,23 @@ string url_encode(const string& url, string::size_type offs)
|
|||||||
int c;
|
int c;
|
||||||
const char *h = "0123456789ABCDEF";
|
const char *h = "0123456789ABCDEF";
|
||||||
c = cp[i];
|
c = cp[i];
|
||||||
if(c <= 0x1f ||
|
if (c <= 0x20 ||
|
||||||
c >= 0x7f ||
|
c >= 0x7f ||
|
||||||
c == '<' ||
|
|
||||||
c == '>' ||
|
|
||||||
c == ' ' ||
|
|
||||||
c == '\t'||
|
|
||||||
c == '"' ||
|
c == '"' ||
|
||||||
c == '#' ||
|
c == '#' ||
|
||||||
c == '%' ||
|
c == '%' ||
|
||||||
c == '{' ||
|
c == ';' ||
|
||||||
c == '}' ||
|
c == '<' ||
|
||||||
c == '|' ||
|
c == '>' ||
|
||||||
c == '\\' ||
|
c == '?' ||
|
||||||
c == '^' ||
|
|
||||||
c == '~'||
|
|
||||||
c == '[' ||
|
c == '[' ||
|
||||||
|
c == '\\' ||
|
||||||
c == ']' ||
|
c == ']' ||
|
||||||
c == '`') {
|
c == '^' ||
|
||||||
|
c == '`' ||
|
||||||
|
c == '{' ||
|
||||||
|
c == '|' ||
|
||||||
|
c == '}' ) {
|
||||||
out += '%';
|
out += '%';
|
||||||
out += h[(c >> 4) & 0xf];
|
out += h[(c >> 4) & 0xf];
|
||||||
out += h[c & 0xf];
|
out += h[c & 0xf];
|
||||||
@ -445,7 +490,9 @@ string url_gpath(const string& url)
|
|||||||
return path_canon(url.substr(colon+1));
|
return path_canon(url.substr(colon+1));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert to file path if url is like file://
|
// Convert to file path if url is like file:
|
||||||
|
// Note: this only works with our internal pseudo-urls which are not
|
||||||
|
// encoded/escaped
|
||||||
string fileurltolocalpath(string url)
|
string fileurltolocalpath(string url)
|
||||||
{
|
{
|
||||||
if (url.find("file://") == 0)
|
if (url.find("file://") == 0)
|
||||||
@ -570,7 +617,8 @@ static const string thmbdirnormal = ".thumbnails/normal";
|
|||||||
static void thumbname(const string& url, string& name)
|
static void thumbname(const string& url, string& name)
|
||||||
{
|
{
|
||||||
string digest;
|
string digest;
|
||||||
MD5String(url, digest);
|
string l_url = url_encode(url);
|
||||||
|
MD5String(l_url, digest);
|
||||||
MD5HexPrint(digest, name);
|
MD5HexPrint(digest, name);
|
||||||
name += ".png";
|
name += ".png";
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user