You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
katapult/katapult/plugins/catalogs/bookmarkcatalog/bookmarkcatalog.cpp

213 lines
6.3 KiB

/***************************************************************************
* 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 <kservicegroup.h>
#include <tdesycocaentry.h>
#include <tdesycocatype.h>
#include <kapplication.h>
#include <kbookmarkmanager.h>
#include <kbookmark.h>
#include <knuminput.h>
#include <kurlrequester.h>
#include <tqstring.h>
#include <tqradiobutton.h>
#include <tqbuttongroup.h>
#include <tqdir.h>
#include <tqregexp.h>
#include <tqfile.h>
#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<BookmarkCatalog>( "katapult_bookmarkcatalog" ) )
BookmarkCatalog::BookmarkCatalog(TQObject *, const char *, const TQStringList&)
: 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;
TQFile bmFile(_mozFile);
if(!bmFile.open(IO_ReadOnly))
return;
TQString contents = bmFile.readAll();
TQRegExp rx("<A HREF=\"([^\"]+)\" [^>]+>([^<]+)</A>");
int pos = 0;
while(pos > -1) {
pos = rx.search(contents, pos);
if(pos > -1) {
addItem(new MozillaBookmark(rx.cap(1), rx.cap(2), TQPixmap()));
pos += rx.matchedLength();
}
}
}
TQString BookmarkCatalog::detectMozillaFile()
{
TQStringList testDirs;
testDirs << ".firefox" << ".mozilla" << ".phoenix" << ".netscape";
TQDir home = TQDir::home();
for(TQStringList::Iterator it = testDirs.begin(); it != testDirs.end(); ++it) {
TQString testDir = *it;
if(home.exists(testDir)) {
TQDir mozDir = TQDir(home.path()+"/"+testDir).canonicalPath();
if(mozDir.dirName() != testDir && testDirs.contains(mozDir.dirName()))
continue;
TQString path = searchMozDir(mozDir.path());
if(!path.isEmpty())
return path;
}
}
return "";
}
TQString BookmarkCatalog::searchMozDir(TQString path)
{
TQDir dir(path);
if(dir.exists("bookmarks.html")) {
return path+"/bookmarks.html";
}
TQStringList entries = dir.entryList(TQDir::Dirs | TQDir::NoSymLinks);
for(TQStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
if(*it != "." && *it != ".."){
TQString result = searchMozDir(path + "/" + *it);
if(!result.isEmpty())
return result;
}
}
return TQString();
}
unsigned int BookmarkCatalog::minQueryLen() const
{
return _minQueryLen;
}
void BookmarkCatalog::readSettings(TDEConfigBase *config)
{
_minQueryLen = config->readUnsignedNumEntry("MinQueryLen", 3);
_mozEnabled = config->readBoolEntry("MozEnabled", TRUE);
_mozAuto = config->readBoolEntry("MozAuto", TRUE);
_mozFile = config->readEntry("MozFile", "");
}
void BookmarkCatalog::writeSettings(TDEConfigBase *config)
{
config->writeEntry("MinQueryLen", _minQueryLen);
config->writeEntry("MozEnabled", _mozEnabled);
config->writeEntry("MozAuto", _mozAuto);
config->writeEntry("MozFile", _mozFile);
}
TQWidget * BookmarkCatalog::configure()
{
settings = new BookmarkCatalogSettings();
settings->minQueryLen->setValue(_minQueryLen);
connect(settings->minQueryLen, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(minQueryLenChanged(int)));
settings->mozEnabled->setChecked(_mozEnabled);
connect(settings->mozEnabled, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(toggleMozEnabled(bool)));
settings->mozAuto->setChecked(_mozAuto);
connect(settings->mozAuto, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(toggleMozAuto(bool)));
settings->mozManual->setChecked(!_mozAuto);
settings->mozFile->setURL(_mozFile);
connect(settings->mozFile, TQT_SIGNAL(urlSelected(const TQString &)), this, TQT_SLOT(changeMozFile(const TQString &)));
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 TQString & _mozFile)
{
this->_mozFile = _mozFile;
}
#include "bookmarkcatalog.moc"