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.
tellico/src/fetch/fetcher.h

153 lines
4.4 KiB

/***************************************************************************
copyright : (C) 2003-2006 by Robby Stephenson
email : robby@periapsis.org
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of version 2 of the GNU General Public License as *
* published by the Free Software Foundation; *
* *
***************************************************************************/
#ifndef FETCHER_H
#define FETCHER_H
#include "fetch.h"
#include "../datavectors.h"
#include <kapplication.h> // for TDEApplication::random()
#include <tqobject.h>
#include <tqstring.h>
class KConfigGroup;
namespace Tellico {
namespace Fetch {
class ConfigWidget;
class MessageHandler;
class SearchResult;
/**
* The top-level abstract class for fetching data.
*
* @author Robby Stephenson
*/
class Fetcher : public TQObject, public KShared {
Q_OBJECT
public:
typedef KSharedPtr<Fetcher> Ptr;
typedef KSharedPtr<const Fetcher> CPtr;
/**
*/
Fetcher(TQObject* parent, const char* name = 0) : TQObject(parent, name), KShared(),
m_updateOverwrite(false), m_hasMoreResults(false),
m_messager(0) {}
/**
*/
virtual ~Fetcher();
/**
* Returns true if the fetcher might return entries from a certain collection type.
*/
virtual bool canFetch(int type) const = 0;
/**
* Returns true if the fetcher can search using a certain key.
*/
virtual bool canSearch(FetchKey key) const = 0;
virtual bool canUpdate() const { return true; }
/**
* Returns the type of the data source.
*/
virtual Type type() const = 0;
/**
* Returns the name of the data source, as defined by the user.
*/
virtual TQString source() const = 0;
/**
* Returns whether the fetcher will overwite existing info when updating
*/
bool updateOverwrite() const { return m_updateOverwrite; }
/**
* Starts a search, using a key and value.
*/
virtual void search(FetchKey key, const TQString& value) = 0;
virtual void continueSearch() {}
virtual void updateEntry(Data::EntryPtr);
// mopst fetchers won't support this. it's particular useful for text fetchers
virtual void updateEntrySynchronous(Data::EntryPtr) {}
/**
* Returns true if the fetcher is currently searching.
*/
virtual bool isSearching() const = 0;
/**
* Returns true if the fetcher can continue and fetch more results
* The fetcher is responsible for remembering state.
*/
virtual bool hasMoreResults() const { return m_hasMoreResults; }
/**
* Stops the fetcher.
*/
virtual void stop() = 0;
/**
* Fetches an entry, given the uid of the search result.
*/
virtual Data::EntryPtr fetchEntry(uint uid) = 0;
void setMessageHandler(MessageHandler* handler) { m_messager = handler; }
MessageHandler* messageHandler() const { return m_messager; }
/**
*/
void message(const TQString& message, int type) const;
void infoList(const TQString& message, const TQStringList& list) const;
/**
* Reads the config for the widget, given a config group.
*/
void readConfig(const KConfigGroup& config, const TQString& groupName);
/**
* Returns a widget for modifying the fetcher's config.
*/
virtual ConfigWidget* configWidget(TQWidget* parent) const = 0;
signals:
// void signalStatus(const TQString& status);
void signalResultFound(Tellico::Fetch::SearchResult* result);
void signalDone(Tellico::Fetch::Fetcher::Ptr);
protected:
TQString m_name;
bool m_updateOverwrite : 1;
bool m_hasMoreResults : 1;
private:
virtual void readConfigHook(const KConfigGroup&) = 0;
virtual void saveConfigHook(KConfigGroup&) {}
MessageHandler* m_messager;
TQString m_configGroup;
};
class SearchResult {
public:
SearchResult(Fetcher::Ptr f, const TQString& t, const TQString& d, const TQString& i)
: uid(TDEApplication::random()), fetcher(f), title(t), desc(d), isbn(i) {}
Data::EntryPtr fetchEntry();
uint uid;
Fetcher::Ptr fetcher;
TQString title;
TQString desc;
TQString isbn;
};
} // end namespace
} // end namespace
#endif