browsercore/appfw/Api/Common/UiUtil.cpp
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
parent 12 afcd8e6d025b
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
* All rights reserved.
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
*
3
hgs
parents: 0
diff changeset
     5
* This program is free software: you can redistribute it and/or modify
hgs
parents: 0
diff changeset
     6
* it under the terms of the GNU Lesser General Public License as published by
hgs
parents: 0
diff changeset
     7
* the Free Software Foundation, version 2.1 of the License.
hgs
parents: 0
diff changeset
     8
* 
hgs
parents: 0
diff changeset
     9
* This program is distributed in the hope that it will be useful,
hgs
parents: 0
diff changeset
    10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
hgs
parents: 0
diff changeset
    11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
hgs
parents: 0
diff changeset
    12
* GNU Lesser General Public License for more details.
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
*
3
hgs
parents: 0
diff changeset
    14
* You should have received a copy of the GNU Lesser General Public License
hgs
parents: 0
diff changeset
    15
* along with this program.  If not, 
hgs
parents: 0
diff changeset
    16
* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
*
3
hgs
parents: 0
diff changeset
    18
* Description:
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
*
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
*/
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
#include <QRegExp>
16
hgs
parents: 12
diff changeset
    23
#include <QDebug>
hgs
parents: 12
diff changeset
    24
