browsercore/appfw/Api/Managers/HistoryManager.cpp
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
parent 14 6aeb7a756187
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
*
hgs
parents:
diff changeset
     5
* This program is free software: you can redistribute it and/or modify
hgs
parents:
diff changeset
     6
* it under the terms of the GNU Lesser General Public License as published by
hgs
parents:
diff changeset
     7
* the Free Software Foundation, version 2.1 of the License.
hgs
parents:
diff changeset
     8
* 
hgs
parents:
diff changeset
     9
* This program is distributed in the hope that it will be useful,
hgs
parents:
diff changeset
    10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
hgs
parents:
diff changeset
    11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
hgs
parents:
diff changeset
    12
* GNU Lesser General Public License for more details.
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* You should have received a copy of the GNU Lesser General Public License
hgs
parents:
diff changeset
    15
* along with this program.  If not, 
hgs
parents:
diff changeset
    16
* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
hgs
parents:
diff changeset
    17
*
hgs
parents:
diff changeset
    18
* Description:
hgs
parents:
diff changeset
    19
*
hgs
parents:
diff changeset
    20
*/
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include <QtCore/QDir>
hgs
parents:
diff changeset
    24
#include <QtCore/QFile>
hgs
parents:
diff changeset
    25
#include <QtGui/QIcon>
hgs
parents:
diff changeset
    26
#include <QtGui>
hgs
parents:
diff changeset
    27
#include <QtCore/QDebug>
hgs
parents:
diff changeset
    28
#include <QtCore/QUrl>
hgs
parents:
diff changeset
    29
#include <QString>
hgs
parents:
diff changeset
    30
#include "actionjsobject.h"
hgs
parents:
diff changeset
    31
#include "HistoryManager_p.h"
hgs
parents:
diff changeset
    32
#include "HistoryManager.h"
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
//#include "wrtsettings.h"
hgs
parents:
diff changeset
    35
#include "bedrockprovisioning.h"
hgs
parents:
diff changeset
    36
#include <browsercontentdll.h>
hgs
parents:
diff changeset
    37
#include "webpagecontroller.h"
hgs
parents:
diff changeset
    38
