#include <QtCore/QObject>
#include <QtCore/QString>
+#include <QtCore/QByteArray>
#include <QtCore/QVector>
#include <QtCore/QSet>
#include <QtCore/QRegExp>
#include <QtCore/QUrl>
+#include <QtCore/QTimerEvent>
#include <QtNetwork/QHttp>
+#include "source.h"
-class Eniro: public QObject
+class Eniro: public Source
{
Q_OBJECT
enum Site {FI, SE, DK};
- enum SearchType {YELLOW_PAGES, PERSONS};
-
- enum Error {NO_ERROR, CONNECTION_FAILURE, INVALID_LOGIN};
-
- struct Result
- {
- QString name;
- QString street;
- QString city;
- QString number;
- };
-
- struct SearchDetails
- {
- QString query;
- QString location;
- SearchType type;
- SearchDetails(QString const& query = "",
- QString const& location = "",
- SearchType type = PERSONS);
- };
-
struct SiteDetails
{
- QString name;
- QString id;
+ QString name;
+ QString id;
};
- Eniro(Site site, QObject *parent = 0);
+ static const int SITE_COUNT = 3;
+ Eniro(QObject *parent = 0);
~Eniro();
-
void login(QString const& username, QString const& password);
void logout();
- void testLogin();
void setSite(Site);
- void setMaxResults(unsigned int value);
- void setFindNumber(bool value);
- bool search(SearchDetails const& details);
- void abort();
- Error error() const;
- const QString& errorString() const;
+ virtual void search(Source::SearchDetails const& details);
+ virtual void abort();
static QMap<Site, SiteDetails> getSites();
static Site stringToSite(QString const& str);
signals:
- void resultAvailable(Eniro::Result const& result, Eniro::SearchDetails const& details);
- void requestFinished(QVector <Eniro::Result> const& results, Eniro::SearchDetails const& details, bool error);
void loginStatus(bool success);
-private slots:
- void httpReady(int id, bool error);
-
private:
- Q_DISABLE_COPY(Eniro);
+ Q_DISABLE_COPY(Eniro);
struct NumberData
{
struct SearchData
{
- SearchDetails details;
- QVector <Result> results;
+ Source::SearchDetails details;
+ QVector <Source::Result> results;
unsigned int foundNumbers;
unsigned int numbersTotal;
};
+ virtual void handleHttpData(int id, QByteArray const& data);
+ virtual void handleHttpError(int id);
QUrl createUrl(QString const& query, QString const& location);
void loadResults(int id, QString const& data);
void loadNumber(int id, QString const& data);
void getNumberForResult(int id, int index, SearchDetails const& details);
void emitRequestFinished(int key, SearchData* data, bool error);
- QString ucFirst(QString& string);
- QString& cleanUpNumber(QString& number);
- QString& stripTags(QString& string);
+ void timerEvent(QTimerEvent *t);
- QHttp http_;
Site site_;
+ bool loggedIn_;
QString username_;
QString password_;
- bool loggedIn_;
- Error error_;
- QString errorString_;
- unsigned int maxResults_;
- bool findNumber_;
+ int timerId_;
typedef QMap <int, SearchData*> searchMap;
typedef QMap <int, NumberData*> numberMap;
-
searchMap pendingSearches_;
numberMap pendingNumberRequests_;
QSet <int> pendingLoginRequests_;
-
static QRegExp numberCleaner_;
static QRegExp tagStripper_;