diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/sync/googlesynchandler.cpp | 437 | ||||
| -rw-r--r-- | src/sync/googlesynchandler.h | 86 | ||||
| -rw-r--r-- | src/sync/sync_google_settings.ui | 83 | ||||
| -rw-r--r-- | src/sync/sync_host_type.ui | 7 | ||||
| -rw-r--r-- | src/sync/syncassistant.cpp | 3 | ||||
| -rw-r--r-- | src/sync/syncassistant.h | 1 | ||||
| -rw-r--r-- | src/sync/synccheckwidget.cpp | 7 | ||||
| -rw-r--r-- | src/sync/syncgooglesettingswidget.cpp | 60 | ||||
| -rw-r--r-- | src/sync/syncgooglesettingswidget.h | 52 | ||||
| -rw-r--r-- | src/sync/synchosttypewidget.cpp | 9 | ||||
| -rw-r--r-- | src/sync/syncmanager.cpp | 18 | 
12 files changed, 762 insertions, 4 deletions
| diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ac4fa87b..1180ad0d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -99,6 +99,7 @@ SET( rekonq_KDEINIT_SRCS      useragent/useragentwidget.cpp      #----------------------------------------      sync/ftpsynchandler.cpp +    sync/googlesynchandler.cpp      sync/syncassistant.cpp      sync/synchandler.cpp      sync/syncmanager.cpp @@ -107,6 +108,7 @@ SET( rekonq_KDEINIT_SRCS      sync/syncdatawidget.cpp      sync/synchosttypewidget.cpp      sync/syncftpsettingswidget.cpp +    sync/syncgooglesettingswidget.cpp  ) @@ -130,6 +132,7 @@ KDE4_ADD_UI_FILES( rekonq_KDEINIT_SRCS      sync/sync_check.ui      sync/sync_data.ui      sync/sync_ftp_settings.ui +    sync/sync_google_settings.ui      sync/sync_host_type.ui   ) diff --git a/src/sync/googlesynchandler.cpp b/src/sync/googlesynchandler.cpp new file mode 100644 index 00000000..801b7b62 --- /dev/null +++ b/src/sync/googlesynchandler.cpp @@ -0,0 +1,437 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> +* Copyright (C) 2011 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "googlesynchandler.h" +#include "googlesynchandler.moc" + +// Auto Includes +#include "rekonq.h" + +// Local Includes +#include "application.h" +#include "bookmarkmanager.h" + +// KDE Includes +#include <KStandardDirs> +#include <klocalizedstring.h> +#include <kbookmarkmanager.h> + +#include <QList> +#include <QWebPage> +#include <QWebFrame> +#include <QWebElement> +#include <QUrl> +#include <QWebSettings> +#include <QNetworkAccessManager> +#include <QNetworkReply> +#include <QDomDocument> + + +GoogleSyncHandler::GoogleSyncHandler(QObject *parent) +    : SyncHandler(parent) +    , _mode(RECEIVE_CHANGES) +    , _doLogin(false) +    , _isSyncing(false) +    , _reply(0) +    , _requestCount(0) +{ +    kDebug() << "Creating Google Bookmarks handler..."; +    _webPage.settings()->setAttribute(QWebSettings::AutoLoadImages, false); +    _webPage.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); +    connect(&_webPage, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); +} + + +void GoogleSyncHandler::initialLoadAndCheck() +{ +    if (!ReKonfig::syncEnabled()) +    { +        _firstTimeSynced = false; +        return; +    } + +    // Bookmarks +    if (ReKonfig::syncBookmarks()) +    { +        _mode = RECEIVE_CHANGES; +        startLogin(); +    } + +    if (ReKonfig::syncHistory()) +    { +        emit syncStatus(Rekonq::History, false, i18n("Not supported!")); +    } + +    if (ReKonfig::syncHistory()) +    { +        emit syncStatus(Rekonq::Passwords, false, i18n("Not supported!")); +    } +} + + +bool GoogleSyncHandler::syncRelativeEnabled(bool check) +{ +    if (!ReKonfig::syncEnabled()) +        return false; + +    if (!_firstTimeSynced) +        return false; + +    return check; +} + + +// --------------------------------------------------------------------------------------- + + +void GoogleSyncHandler::syncHistory() +{ +    kDebug() << "Syncing history not supported!"; +    emit syncStatus(Rekonq::History, false, i18n("Syncing history not supported!")); +    emit syncHistoryFinished(false); +} + + +void GoogleSyncHandler::syncPasswords() +{ +    kDebug() << "Syncing passwords not supported!"; +    emit syncStatus(Rekonq::Passwords, false, i18n("Syncing passwords not supported!")); +    emit syncPasswordsFinished(false); +} + + +void GoogleSyncHandler::syncBookmarks() +{ + +    if (_isSyncing) +    { +        kDebug() << "Sync already in progress!"; +        return; +    } +    _mode = SEND_CHANGES; +    startLogin(); +} + +void GoogleSyncHandler::startLogin() +{ +    if (ReKonfig::syncUser().isEmpty() || ReKonfig::syncPass().isEmpty()) +    { +        kDebug() << "No username or password!"; +        emit syncStatus(Rekonq::Bookmarks, false, i18n("No username or password!")); +        emit syncBookmarksFinished(false); +        return; +    } + +    _isSyncing = true; + +    _doLogin = true; + +    kDebug() << "Loading login page..."; +    _webPage.mainFrame()->load(QUrl("http://bookmarks.google.com/")); +} + +//Loading a webpage finished, what action to take is decided based on url we have loaded. +void GoogleSyncHandler::loadFinished(bool ok) +{ +    kDebug() << "Load Finished" << ok; +    if (!ok) +    { +        kDebug() << "Error loading: " << _webPage.mainFrame()->url(); +        emit syncStatus(Rekonq::Bookmarks, false, i18n( "Error loading: " + _webPage.mainFrame()->url().toEncoded())); + +        _isSyncing = false; +        return; +    } + +    kDebug() << _webPage.mainFrame()->url(); +    kDebug() << "Path : " << _webPage.mainFrame()->url().path(); + +    QString path = _webPage.mainFrame()->url().path(); + +    if (path == "/ServiceLogin" && _doLogin == true) +    { +        // Let's login to our Google account +        QWebFrame *frame = _webPage.mainFrame(); + +        QWebElement email = frame->findFirstElement("#Email"); +        QWebElement passwd = frame->findFirstElement("#Passwd"); +        QWebElement form = frame->findFirstElement("#gaia_loginform"); + + + +        email.setAttribute("value",ReKonfig::syncUser()); +        passwd.setAttribute("value",ReKonfig::syncPass()); +        form.evaluateJavaScript("this.submit();"); +        emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing in...")); + +        // Login only once +        _doLogin = false; +    } +    else if (path == "/bookmarks/") +    { +        //We get to this page after succesful login, let's fetch the bookmark list in Xml format. +        QNetworkAccessManager *qnam = _webPage.networkAccessManager(); +        QNetworkRequest request; +        request.setUrl(QUrl("http://www.google.com/bookmarks/?output=xml")); +        _reply = qnam->get(request); +        emit syncStatus(Rekonq::Bookmarks, true, i18n("Fetching bookmarks from server...")); +        connect(_reply, SIGNAL(finished()), this, SLOT(fetchingBookmarksFinished())); +    } +    else if (path == "/ServiceLoginAuth") +    { +        emit syncStatus(Rekonq::Bookmarks, false, i18n("Login failed!")); +        _isSyncing = false; +    } +    else if (path == "/bookmarks/mark") +    { +        QWebFrame *frame = _webPage.mainFrame(); + +        QString sigKey = frame->findFirstElement("input[name=sig]").attribute("value"); +        kDebug() << "Signature Key is : " << sigKey; + +        QNetworkAccessManager *qnam = _webPage.networkAccessManager(); + +        if (!_bookmarksToDelete.isEmpty()) +        { + +            for (QSet<QString>::const_iterator iter=_bookmarksToDelete.constBegin(); iter != _bookmarksToDelete.end(); ++iter) +            { +                QNetworkRequest request; +                request.setUrl(QUrl("https://www.google.com/bookmarks/mark?dlq=" + *iter + "&sig=" + sigKey)); + +                kDebug() << "Delete url is : " << request.url(); +                QNetworkReply *r = qnam->get(request); +                connect(r, SIGNAL(finished()), this, SLOT(updateBookmarkFinished())); +                ++_requestCount; +            } +        } + +        if (!_bookmarksToAdd.isEmpty()) +        { +            emit syncStatus(Rekonq::Bookmarks, true, i18n("Adding bookmarks on server...")); +            for (QSet<KUrl>::const_iterator iter=_bookmarksToAdd.constBegin(); iter != _bookmarksToAdd.end(); ++iter) +            { +                KBookmark bookmark = rApp->bookmarkManager()->bookmarkForUrl(*iter); +                QByteArray postData; +                postData.append("bkmk=" + QUrl::toPercentEncoding(bookmark.url().url().toUtf8())); +                postData.append("&title=" + QUrl::toPercentEncoding(bookmark.text().toUtf8())); +                postData.append("&annotation="); +                postData.append("&labels="); +                postData.append("&prev=/lookup"); +                postData.append("&sig=" + sigKey.toUtf8()); + +                QNetworkRequest request; +                request.setUrl(QUrl("https://www.google.com/bookmarks/mark?sig=" + sigKey +"&btnA")); +                request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); +                kDebug() << "Url: " << request.url(); +                kDebug() << "Post data is :" << postData; +                QNetworkReply *r = qnam->post(request, postData); +                connect(r, SIGNAL(finished()), this, SLOT(updateBookmarkFinished())); +                ++_requestCount; +            } +        } + +        _bookmarksToDelete.clear(); +        _bookmarksToAdd.clear(); + +    } +    else if (path == "/Logout") +    { +        //Session finished +        emit syncStatus(Rekonq::Bookmarks, true, i18n("Done!")); +        emit syncBookmarksFinished(true); +        _isSyncing = false; +    } +    else +    { +        kDebug() << "Unknown Response!"; +        _isSyncing = false; +    } + +} + +//We received bookmarks stored on server in xml format, now take the action based on which mode we are in. +void GoogleSyncHandler::fetchingBookmarksFinished() +{ +    QString data = _reply->readAll(); + +    QDomDocument doc("bookmarks"); +    doc.setContent(data); + +    QDomNodeList bookmarksOnServer = doc.elementsByTagName("bookmark"); +    emit syncStatus(Rekonq::Bookmarks, true, i18n("Reading bookmarks...")); + +    BookmarkManager *manager = rApp->bookmarkManager(); +    KBookmarkGroup root = manager->rootGroup(); + + +    if (_mode == RECEIVE_CHANGES) +    { + +        for (int i=0; i<bookmarksOnServer.size(); ++i) +        { + +            QString title = getChildElement(bookmarksOnServer.at(i),"title"); +            QString url = getChildElement(bookmarksOnServer.at(i),"url"); + +            KBookmark bookmark = manager->bookmarkForUrl(KUrl(url)); +            if (bookmark.isNull()) +            { +                //Add bookmark +                kDebug() << "Add bookmark"; +                emit syncStatus(Rekonq::Bookmarks, true, i18n("Adding bookmark ")); +                root.addBookmark(title.isEmpty() ? url : title, KUrl(url)); +                manager->manager()->emitChanged(root); +            } + +        } + +        // After receiving changes, we compare local bookmarks with Google bookmarks and if some bookmarks exist locally but not on Google Bookmarks, we add them. +        checkToAddGB(root, bookmarksOnServer); + +        if (!_bookmarksToAdd.isEmpty()) +        { +            kDebug() << "Getting sigkey"; +            _webPage.mainFrame()->load(QUrl("https://www.google.com/bookmarks/mark?op=add&hl=en")); +        } +        else +        { +            _webPage.mainFrame()->load(QUrl("https://accounts.google.com/Logout?hl=en")); +            emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing out...")); +        } +    } +    else +    { +        checkToAddGB(root, bookmarksOnServer); +        checkToDeleteGB(manager, bookmarksOnServer); + +        if (!_bookmarksToAdd.isEmpty() || !_bookmarksToDelete.isEmpty()) +        { +            kDebug() << "Getting sigkey"; +            _webPage.mainFrame()->load(QUrl("https://www.google.com/bookmarks/mark?op=add&hl=en")); +        } +        else +        { +            _webPage.mainFrame()->load(QUrl("https://accounts.google.com/Logout?hl=en")); +            emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing out...")); +        } +    } + +    _reply->deleteLater(); +} + +//Get value of a child element of a dom node +QString GoogleSyncHandler::getChildElement(const QDomNode &node, QString name) +{ +    QDomNodeList nodes = node.childNodes(); + +    for (int j=0; j<nodes.size(); ++j) +    { +        QDomElement element = nodes.at(j).toElement(); + +        if (nodes.at(j).nodeName() == name) +        { +            //kDebug() << "Url : " << element.text(); +            return element.text(); +        } +    } +    return NULL; +} + +//This method checks whether we have any other bookmarks than the ones which exist on the server +void GoogleSyncHandler::checkToAddGB(const KBookmarkGroup &root, const QDomNodeList &bookmarksOnServer) +{ +    KBookmark current = root.first(); + +    while (!current.isNull()) +    { +        kDebug() << "Checking Url to add on Google Bookmarks: " << current.url(); +        bool found = false; +        for (int i=0; i < bookmarksOnServer.count(); ++i) +        { +            if (current.isGroup()) +            { +                kDebug() << "Checking group" << current.text(); +                checkToAddGB(current.toGroup(), bookmarksOnServer); +                //skip adding a blank in _bookmarksToAdd +                found = true; +                break; +            } +            else if (current.url().url() == getChildElement(bookmarksOnServer.at(i),"url")) +            { +                found = true; +            } +        } + +        if (!found) +        { +            kDebug() <<  "Adding to Google Bookmarks: " << current.url().url(); +            _bookmarksToAdd.insert(current.url()); +        } +        current = root.next(current); +    } +} + +//Check whether we need to delete bookmarks while sending changes to Google Bookmarks +void GoogleSyncHandler::checkToDeleteGB(BookmarkManager *manager, const QDomNodeList &bookmarksOnServer) +{ + +    for (int i=0; i < bookmarksOnServer.count(); ++i) +    { +        QString url = getChildElement(bookmarksOnServer.at(i),"url"); + +        KBookmark result = manager->bookmarkForUrl(KUrl(url)); +        if (result.isNull()) +        { +            kDebug() <<  "Deleting from Google Bookmarks: " << url; +            _bookmarksToDelete.insert(getChildElement(bookmarksOnServer.at(i),"id")); +        } +    } + +} + + +//Added or deleted a bookmark on server, check whether we succeed here, and logout when all requests are done! +void GoogleSyncHandler::updateBookmarkFinished() +{ +    --_requestCount; +    QNetworkReply *reply = dynamic_cast<QNetworkReply*>(sender()); +    if (reply->error() != QNetworkReply::NoError) +        kDebug() << "Network Error while adding bookmark to server, code is: " << reply->error(); +    else if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) != 302) +        kDebug() << "Unexpected reply : " << reply->readAll(); +    else +        kDebug() << "Success!"; + +    if (_requestCount <= 0) +    { +        _webPage.mainFrame()->load(QUrl("https://accounts.google.com/Logout?hl=en")); +        emit syncStatus(Rekonq::Bookmarks, true, i18n("Signing out...")); +    } + +} diff --git a/src/sync/googlesynchandler.h b/src/sync/googlesynchandler.h new file mode 100644 index 00000000..2d70cfb7 --- /dev/null +++ b/src/sync/googlesynchandler.h @@ -0,0 +1,86 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> +* Copyright (C) 2011 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef GOOGLE_SYNC_HANDLER_H +#define GOOGLE_SYNC_HANDLER_H + +#include <QWebPage> + +// Local Includes +#include "synchandler.h" + +// KDE Includes +#include <KUrl> +#include <KBookmarkGroup> + +// Forward Declarations +class QNetworkReply; +class BookmarkManager; + +class GoogleSyncHandler : public SyncHandler +{ +    Q_OBJECT + +public: +    GoogleSyncHandler(QObject *parent = 0); + +    void syncHistory(); +    void syncBookmarks(); +    void syncPasswords(); + +    void initialLoadAndCheck(); + +private Q_SLOTS: +    void loadFinished(bool); +    void fetchingBookmarksFinished(); +    void updateBookmarkFinished(); + +Q_SIGNALS: +    void syncBookmarksFinished(bool); +    void syncHistoryFinished(bool); +    void syncPasswordsFinished(bool); + +private: +    bool syncRelativeEnabled(bool); +    void startLogin(); +    void checkToAddGB(const KBookmarkGroup &root, const QDomNodeList &); +    void checkToDeleteGB(BookmarkManager *, const QDomNodeList &); +    QString getChildElement(const QDomNode &node, QString name); +    void checkRequestCount(); + +    enum {SEND_CHANGES, RECEIVE_CHANGES} _mode; +    QUrl _remoteBookmarksUrl; +    bool _doLogin; +    bool _isSyncing; +    QWebPage _webPage; +    QNetworkReply *_reply; +    QSet<KUrl> _bookmarksToAdd; +    QSet<QString> _bookmarksToDelete; +    unsigned int _requestCount; +}; + +#endif // GOOGLE_SYNC_HANDLER_H diff --git a/src/sync/sync_google_settings.ui b/src/sync/sync_google_settings.ui new file mode 100644 index 00000000..d23d083b --- /dev/null +++ b/src/sync/sync_google_settings.ui @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SyncGoogleSettings</class> + <widget class="QWidget" name="SyncGoogleSettings"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>400</width> +    <height>300</height> +   </rect> +  </property> +  <layout class="QVBoxLayout" name="verticalLayout"> +   <item> +    <widget class="QGroupBox" name="googleGroupBox"> +     <property name="title"> +      <string>Google Account Settings</string> +     </property> +     <layout class="QFormLayout" name="formLayout"> +      <property name="fieldGrowthPolicy"> +       <enum>QFormLayout::ExpandingFieldsGrow</enum> +      </property> +      <item row="0" column="0"> +       <widget class="QLabel" name="label_2"> +        <property name="text"> +         <string>Username:</string> +        </property> +       </widget> +      </item> +      <item row="0" column="1"> +       <widget class="KLineEdit" name="kcfg_syncUser"/> +      </item> +      <item row="1" column="0"> +       <widget class="QLabel" name="label_3"> +        <property name="text"> +         <string>Password:</string> +        </property> +       </widget> +      </item> +      <item row="1" column="1"> +       <widget class="KLineEdit" name="kcfg_syncPass"/> +      </item> +     </layout> +    </widget> +   </item> +   <item> +    <widget class="QLabel" name="infoLabel"> +     <property name="styleSheet"> +      <string notr="true">QLabel { color : red; }</string> +     </property> +     <property name="text"> +      <string>Only bookmarks will be synchronized.</string> +     </property> +     <property name="alignment"> +      <set>Qt::AlignCenter</set> +     </property> +    </widget> +   </item> +   <item> +    <spacer name="verticalSpacer"> +     <property name="orientation"> +      <enum>Qt::Vertical</enum> +     </property> +     <property name="sizeHint" stdset="0"> +      <size> +       <width>20</width> +       <height>124</height> +      </size> +     </property> +    </spacer> +   </item> +  </layout> + </widget> + <customwidgets> +  <customwidget> +   <class>KLineEdit</class> +   <extends>QLineEdit</extends> +   <header>klineedit.h</header> +  </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/src/sync/sync_host_type.ui b/src/sync/sync_host_type.ui index 6eb875dc..ba96ab83 100644 --- a/src/sync/sync_host_type.ui +++ b/src/sync/sync_host_type.ui @@ -25,6 +25,13 @@         </widget>        </item>        <item> +       <widget class="QRadioButton" name="googleRadioButton"> +        <property name="text"> +         <string>Google Bookmarks</string> +        </property> +       </widget> +      </item> +      <item>         <widget class="QRadioButton" name="nullRadioButton">          <property name="text">           <string>/dev/null</string> diff --git a/src/sync/syncassistant.cpp b/src/sync/syncassistant.cpp index 8688d7bc..0e51e7b7 100644 --- a/src/sync/syncassistant.cpp +++ b/src/sync/syncassistant.cpp @@ -34,7 +34,7 @@  #include "synchosttypewidget.h"  #include "syncftpsettingswidget.h" - +#include "syncgooglesettingswidget.h"  SyncAssistant::SyncAssistant(QWidget *parent)      : QWizard(parent) @@ -44,5 +44,6 @@ SyncAssistant::SyncAssistant(QWidget *parent)      setPage(Page_Data, new SyncDataWidget(this));      setPage(Page_Type, new SyncHostTypeWidget(this));      setPage(Page_FTP_Settings, new SyncFTPSettingsWidget(this)); +    setPage(Page_Google_Settings, new SyncGoogleSettingsWidget(this));      setPage(Page_Check, new SyncCheckWidget(this));  } diff --git a/src/sync/syncassistant.h b/src/sync/syncassistant.h index 01b9647f..9853cb2d 100644 --- a/src/sync/syncassistant.h +++ b/src/sync/syncassistant.h @@ -42,6 +42,7 @@ public:          Page_Data,          Page_Type,          Page_FTP_Settings, +	Page_Google_Settings,          Page_Check      }; diff --git a/src/sync/synccheckwidget.cpp b/src/sync/synccheckwidget.cpp index 9dbf5fc3..27f19721 100644 --- a/src/sync/synccheckwidget.cpp +++ b/src/sync/synccheckwidget.cpp @@ -60,6 +60,11 @@ void SyncCheckWidget::initializePage()          syncLabel->setText(i18n("FTP"));          hostLabel->setText(ReKonfig::syncHost());      } +    else if (ReKonfig::syncType() == 1) +    { +        syncLabel->setText(i18n("Google")); +        hostLabel->setText(ReKonfig::syncHost()); +    }      else      {          syncLabel->setText(i18n("No sync")); @@ -129,6 +134,8 @@ void SyncCheckWidget::initializePage()  } + +  void SyncCheckWidget::updateWidget(Rekonq::SyncData type, bool done, QString msg)  {      KIcon doneIcon(QL1S("dialog-ok-apply")); diff --git a/src/sync/syncgooglesettingswidget.cpp b/src/sync/syncgooglesettingswidget.cpp new file mode 100644 index 00000000..c927a741 --- /dev/null +++ b/src/sync/syncgooglesettingswidget.cpp @@ -0,0 +1,60 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* Copyright (C) 2012 by Siteshwar Vashisht <siteshwar at gmail dot com> +* Copyright (C) 2011 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "syncgooglesettingswidget.h" +#include "syncgooglesettingswidget.moc" + +// Auto Includes +#include "rekonq.h" + +// Local Includes +#include "syncassistant.h" + + +SyncGoogleSettingsWidget::SyncGoogleSettingsWidget(QWidget *parent) +    : QWizardPage(parent) +{ +    setupUi(this); +    kcfg_syncUser->setText(ReKonfig::syncUser()); +    kcfg_syncPass->setText(ReKonfig::syncPass()); + +    kcfg_syncPass->setPasswordMode(true); +} + + +int SyncGoogleSettingsWidget::nextId() const +{ +    // save +    ReKonfig::setSyncHost("http://bookmarks.google.com/"); +    ReKonfig::setSyncUser(kcfg_syncUser->text()); +    ReKonfig::setSyncPass(kcfg_syncPass->text()); + +    ReKonfig::setSyncHistory(false); +    ReKonfig::setSyncPasswords(false); + +    return SyncAssistant::Page_Check; +} diff --git a/src/sync/syncgooglesettingswidget.h b/src/sync/syncgooglesettingswidget.h new file mode 100644 index 00000000..25c55dba --- /dev/null +++ b/src/sync/syncgooglesettingswidget.h @@ -0,0 +1,52 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2011 by Siteshwar Vashisht <siteshwar AT gmail.com>  +* Copyright (C) 2011 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef SYNC_GOOGLE_SETTINGS_WIDGET_H +#define SYNC_GOOGLE_SETTINGS_WIDGET_H + + +// Rekonq Includes +#include "rekonq_defines.h" + +// Ui Includes +#include "ui_sync_google_settings.h" + +// Qt Includes +#include <QWizardPage> + + +class SyncGoogleSettingsWidget : public QWizardPage, private Ui::SyncGoogleSettings +{ +    Q_OBJECT + +public: +    SyncGoogleSettingsWidget(QWidget *parent = 0); + +    int nextId() const; +}; + +#endif // SYNC_GOOGLE_SETTINGS_WIDGET_H diff --git a/src/sync/synchosttypewidget.cpp b/src/sync/synchosttypewidget.cpp index 0810182e..32fd1f9f 100644 --- a/src/sync/synchosttypewidget.cpp +++ b/src/sync/synchosttypewidget.cpp @@ -42,6 +42,8 @@ SyncHostTypeWidget::SyncHostTypeWidget(QWidget *parent)      if (ReKonfig::syncType() == 0)          ftpRadioButton->setChecked(true); +    else if(ReKonfig::syncType() == 1) +        googleRadioButton->setChecked(true);	      else          nullRadioButton->setChecked(true);  } @@ -55,9 +57,14 @@ int SyncHostTypeWidget::nextId() const          ReKonfig::setSyncType(0);          return SyncAssistant::Page_FTP_Settings;      } +	else if (googleRadioButton->isChecked()) +	{ +		ReKonfig::setSyncType(1); +		return SyncAssistant::Page_Google_Settings; +	}      else      { -        ReKonfig::setSyncType(1); +        ReKonfig::setSyncType(2);          return SyncAssistant::Page_Check;      } diff --git a/src/sync/syncmanager.cpp b/src/sync/syncmanager.cpp index de14703c..29e76414 100644 --- a/src/sync/syncmanager.cpp +++ b/src/sync/syncmanager.cpp @@ -38,6 +38,7 @@  #include "syncassistant.h"  #include "ftpsynchandler.h" +#include "googlesynchandler.h"  // KDE Includes  #include <klocalizedstring.h> @@ -68,10 +69,23 @@ void SyncManager::loadSettings()      if (ReKonfig::syncEnabled())      {          // reset syncer -        if (_syncImplementation.isNull()) +        if (!_syncImplementation.isNull())          { -            // actually we have just FTP handler... +            delete _syncImplementation.data(); +            _syncImplementation.clear(); +        } +         +        switch(ReKonfig::syncType()) +        { +        case 0:              _syncImplementation = new FTPSyncHandler(this); +            break; +        case 1: +            _syncImplementation = new GoogleSyncHandler(this); +            break; +        default: +            kDebug() << "/dev/null"; +            return;          }          _syncImplementation.data()->initialLoadAndCheck(); | 