#include "wrtbrowsercontainer.h"
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
namespace WRT {
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
HistoryManagerPrivate::HistoryManagerPrivate(HistoryManager * mgr) :
hgs
parents:
diff changeset
    44
    q(mgr),
hgs
parents:
diff changeset
    45
    m_connectedToHistory(false),
hgs
parents:
diff changeset
    46
    m_maxUrls(10) // TODO: read from settings
hgs
parents:
diff changeset
    47
{
hgs
parents:
diff changeset
    48
    QFileInfo dbFile("browserContent.db");
hgs
parents:
diff changeset
    49
16
hgs
parents: 14
diff changeset
    50
    QString databaseName = BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsString("DataBaseName");
hgs
parents: 14
diff changeset
    51
    m_historySession=new BrowserContent("Bedrock",databaseName);
12
hgs
parents:
diff changeset
    52
    if (m_historySession) {
hgs
parents:
diff changeset
    53
        m_connectedToHistory = true;
hgs
parents:
diff changeset
    54
    } else {
hgs
parents:
diff changeset
    55
        qDebug() << "HistoryManagerPrivate: Failed to connect to history database";
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
    m_actionsParent = new QObject(mgr);
hgs
parents:
diff changeset
    59
    m_actionsParent->setObjectName("actions");
hgs
parents:
diff changeset
    60
    
hgs
parents:
diff changeset
    61
    m_actionClearHistory = new QAction("clearHistory", m_actionsParent);
hgs
parents:
diff changeset
    62
    
hgs
parents:
diff changeset
    63
    m_actionClearJSO  = new ActionJSObject(m_actionsParent, m_actionClearHistory);
hgs
parents:
diff changeset
    64
    
hgs
parents:
diff changeset
    65
    m_actionClearHistory->setObjectName("clearHistory");
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
}
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
HistoryManagerPrivate::~HistoryManagerPrivate()
hgs
parents:
diff changeset
    70
{
hgs
parents:
diff changeset
    71
    delete m_historySession;
hgs
parents:
diff changeset
    72
    delete m_actionClearHistory;
hgs
parents:
diff changeset
    73
    delete m_actionClearJSO;
hgs
parents:
diff changeset
    74
}
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
/*!
hgs
parents:
diff changeset
    77
 * \class HistoryManager
hgs
parents:
diff changeset
    78
 *
hgs
parents:
diff changeset
    79
 * This class is responsible for managing history, This class could be used
hgs
parents:
diff changeset
    80
 * mainly for Creating, adding history, adding recent history items, deleting
hgs
parents:
diff changeset
    81
 * and editing history.
hgs
parents:
diff changeset
    82
 *
hgs
parents:
diff changeset
    83
 */
hgs
parents:
diff changeset
    84
 
hgs
parents:
diff changeset
    85
/*!
hgs
parents:
diff changeset
    86
 * Basic constructor
hgs
parents:
diff changeset
    87
 * @param parent : parent widget (Defaulted to NULL ) if not specified
hgs
parents:
diff changeset
    88
 */
hgs
parents:
diff changeset
    89
HistoryManager::HistoryManager(QWidget *parent) :
hgs
parents:
diff changeset
    90
    QObject(parent),
hgs
parents:
diff changeset
    91
    d(new HistoryManagerPrivate(this))
hgs
parents:
diff changeset
    92
{
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    m_isHistoryDbreadRequired=true;
hgs
parents:
diff changeset
    95
    connect(d->m_actionClearHistory, SIGNAL(triggered()), this, SIGNAL(confirmHistoryClear()));
hgs
parents:
diff changeset
    96
     
hgs
parents:
diff changeset
    97
}
hgs
parents:
diff changeset
    98
/*
hgs
parents:
diff changeset
    99
void HistoryManager::actionClearHistory()
hgs
parents:
diff changeset
   100
{
hgs
parents:
diff changeset
   101
    emit confirmClearHistory();
hgs
parents:
diff changeset
   102
}
hgs
parents:
diff changeset
   103
*/
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
HistoryManager::~HistoryManager()
hgs
parents:
diff changeset
   106
{
hgs
parents:
diff changeset
   107
    disconnect(d->m_actionClearHistory, SIGNAL(triggered()), this, SIGNAL(historyCleared()));
hgs
parents:
diff changeset
   108
    delete d;
hgs
parents:
diff changeset
   109
}
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
HistoryManager* HistoryManager::getSingleton()
hgs
parents:
diff changeset
   112
 {
hgs
parents:
diff changeset
   113
    static HistoryManager* singleton = 0;
hgs
parents:
diff changeset
   114
  
hgs
parents:
diff changeset
   115
    if(!singleton){
hgs
parents:
diff changeset
   116
           singleton = new HistoryManager;
hgs
parents:
diff changeset
   117
           singleton->setObjectName("historyManager");
hgs
parents:
diff changeset
   118
    }
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
    //assert(singleton);
hgs
parents:
diff changeset
   121
    return singleton;    
hgs
parents:
diff changeset
   122
 }
hgs
parents:
diff changeset
   123
}
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
QString HistoryManager::getHistoryFoldersJSON(QString folderName)
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    bool flag = true;
hgs
parents:
diff changeset
   129
  
hgs
parents:
diff changeset
   130
    QString historyFolders = "[";
hgs
parents:
diff changeset
   131
    if (folderName == "")
hgs
parents:
diff changeset
   132
        {
hgs
parents:
diff changeset
   133
    m_historyMap.clear();
hgs
parents:
diff changeset
   134
    m_folderVector.clear();
hgs
parents:
diff changeset
   135
    d->m_historySession->fetchSerializedHistory(m_folderVector, m_historyMap);
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
    for (int i = m_folderVector.size() - 1; i >= 0; i--)
hgs
parents:
diff changeset
   138
        {
hgs
parents:
diff changeset
   139
        //check for folder nodes
hgs
parents:
diff changeset
   140
        historyFolders.append("\"");
hgs
parents:
diff changeset
   141
        historyFolders.append(m_folderVector[i]);
hgs
parents:
diff changeset
   142
        historyFolders.append("\"");
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
        if (i != 0)
hgs
parents:
diff changeset
   146
            historyFolders.append(",");
hgs
parents:
diff changeset
   147
        if (flag)
hgs
parents:
diff changeset
   148
            {
hgs
parents:
diff changeset
   149
            if (m_folderVector[i].count() > 0)
hgs
parents:
diff changeset
   150
                {
hgs
parents:
diff changeset
   151
                d->m_actionClearHistory->setEnabled(true);
hgs
parents:
diff changeset
   152
                flag=false;
hgs
parents:
diff changeset
   153
                }
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
            }
hgs
parents:
diff changeset
   156
        }
hgs
parents:
diff changeset
   157
     if (flag)
hgs
parents:
diff changeset
   158
        {
hgs
parents:
diff changeset
   159
        d->m_actionClearHistory->setEnabled(false);
hgs
parents:
diff changeset
   160
        }
hgs
parents:
diff changeset
   161
    historyFolders.append("]");
hgs
parents:
diff changeset
   162
    m_folderVector.clear();
hgs
parents:
diff changeset
   163
        }
hgs
parents:
diff changeset
   164
    if (folderName == "")
hgs
parents:
diff changeset
   165
        {
hgs
parents:
diff changeset
   166
        return historyFolders;
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
        }
hgs
parents:
diff changeset
   169
    else
hgs
parents:
diff changeset
   170
        {
hgs
parents:
diff changeset
   171
        return m_historyMap[folderName];
hgs
parents:
diff changeset
   172
        }
hgs
parents:
diff changeset
   173
    }
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
/*!
hgs
parents:
diff changeset
   176
 * Add the  node to the folder in proxy model. If the folder doesnt exist in proxy, create
hgs
parents:
diff changeset
   177
 * the folder  and add the node to it
hgs
parents:
diff changeset
   178
 */
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
/*!
hgs
parents:
diff changeset
   181
 * Add to recent urls
hgs
parents:
diff changeset
   182
 * @param url: url to be added to recent url list
hgs
parents:
diff changeset
   183
 * @param title: title for this item in recent url list
hgs
parents:
diff changeset
   184
 * @param icon: icon to be added for this item in recent url list
hgs
parents:
diff changeset
   185
 */
