Fixed utf8 issue with links from browser (Windows only).

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4634 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2011-10-08 17:49:06 +00:00
parent c1af9b13ad
commit e3798dafe9
4 changed files with 12 additions and 33 deletions

View File

@ -130,7 +130,7 @@ void RetroShareLink::fromString(const QString& url)
} }
/* Now try QUrl */ /* Now try QUrl */
fromUrl(QUrl::fromEncoded(url.toAscii())); fromUrl(QUrl::fromEncoded(url.toUtf8().constData()));
} }
void RetroShareLink::fromUrl(const QUrl& url) void RetroShareLink::fromUrl(const QUrl& url)
@ -444,7 +444,7 @@ QString RetroShareLink::title() const
return ""; return "";
} }
QString RetroShareLink::toString(bool encoded /*= true*/) const QString RetroShareLink::toString() const
{ {
switch (_type) { switch (_type) {
case TYPE_UNKNOWN: case TYPE_UNKNOWN:
@ -458,10 +458,6 @@ QString RetroShareLink::toString(bool encoded /*= true*/) const
url.addQueryItem(FILE_SIZE, QString::number(_size)); url.addQueryItem(FILE_SIZE, QString::number(_size));
url.addQueryItem(FILE_HASH, _hash); url.addQueryItem(FILE_HASH, _hash);
if (encoded) {
return url.toEncoded();
}
return url.toString(); return url.toString();
} }
case TYPE_PERSON: case TYPE_PERSON:
@ -472,10 +468,6 @@ QString RetroShareLink::toString(bool encoded /*= true*/) const
url.addQueryItem(PERSON_NAME, _name); url.addQueryItem(PERSON_NAME, _name);
url.addQueryItem(PERSON_HASH, _hash); url.addQueryItem(PERSON_HASH, _hash);
if (encoded) {
return url.toEncoded();
}
return url.toString(); return url.toString();
} }
case TYPE_FORUM: case TYPE_FORUM:
@ -489,10 +481,6 @@ QString RetroShareLink::toString(bool encoded /*= true*/) const
url.addQueryItem(FORUM_MSGID, _msgId); url.addQueryItem(FORUM_MSGID, _msgId);
} }
if (encoded) {
return url.toEncoded();
}
return url.toString(); return url.toString();
} }
case TYPE_CHANNEL: case TYPE_CHANNEL:
@ -506,10 +494,6 @@ QString RetroShareLink::toString(bool encoded /*= true*/) const
url.addQueryItem(CHANNEL_MSGID, _msgId); url.addQueryItem(CHANNEL_MSGID, _msgId);
} }
if (encoded) {
return url.toEncoded();
}
return url.toString(); return url.toString();
} }
case TYPE_SEARCH: case TYPE_SEARCH:
@ -519,10 +503,6 @@ QString RetroShareLink::toString(bool encoded /*= true*/) const
url.setHost(HOST_SEARCH); url.setHost(HOST_SEARCH);
url.addQueryItem(SEARCH_KEYWORDS, _name); url.addQueryItem(SEARCH_KEYWORDS, _name);
if (encoded) {
return url.toEncoded();
}
return url.toString(); return url.toString();
} }
case TYPE_MESSAGE: case TYPE_MESSAGE:
@ -535,10 +515,6 @@ QString RetroShareLink::toString(bool encoded /*= true*/) const
url.addQueryItem(MESSAGE_SUBJECT, _subject); url.addQueryItem(MESSAGE_SUBJECT, _subject);
} }
if (encoded) {
return url.toEncoded();
}
return url.toString(); return url.toString();
} }
} }
@ -557,7 +533,7 @@ QString RetroShareLink::niceName() const
QString RetroShareLink::toHtml() const QString RetroShareLink::toHtml() const
{ {
QString html = "<a href=\"" + toString(true) + "\""; QString html = "<a href=\"" + toString() + "\"";
QString linkTitle = title(); QString linkTitle = title();
if (!linkTitle.isEmpty()) { if (!linkTitle.isEmpty()) {
@ -570,12 +546,12 @@ QString RetroShareLink::toHtml() const
QString RetroShareLink::toHtmlFull() const QString RetroShareLink::toHtmlFull() const
{ {
return QString("<a href=\"") + toString(true) + "\">" + toString(false) + "</a>" ; return QString("<a href=\"") + toString() + "\">" + toString() + "</a>" ;
} }
QString RetroShareLink::toHtmlSize() const QString RetroShareLink::toHtmlSize() const
{ {
return QString("<a href=\"") + toString(true) + "\">" + name() +"</a>" + " " + "<font color=\"blue\">" + "(" + misc::friendlyUnit(_size) + ")" +"</font>"; return QString("<a href=\"") + toString() + "\">" + name() +"</a>" + " " + "<font color=\"blue\">" + "(" + misc::friendlyUnit(_size) + ")" +"</font>";
} }
bool RetroShareLink::checkName(const QString& name) bool RetroShareLink::checkName(const QString& name)
@ -603,7 +579,7 @@ bool RetroShareLink::checkName(const QString& name)
QUrl RetroShareLink::toUrl() const QUrl RetroShareLink::toUrl() const
{ {
return QUrl(toString()) ; return QUrl::fromEncoded(toString().toUtf8().constData());
} }
bool RetroShareLink::checkHash(const QString& hash) bool RetroShareLink::checkHash(const QString& hash)

View File

@ -76,7 +76,7 @@ class RetroShareLink
/// returns the string retroshare://file?name=&size=&hash= /// returns the string retroshare://file?name=&size=&hash=
/// retroshare://person?name=&hash= /// retroshare://person?name=&hash=
QString toString(bool encoded = true) const ; QString toString() const;
/// returns the string <a href="retroshare://file?name=&size=&hash=">name</a> /// returns the string <a href="retroshare://file?name=&size=&hash=">name</a>
/// <a href="retroshare://person?name=&hash=">name@hash</a> /// <a href="retroshare://person?name=&hash=">name@hash</a>
QString toHtml() const ; QString toHtml() const ;

View File

@ -170,6 +170,9 @@ border-radius: 10px}</string>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="5"> <item row="2" column="0" colspan="5">

View File

@ -105,7 +105,7 @@ bool EventReceiver::sendRetroShareLink(const QString& link)
if (info) { if (info) {
#ifdef WINDOWS_SYS #ifdef WINDOWS_SYS
if (info->wid) { if (info->wid) {
QByteArray linkData = link.toAscii(); QByteArray linkData(link.toUtf8());
COPYDATASTRUCT send; COPYDATASTRUCT send;
send.dwData = OP_RETROSHARELINK; send.dwData = OP_RETROSHARELINK;
@ -149,7 +149,7 @@ bool EventReceiver::winEvent(MSG* message, long* result)
COPYDATASTRUCT *data = (COPYDATASTRUCT*) message->lParam; COPYDATASTRUCT *data = (COPYDATASTRUCT*) message->lParam;
if (data && data->dwData == OP_RETROSHARELINK) { if (data && data->dwData == OP_RETROSHARELINK) {
received(QString::fromAscii((const char*) data->lpData, data->cbData)); received(QString::fromUtf8((const char*) data->lpData, data->cbData));
/* Keep the event from Qt */ /* Keep the event from Qt */
*result = 0; *result = 0;