From 4e1a5c3eebf50657629e2b4eba13649c2b599598 Mon Sep 17 00:00:00 2001 From: tpearson Date: Wed, 3 Feb 2010 02:45:19 +0000 Subject: Added abandoned KDE3 version of katapult git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/katapult@1084407 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- .../catalogs/bookmarkcatalog/bookmarkcatalog.cpp | 212 +++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 katapult/plugins/catalogs/bookmarkcatalog/bookmarkcatalog.cpp (limited to 'katapult/plugins/catalogs/bookmarkcatalog/bookmarkcatalog.cpp') diff --git a/katapult/plugins/catalogs/bookmarkcatalog/bookmarkcatalog.cpp b/katapult/plugins/catalogs/bookmarkcatalog/bookmarkcatalog.cpp new file mode 100644 index 0000000..e70d65f --- /dev/null +++ b/katapult/plugins/catalogs/bookmarkcatalog/bookmarkcatalog.cpp @@ -0,0 +1,212 @@ +/*************************************************************************** + * Copyright (C) 2005 by Joe Ferris * + * jferris@optimistictech.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) any later version. * + * * + * 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, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "bookmarkcatalog.h" +#include "bookmark.h" +#include "mozillabookmark.h" +#include "settings.h" +#include "actionregistry.h" +#include "actionopenbookmark.h" + +K_EXPORT_COMPONENT_FACTORY( katapult_bookmarkcatalog, + KGenericFactory( "katapult_bookmarkcatalog" ) ) + +BookmarkCatalog::BookmarkCatalog(QObject *, const char *, const QStringList&) + : CachedCatalog() +{ + manager = KBookmarkManager::userBookmarksManager(); + _minQueryLen = 1; + ActionRegistry::self()->registerAction(new ActionOpenBookmark()); +} + + +BookmarkCatalog::~BookmarkCatalog() +{ +} + +void BookmarkCatalog::initialize() +{ + if(manager != 0) + cacheBookmarkList(manager->root()); + if(_mozEnabled) + cacheMozillaBookmarks(); +} + +void BookmarkCatalog::cacheBookmarkList(KBookmarkGroup group) +{ + KBookmark bookmark = group.first(); + while(!bookmark.isNull()) { + if (bookmark.isGroup()) { + cacheBookmarkList(bookmark.toGroup()); + } else { + addItem(new Bookmark(bookmark)); + } + bookmark = group.next(bookmark); + } +} + +void BookmarkCatalog::cacheMozillaBookmarks() +{ + if(_mozAuto) + _mozFile = detectMozillaFile(); + + if(_mozFile.isEmpty()) + return; + + QFile bmFile(_mozFile); + if(!bmFile.open(IO_ReadOnly)) + return; + + QString contents = bmFile.readAll(); + QRegExp rx("]+>([^<]+)"); + int pos = 0; + while(pos > -1) { + pos = rx.search(contents, pos); + if(pos > -1) { + addItem(new MozillaBookmark(rx.cap(1), rx.cap(2), QPixmap())); + pos += rx.matchedLength(); + } + } +} + +QString BookmarkCatalog::detectMozillaFile() +{ + QStringList testDirs; + testDirs << ".firefox" << ".mozilla" << ".phoenix" << ".netscape"; + QDir home = QDir::home(); + for(QStringList::Iterator it = testDirs.begin(); it != testDirs.end(); ++it) { + QString testDir = *it; + if(home.exists(testDir)) { + QDir mozDir = QDir(home.path()+"/"+testDir).canonicalPath(); + if(mozDir.dirName() != testDir && testDirs.contains(mozDir.dirName())) + continue; + QString path = searchMozDir(mozDir.path()); + if(!path.isEmpty()) + return path; + } + } + + return ""; +} + +QString BookmarkCatalog::searchMozDir(QString path) +{ + QDir dir(path); + if(dir.exists("bookmarks.html")) { + return path+"/bookmarks.html"; + } + QStringList entries = dir.entryList(QDir::Dirs | QDir::NoSymLinks); + for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) { + if(*it != "." && *it != ".."){ + QString result = searchMozDir(path + "/" + *it); + if(!result.isEmpty()) + return result; + } + } + return QString::null; +} + +unsigned int BookmarkCatalog::minQueryLen() const +{ + return _minQueryLen; +} + +void BookmarkCatalog::readSettings(KConfigBase *config) +{ + _minQueryLen = config->readUnsignedNumEntry("MinQueryLen", 3); + _mozEnabled = config->readBoolEntry("MozEnabled", TRUE); + _mozAuto = config->readBoolEntry("MozAuto", TRUE); + _mozFile = config->readEntry("MozFile", ""); +} + +void BookmarkCatalog::writeSettings(KConfigBase *config) +{ + config->writeEntry("MinQueryLen", _minQueryLen); + config->writeEntry("MozEnabled", _mozEnabled); + config->writeEntry("MozAuto", _mozAuto); + config->writeEntry("MozFile", _mozFile); +} + +QWidget * BookmarkCatalog::configure() +{ + settings = new BookmarkCatalogSettings(); + + settings->minQueryLen->setValue(_minQueryLen); + connect(settings->minQueryLen, SIGNAL(valueChanged(int)), this, SLOT(minQueryLenChanged(int))); + + settings->mozEnabled->setChecked(_mozEnabled); + connect(settings->mozEnabled, SIGNAL(toggled(bool)), this, SLOT(toggleMozEnabled(bool))); + + settings->mozAuto->setChecked(_mozAuto); + connect(settings->mozAuto, SIGNAL(toggled(bool)), this, SLOT(toggleMozAuto(bool))); + + settings->mozManual->setChecked(!_mozAuto); + + settings->mozFile->setURL(_mozFile); + connect(settings->mozFile, SIGNAL(urlSelected(const QString &)), this, SLOT(changeMozFile(const QString &))); + + settings->mozAuto->setEnabled(_mozEnabled); + settings->mozManual->setEnabled(_mozEnabled); + settings->mozFile->setEnabled(_mozEnabled && !_mozAuto); + + return settings; +} + +void BookmarkCatalog::minQueryLenChanged(int _minQueryLen) +{ + this->_minQueryLen = _minQueryLen; +} + +void BookmarkCatalog::toggleMozEnabled(bool _mozEnabled) +{ + this->_mozEnabled = _mozEnabled; + settings->mozAuto->setEnabled(_mozEnabled); + settings->mozManual->setEnabled(_mozEnabled); + settings->mozFile->setEnabled(_mozEnabled && !_mozAuto); +} + +void BookmarkCatalog::toggleMozAuto(bool _mozAuto) +{ + this->_mozAuto = _mozAuto; + settings->mozFile->setEnabled(!_mozAuto); +} + +void BookmarkCatalog::changeMozFile(const QString & _mozFile) +{ + this->_mozFile = _mozFile; +} + +#include "bookmarkcatalog.moc" -- cgit v1.2.1