hgs
parents:
diff changeset
   186
Q_DECL_EXPORT void HistoryManager::addHistory(const QString &url, const QString &title)
hgs
parents:
diff changeset
   187
{
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
    //Check for a valid history entry
hgs
parents:
diff changeset
   190
    if (url.isEmpty() || title.isEmpty())
hgs
parents:
diff changeset
   191
        return;
hgs
parents:
diff changeset
   192
    
hgs
parents:
diff changeset
   193
    bool enabled = (bool) BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->valueAsInt("SaveHistory");
hgs
parents:
diff changeset
   194
    if(!enabled)
hgs
parents:
diff changeset
   195
      return;
hgs
parents:
diff changeset
   196
    
hgs
parents:
diff changeset
   197
    QDateTime currentDateTime = QDateTime::currentDateTime();
hgs
parents:
diff changeset
   198
    
hgs
parents:
diff changeset
   199
    HistoryLeaf* leaf=new HistoryLeaf();
hgs
parents:
diff changeset
   200
    leaf->setTitle(title);
hgs
parents:
diff changeset
   201
    leaf->setUrl(url);
hgs
parents:
diff changeset
   202
    leaf->setDate(currentDateTime.date());
hgs
parents:
diff changeset
   203
    leaf->setLastVisited(currentDateTime.time());
hgs
parents:
diff changeset
   204
    
hgs
parents:
diff changeset
   205
    if (d->m_connectedToHistory){
hgs
parents:
diff changeset
   206
        if(ErrNone == d->m_historySession->addHistory(leaf)){
hgs
parents:
diff changeset
   207
          d->m_actionClearHistory->setEnabled(true);
hgs
parents:
diff changeset
   208
        }
hgs
parents:
diff changeset
   209
    }
hgs
parents:
diff changeset
   210
    delete leaf;
hgs
parents:
diff changeset
   211
}
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
/*!
hgs
parents:
diff changeset
   214
 * Add to recent urls
hgs
parents:
diff changeset
   215
 * @param url: url to be added to recent url list
hgs
parents:
diff changeset
   216
 * @param title: title for this item in recent url list
hgs
parents:
diff changeset
   217
 * @param icon: icon to be added for this item in recent url list
hgs
parents:
diff changeset
   218
 */
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
void HistoryManager::addHistory(const QUrl &url, const QString &title)
hgs
parents:
diff changeset
   221
{
hgs
parents:
diff changeset
   222
    addHistory(url.toString(), title);
hgs
parents:
diff changeset
   223
}
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
/*!
hgs
parents:
diff changeset
   227
 * delete recent urls
hgs
parents:
diff changeset
   228
 * clears all the recent url list.
hgs
parents:
diff changeset
   229
 */