#include <QStringList>
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
#include "UiUtil.h"
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
#define GOOGLE_SEARCH_ENGINE "http://www.google.com/search?q="
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
namespace WRT {
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    30
12
hgs
parents: 9
diff changeset
    31
hgs
parents: 9
diff changeset
    32
QString UiUtil::removeScheme(const QString & str ) 
hgs
parents: 9
diff changeset
    33
{
hgs
parents: 9
diff changeset
    34
hgs
parents: 9
diff changeset
    35
    QUrl url(str);
hgs
parents: 9
diff changeset
    36
    QString scheme=url.scheme();
hgs
parents: 9
diff changeset
    37
    QString urlStr = str;
hgs
parents: 9
diff changeset
    38
hgs
parents: 9
diff changeset
    39
    if (scheme == "http" || scheme == "https") {
hgs
parents: 9
diff changeset
    40
        urlStr.remove(0, scheme.length() + 3); //remove "scheme://"
hgs
parents: 9
diff changeset
    41
    }
hgs
parents: 9
diff changeset
    42
    return urlStr;
hgs
parents: 9
diff changeset
    43
hgs
parents: 9
diff changeset
    44
}
hgs
parents: 9
diff changeset
    45
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
QString UiUtil::loadFiletoString(const QString &name)
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
{
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
    QFile file(name);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
    file.open(QFile::ReadOnly);
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
    QString fileString = QLatin1String(file.readAll());
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
    file.close();
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
    return fileString;
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
}
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
QUrl UiUtil::searchUrl(const QString &string)
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
{
16
hgs
parents: 12
diff changeset
    57
    QUrl url = searchUrlWithoutCheck(string);
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    58
    if(url.isValid())
16
hgs
parents: 12
diff changeset
    59
        return url;
9
hgs
parents: 3
diff changeset
    60
    else
hgs
parents: 3
diff changeset
    61
        return QUrl();
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
}
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    63
16
hgs
parents: 12
diff changeset
    64
QUrl UiUtil::searchUrlWithoutCheck(const QString &string)
hgs
parents: 12
diff changeset
    65
{
hgs
parents: 12
diff changeset
    66
    QString urlStr = string.trimmed();
hgs
parents: 12
diff changeset
    67
    QString urlStrEncoded = QUrl::toPercentEncoding(string);
hgs
parents: 12
diff changeset
    68
    QUrl url(QLatin1String(GOOGLE_SEARCH_ENGINE) + urlStrEncoded, QUrl::TolerantMode);
hgs
parents: 12
diff changeset
    69
    return url;
hgs
parents: 12
diff changeset
    70
}
hgs
parents: 12
diff changeset
    71
hgs
parents: 12
diff changeset
    72
QUrl UiUtil::encodeQueryItems(QUrl& url, bool encodeNonAscii)
hgs
parents: 12
diff changeset
    73
{
hgs
parents: 12
diff changeset
    74
    QList< QPair<QString, QString> > queryItems = url.queryItems();
hgs
parents: 12
diff changeset
    75
    if (queryItems.size() != 0) {
hgs
parents: 12
diff changeset
    76
        QString urlStr = url.toString();
hgs
parents: 12
diff changeset
    77
        int queryIndex = urlStr.indexOf("?");
hgs
parents: 12
diff changeset
    78
        int queryLength = urlStr.length() - queryIndex - 1;
hgs
parents: 12
diff changeset
    79
        Q_ASSERT(queryIndex != -1 && queryLength >= 0);
hgs
parents: 12
diff changeset
    80
        urlStr = urlStr.right(queryLength);
hgs
parents: 12
diff changeset
    81
hgs
parents: 12
diff changeset
    82
        QString queryStr;
hgs
parents: 12
diff changeset
    83
        bool hasValidQuery = false;
hgs
parents: 12
diff changeset
    84
        QStringList queryList = urlStr.split("&");
hgs
parents: 12
diff changeset
    85
        //qDebug() << "queryList!!!!!!!!!!!!!!!:" << queryList;
hgs
parents: 12
diff changeset
    86
        for(int i = 0; i < queryList.size(); i++) {
hgs
parents: 12
diff changeset
    87
            QString query = queryList.at(i);
hgs
parents: 12
diff changeset
    88
            //qDebug() << "query!!!!!!!!!!!!:" << query;
hgs
parents: 12
diff changeset
    89
hgs
parents: 12
diff changeset
    90
            if (query.isEmpty()) {
hgs
parents: 12
diff changeset
    91
              if ((i == queryList.size() - 1) && queryList.at(i - 1).isEmpty()) // "&&" ==> ["","",""] ==> "%25%25"
hgs
parents: 12
diff changeset
    92
                  continue;
hgs
parents: 12
diff changeset
    93
              queryStr += QUrl::toPercentEncoding("&"); // encode '&' since it is a part of the query text
hgs
parents: 12
diff changeset
    94
            } else {
hgs
parents: 12
diff changeset
    95
                int delimiterIndex = query.indexOf("=");
hgs
parents: 12
diff changeset
    96
                if (delimiterIndex == -1 || delimiterIndex == 0) {
hgs
parents: 12
diff changeset
    97
                    // it is not a valid query, instead, it is a part of query
hgs
parents: 12
diff changeset
    98
                    if (hasValidQuery)
hgs
parents: 12
diff changeset
    99
                        queryStr += QUrl::toPercentEncoding("&"); // encode '&' since it is a part of the query text
hgs
parents: 12
diff changeset
   100
                    queryStr += encodeNonAscii ? QUrl::toPercentEncoding(query, "%") : query; // "q=a&dc$da" ==> ["q=a","dc$da"] ==> for "dc$da", it is a part of the last query
hgs
parents: 12
diff changeset
   101
                }
hgs
parents: 12
diff changeset
   102
                else {
hgs
parents: 12
diff changeset
   103
                    // it is a valid query, close last query before add a new one
hgs
parents: 12
diff changeset
   104
                    // "q=a=c&z=dcda" ==> ["q=a=c","z=dcda"] ==> for "q=a=c", "q" is the key and "a=c" is the value
hgs
parents: 12
diff changeset
   105
                    if (hasValidQuery)
hgs
parents: 12
diff changeset
   106
                        queryStr += "&"; // don't encode this '&' since it is a part of the query delimiter
hgs
parents: 12
diff changeset
   107
                    QString key = encodeNonAscii ? QUrl::toPercentEncoding(query.left(delimiterIndex), "%") : query.left(delimiterIndex);
hgs
parents: 12
diff changeset
   108
                    QString value = encodeNonAscii ? QUrl::toPercentEncoding(query.right(query.length() - delimiterIndex - 1), "%") : query.right(query.length() - delimiterIndex - 1);
hgs
parents: 12
diff changeset
   109
                    QString newQuery = key + "=" + value;
hgs
parents: 12
diff changeset
   110
                    queryStr += newQuery;
hgs
parents: 12
diff changeset
   111
                    hasValidQuery = true;
hgs
parents: 12
diff changeset
   112
                }
hgs
parents: 12
diff changeset
   113
            }
hgs
parents: 12
diff changeset
   114
                
hgs
parents: 12
diff changeset
   115
        }
hgs
parents: 12
diff changeset
   116
        QUrl encodedUrl = QUrl(url.toString().left(queryIndex + 1) + queryStr);
hgs
parents: 12
diff changeset
   117
        return encodedUrl;
hgs
parents: 12
diff changeset
   118
        //qDebug() << "new query url ---> " << url.toString();
hgs
parents: 12
diff changeset
   119
    }
hgs
parents: 12
diff changeset
   120
    
hgs
parents: 12
diff changeset
   121
    return url;
hgs
parents: 12
diff changeset
   122
}
hgs
parents: 12
diff changeset
   123
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   124
QUrl UiUtil::guessUrlFromString(const QString &string)
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   125
{
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   126
    QString urlStr = string.trimmed();
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   127
    QRegExp schemaTest(QLatin1String("^[a-zA-Z]+\\:.*"));
16
hgs
parents: 12
diff changeset
   128
    QRegExp fileTest(QLatin1String("^[a-zA-Z]:/.*"));
hgs
parents: 12
diff changeset
   129
    
hgs
parents: 12
diff changeset
   130
    //remove new line character
hgs
parents: 12
diff changeset
   131
    if (urlStr.contains("\n"))
hgs
parents: 12
diff changeset
   132
        urlStr.replace(QLatin1String("\n"), QLatin1String(""));
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   133
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   134
    // Check if it looks like a qualified URL. Try parsing it and see.
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   135
    bool hasSchema = schemaTest.exactMatch(urlStr);
16
hgs
parents: 12
diff changeset
   136
    bool isFileUrl = fileTest.exactMatch(urlStr);
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   137
    bool hasSpaces = urlStr.contains(" ");
16
hgs
parents: 12
diff changeset
   138
hgs
parents: 12
diff changeset
   139
    // Is it a file path (ex. "c:/data/test.html")?
hgs
parents: 12
diff changeset
   140
    if (isFileUrl) {
hgs
parents: 12
diff changeset
   141
        if (QFile::exists(urlStr)) {
hgs
parents: 12
diff changeset
   142
            return QUrl::fromLocalFile(urlStr);
hgs
parents: 12
diff changeset
   143
        }
hgs
parents: 12
diff changeset
   144
    }
hgs
parents: 12
diff changeset
   145
    
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   146
    if (hasSchema) {
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   147
        if(!hasSpaces){
16
hgs
parents: 12
diff changeset
   148
            QUrl url(urlStr, QUrl::TolerantMode);
hgs
parents: 12
diff changeset
   149
            if (url.isValid())
hgs
parents: 12
diff changeset
   150
                return encodeQueryItems(url, false);
hgs
parents: 12
diff changeset
   151
        }
hgs
parents: 12
diff changeset
   152
        else{
hgs
parents: 12
diff changeset
   153
            if(urlStr.contains("https://")){
hgs
parents: 12
diff changeset
   154
                urlStr.remove("https://" ,Qt::CaseInsensitive);
hgs
parents: 12
diff changeset
   155
            }
hgs
parents: 12
diff changeset
   156
            else if(urlStr.contains("http://")){
hgs
parents: 12
diff changeset
   157
                urlStr.remove("http://" ,Qt::CaseInsensitive);
hgs
parents: 12
diff changeset
   158
            }
hgs
parents: 12
diff changeset
   159
            else if(urlStr.contains("rtsp://")){
hgs
parents: 12
diff changeset
   160
                urlStr.remove("rtsp://" ,Qt::CaseInsensitive);
hgs
parents: 12
diff changeset
   161
            }
hgs
parents: 12
diff changeset
   162
            QUrl url = searchUrlWithoutCheck(urlStr);
hgs
parents: 12
diff changeset
   163
            if(url.isValid())
hgs
parents: 12
diff changeset
   164
                return url;
hgs
parents: 12
diff changeset
   165
        }
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   166
    }
16
hgs
parents: 12
diff changeset
   167
    
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   168
    // Might be a shorturl - try to detect the schema.
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
    if (!hasSchema) {
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   170
        int dotIndex = urlStr.indexOf(QLatin1Char('.'));
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   171
        if (dotIndex != -1 && !hasSpaces) {
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
            QUrl url;
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
            urlStr.endsWith(".") ? ( url.setUrl(QLatin1String("http://") + urlStr + QLatin1String("com"), QUrl::TolerantMode) ) : ( url.setUrl(QLatin1String("http://") + urlStr, QUrl::TolerantMode) );
12
hgs
parents: 9
diff changeset
   174
            if (url.isValid()){
16
hgs
parents: 12
diff changeset
   175
                return encodeQueryItems(url, false);
12
hgs
parents: 9
diff changeset
   176
            }
16
hgs
parents: 12
diff changeset
   177
            //--Condition for Character DOT(.)--
12
hgs
parents: 9
diff changeset
   178
            else {
16
hgs
parents: 12
diff changeset
   179
                QUrl url = searchUrlWithoutCheck(urlStr);
12
hgs
parents: 9
diff changeset
   180
                if(url.isValid())
hgs
parents: 9
diff changeset
   181
                    return url;
hgs
parents: 9
diff changeset
   182
            }
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   183
        }
16
hgs
parents: 12
diff changeset
   184
        //--The string parameter is simple text and a search should be performed. Like for Special Character :\ etc.--
hgs
parents: 12
diff changeset
   185
        else {
hgs
parents: 12
diff changeset
   186
            QUrl url = searchUrlWithoutCheck(urlStr);
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   187
            if(url.isValid())
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   188
                return url;
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   189
        }
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   190
    }
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   191
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   192
    // Fall back to QUrl's own tolerant parser.
16
hgs
parents: 12
diff changeset
   193
    QUrl url = QUrl(string, QUrl::TolerantMode);
hgs
parents: 12
diff changeset
   194
    return encodeQueryItems(url, false);
0
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   195
}
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   196
1450b09d0cfd Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   197
}