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.
ktorrent/plugins/search/searchplugin.cpp

158 lines
4.9 KiB

/***************************************************************************
* Copyright (C) 2005 by Joris Guisson *
* joris.guisson@gmail.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 <kgenericfactory.h>
#include <kglobal.h>
#include <klocale.h>
#include <kiconloader.h>
#include <kstdaction.h>
#include <kpopupmenu.h>
#include <kapplication.h>
#include <kstandarddirs.h>
#include <krun.h>
#include <interfaces/guiinterface.h>
#include "searchplugin.h"
#include "searchwidget.h"
#include "searchprefpage.h"
#include "searchtab.h"
#include "searchpluginsettings.h"
#include "searchenginelist.h"
#define NAME "Search"
#define AUTHOR "Joris Guisson"
#define EMAIL "joris.guisson@gmail.com"
K_EXPORT_COMPONENT_FACTORY(ktsearchplugin,KGenericFactory<kt::SearchPlugin>("ktsearchplugin"))
namespace kt
{
SearchPlugin::SearchPlugin(TQObject* parent, const char* name, const TQStringList& args)
: Plugin(parent, name, args,NAME,i18n("Search"),AUTHOR,EMAIL,
i18n("Search for torrents on several popular torrent search engines"),"viewmag")
{
// setXMLFile("ktsearchpluginui.rc");
pref = 0;
tab = 0;
}
SearchPlugin::~SearchPlugin()
{}
void SearchPlugin::load()
{
engines.load(KGlobal::dirs()->saveLocation("data","ktorrent") + "search_engines");
KToolBar* tb = getGUI()->addToolBar("search");
tab = new SearchTab(tb);
connect(tab,TQT_SIGNAL(search( const TQString&, int, bool )),
this,TQT_SLOT(search( const TQString&, int, bool )));
pref = new SearchPrefPage(this);
getGUI()->addPrefPage(pref);
pref->updateData();
tab->updateSearchEngines(engines);
}
void SearchPlugin::unload()
{
tab->saveSettings();
SearchWidget* s = 0;
while ((s = searches.first()) != 0)
{
getGUI()->removeTabPage(s);
searches.removeFirst();
delete s;
}
getGUI()->removeToolBar(tab->getToolBar());
getGUI()->removePrefPage(pref);
delete pref;
pref = 0;
delete tab;
tab = 0;
}
void SearchPlugin::search(const TQString & text,int engine,bool external)
{
if(external)
{
const SearchEngineList& sl = getSearchEngineList();
if (engine < 0 || engine >= sl.getNumEngines())
engine = 0;
TQString s_url = sl.getSearchURL(engine).prettyURL();
s_url.replace("FOOBAR", KURL::encode_string(text), true);
KURL url = KURL::fromPathOrURL(s_url);
if(SearchPluginSettings::useDefaultBrowser())
kapp->invokeBrowser(url.url());
else
KRun::runCommand(TQString("%1 \"%2\"").tqarg(SearchPluginSettings::customBrowser()).tqarg(url.url()), SearchPluginSettings::customBrowser(), "viewmag" );
return;
}
KIconLoader* iload = KGlobal::iconLoader();
SearchWidget* search = new SearchWidget(this);
getGUI()->addTabPage(search,iload->loadIconSet("viewmag", KIcon::Small),text,this);
KAction* copy_act = KStdAction::copy(TQT_TQOBJECT(search),TQT_SLOT(copy()),actionCollection());
copy_act->plug(search->rightClickMenu(),0);
searches.append(search);
search->updateSearchEngines(engines);
search->search(text,engine);
}
void SearchPlugin::preferencesUpdated()
{
engines.load(KGlobal::dirs()->saveLocation("data","ktorrent") + "search_engines");
if (tab)
tab->updateSearchEngines(engines);
for (TQPtrList<SearchWidget>::iterator i = searches.begin(); i != searches.end();i++)
{
SearchWidget* w = *i;
w->updateSearchEngines(engines);
}
}
void SearchPlugin::tabCloseRequest(kt::GUIInterface* gui,TQWidget* tab)
{
if (searches.contains((SearchWidget*)tab))
{
searches.remove((SearchWidget*)tab);
gui->removeTabPage(tab);
tab->deleteLater();
}
}
bool SearchPlugin::versionCheck(const TQString & version) const
{
return version == KT_VERSION_MACRO;
}
}
#include "searchplugin.moc"