hgs
parents:
diff changeset
   230
void HistoryManager::clearHistory()
hgs
parents:
diff changeset
   231
{
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
    if (d->m_connectedToHistory) {
hgs
parents:
diff changeset
   234
        d->m_historySession->clearHistory();
hgs
parents:
diff changeset
   235
    }
hgs
parents:
diff changeset
   236
    
hgs
parents:
diff changeset
   237
    d->m_actionClearHistory->setEnabled(false);
hgs
parents:
diff changeset
   238
    
hgs
parents:
diff changeset
   239
    emit historyCleared();
hgs
parents:
diff changeset
   240
}
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
QAction * HistoryManager::getActionClearHistory()
hgs
parents:
diff changeset
   243
{
hgs
parents:
diff changeset
   244
    return d->m_actionClearHistory;
hgs
parents:
diff changeset
   245
}
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
int HistoryManager::getPageRank(const QString &url)
hgs
parents:
diff changeset
   248
{
hgs
parents:
diff changeset
   249
 //Check for a valid entry
hgs
parents:
diff changeset
   250
    if (url.isNull())
hgs
parents:
diff changeset
   251
        return 0;
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
    int rank = 0;
hgs
parents:
diff changeset
   254
	QList<HistoryLeaf*> historyNodes = d->m_historySession->fetchHistory();
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
    for (int i=0; i < historyNodes.count(); i++) {
hgs
parents:
diff changeset
   257
      //Update rank if there is a history for this URL.
hgs
parents:
diff changeset
   258
        if (!historyNodes[i]->getUrl().compare(url))
hgs
parents:
diff changeset
   259
           rank++;
hgs
parents:
diff changeset
   260
    }
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
	while (!historyNodes.isEmpty())
hgs
parents:
diff changeset
   263
     delete historyNodes.takeFirst();
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
    return rank;
hgs
parents:
diff changeset
   266
}
14
6aeb7a756187 201037_03
hgs
parents: 12
diff changeset
   267
6aeb7a756187 201037_03
hgs
parents: 12
diff changeset
   268
QMap<QString, QString> HistoryManager::findHistory(QString title)
6aeb7a756187 201037_03
hgs
parents: 12
diff changeset
   269
{
6aeb7a756187 201037_03
hgs
parents: 12
diff changeset
   270
    return d->m_historySession->findSimilarHistoryItems(title);
6aeb7a756187 201037_03
hgs
parents: 12
diff changeset
   271
}