X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fcommon%2Feniro.cpp;h=0958893fdc296610416a6f501c829127aa342d27;hb=d187495fd3566da1ee1eb94cc313c2f561a0fac5;hp=b28760cba980039f1d8395bc5a286b403f5bdef4;hpb=3d3223aa45f7bb09fe7264f17aa75c3c16112c73;p=jenirok diff --git a/src/common/eniro.cpp b/src/common/eniro.cpp index b28760c..0958893 100644 --- a/src/common/eniro.cpp +++ b/src/common/eniro.cpp @@ -42,36 +42,27 @@ namespace "dk" }; - static const QString INVALID_LOGIN_STRING = QObject::tr("Invalid login details"); - static const QString TIMEOUT_STRING = QObject::tr("Request timed out"); + static const QString INVALID_LOGIN_STRING = "Invalid login details"; + static const QString TIMEOUT_STRING = "Request timed out"; static const QString PERSON_REGEXP = "(.*)(.*)"; static const QString YELLOW_REGEXP = "(.*)(.*)"; static const QString NUMBER_REGEXP = "
(.*)
"; static const QString LOGIN_CHECK = "]+)>"); - -Eniro::Eniro(Site site, QObject *parent): QObject(parent), site_(site), -username_(""), password_(""), loggedIn_(false), error_(NO_ERROR), -errorString_(""), maxResults_(DEFAULT_MAX_RESULTS), timeout_(0), timerId_(0), -findNumber_(true), pendingSearches_(), pendingNumberRequests_() +Eniro::Eniro(QObject *parent): Source(parent), site_(Eniro::FI), +loggedIn_(false), username_(""), password_(""), +timerId_(0), pendingSearches_(), pendingNumberRequests_() { - connect(&http_, SIGNAL(requestFinished(int, bool)), this, SLOT(httpReady(int, bool))); } Eniro::~Eniro() { - abort(); } void Eniro::abort() { - http_.abort(); + Source::abort(); for(searchMap::iterator sit = pendingSearches_.begin(); sit != pendingSearches_.end(); sit++) @@ -99,63 +90,32 @@ void Eniro::abort() pendingLoginRequests_.clear(); } -void Eniro::setMaxResults(unsigned int value) -{ - maxResults_ = value; -} - -void Eniro::setFindNumber(bool value) -{ - findNumber_ = value; -} - void Eniro::setSite(Eniro::Site site) { site_ = site; } -void Eniro::setTimeout(unsigned int ms) +void Eniro::timerEvent(QTimerEvent* t) { - timeout_ = ms; - resetTimeout(); -} + Q_UNUSED(t); -void Eniro::resetTimeout() -{ - if(timerId_) - { - killTimer(timerId_); - } - if(timeout_) - { - timerId_ = startTimer(timeout_); - } -} + int currentId = http_.currentId(); -void Eniro::timerEvent(QTimerEvent* t) -{ - if(t->timerId() == timerId_) + if(currentId) { - int currentId = http_.currentId(); + searchMap::const_iterator it = pendingSearches_.find(currentId); - if(currentId) + if(it != pendingSearches_.end()) { - searchMap::const_iterator it = pendingSearches_.find(currentId); + QVector results = it.value()->results; + SearchDetails details = it.value()->details; - if(it != pendingSearches_.end()) - { - QVector results = it.value()->results; - SearchDetails details = it.value()->details; + abort(); - abort(); + setError(TIMEOUT, TIMEOUT_STRING); - error_ = TIMEOUT; - errorString_ = TIMEOUT_STRING; - - emit requestFinished(results, details, true); - } + emit requestFinished(results, details, true); } - } } @@ -174,18 +134,7 @@ void Eniro::logout() loggedIn_ = false; } -void Eniro::testLogin() -{ - QUrl url = createUrl("", ""); - - url.addQueryItem("what", "mobwp"); - http_.setHost(url.host(), url.port(80)); - int id = http_.get(url.encodedPath() + '?' + url.encodedQuery()); - - pendingLoginRequests_.insert(id); -} - -bool Eniro::search(SearchDetails const& details) +void Eniro::search(SearchDetails const& details) { resetTimeout(); @@ -227,7 +176,7 @@ bool Eniro::search(SearchDetails const& details) http_.setHost(url.host(), url.port(80)); int id = http_.get(url.encodedPath() + '?' + url.encodedQuery()); - QVector results; + QVector results; // Store search data for later identification SearchData* newData = new SearchData; @@ -239,26 +188,11 @@ bool Eniro::search(SearchDetails const& details) // Store request id so that it can be identified later pendingSearches_[id] = newData; - return true; -} - -Eniro::Error Eniro::error() const -{ - return error_; } -const QString& Eniro::errorString() const +void Eniro::handleHttpData(int id, QString const& data) { - return errorString_; -} - -void Eniro::httpReady(int id, bool error) -{ - if(error) - { - qDebug() << "Error: " << http_.errorString(); - } - + qDebug() << "Handle:" << id; searchMap::const_iterator searchIt; numberMap::const_iterator numberIt; @@ -266,37 +200,17 @@ void Eniro::httpReady(int id, bool error) if((searchIt = pendingSearches_.find(id)) != pendingSearches_.end()) { - if(error) - { - error_ = CONNECTION_FAILURE; - errorString_ = http_.errorString(); - emitRequestFinished(id, searchIt.value(), true); - return; - } - - QString result(http_.readAll()); - + qDebug() << "Load results"; // Load results from html data - loadResults(id, result); + loadResults(id, data); } // Check if request is pending number requests else if((numberIt = pendingNumberRequests_.find(id)) != pendingNumberRequests_.end()) { - if(error) - { - error_ = CONNECTION_FAILURE; - errorString_ = http_.errorString(); - delete pendingNumberRequests_[id]; - pendingNumberRequests_.remove(id); - return; - } - - QString result(http_.readAll()); - // Load number from html data - loadNumber(id, result); + loadNumber(id, data); } // Check for login request @@ -305,17 +219,8 @@ void Eniro::httpReady(int id, bool error) { bool success = true; - if(!error) - { - QString result(http_.readAll()); - - // If html source contains LOGIN_CHECK, login failed - if(result.indexOf(LOGIN_CHECK) != -1) - { - success = false; - } - } - else + // If html source contains LOGIN_CHECK, login failed + if(data.indexOf(LOGIN_CHECK) != -1) { success = false; } @@ -325,6 +230,37 @@ void Eniro::httpReady(int id, bool error) } +void Eniro::handleHttpError(int id) +{ + searchMap::const_iterator searchIt; + numberMap::const_iterator numberIt; + + // Check if request is pending search request + if((searchIt = pendingSearches_.find(id)) != + pendingSearches_.end()) + { + setError(CONNECTION_FAILURE, http_.errorString()); + emitRequestFinished(id, searchIt.value(), true); + } + + // Check if request is pending number requests + else if((numberIt = pendingNumberRequests_.find(id)) != + pendingNumberRequests_.end()) + { + setError(CONNECTION_FAILURE, http_.errorString()); + delete pendingNumberRequests_[id]; + pendingNumberRequests_.remove(id); + } + + // Check for login request + else if(pendingLoginRequests_.find(id) != + pendingLoginRequests_.end()) + { + emit loginStatus(false); + + } +} + // Loads results from html source code void Eniro::loadResults(int id, QString const& httpData) { @@ -417,7 +353,7 @@ void Eniro::loadResults(int id, QString const& httpData) // If phone number searh is enabled, we have to make another // request to find it out - if(findNumber_ && size < 4 && loggedIn_ && + if(getFindNumber() && size < 4 && loggedIn_ && it.value()->details.type != YELLOW_PAGES) { requestsPending = true; @@ -429,8 +365,10 @@ void Eniro::loadResults(int id, QString const& httpData) emit resultAvailable(result, it.value()->details); } + unsigned int maxResults = getMaxResults(); + // Stop searching if max results is reached - if(maxResults_ && (foundResults >= maxResults_)) + if(maxResults && (foundResults >= maxResults)) { break; } @@ -444,8 +382,7 @@ void Eniro::loadResults(int id, QString const& httpData) if(httpData.indexOf(LOGIN_CHECK) != -1) { - error_ = INVALID_LOGIN; - errorString_ = INVALID_LOGIN_STRING; + setError(INVALID_LOGIN, INVALID_LOGIN_STRING), error = true; } @@ -506,8 +443,7 @@ void Eniro::loadNumber(int id, QString const& result) if(error) { - error_ = INVALID_LOGIN; - errorString_ = INVALID_LOGIN; + setError(INVALID_LOGIN, INVALID_LOGIN_STRING); emitRequestFinished(searchIt.key(), searchIt.value(), true); } @@ -534,9 +470,11 @@ QUrl Eniro::createUrl(QString const& query, QString const& location) url.addQueryItem("geo_area", location); } - if(maxResults_) + unsigned int maxResults = getMaxResults(); + + if(maxResults) { - url.addQueryItem("hpp", QString::number(maxResults_)); + url.addQueryItem("hpp", QString::number(maxResults)); } if(loggedIn_) { @@ -544,8 +482,7 @@ QUrl Eniro::createUrl(QString const& query, QString const& location) url.addQueryItem("login_password", password_); } - QByteArray path = url.encodedQuery().replace('+', "%2B"); - url.setEncodedQuery(path); + fixUrl(url); return url; } @@ -568,44 +505,12 @@ void Eniro::getNumberForResult(int id, int index, SearchDetails const& details) void Eniro::emitRequestFinished(int key, SearchData* data, bool error) { - - // Do not emit "Request aborted" error - if(!(error && (http_.error() == QHttp::Aborted))) - { - emit requestFinished(data->results, data->details, error); - } - + emit requestFinished(data->results, data->details, error); delete pendingSearches_[key]; pendingSearches_[key] = 0; pendingSearches_.remove(key); } -QString Eniro::ucFirst(QString& str) -{ - if (str.size() < 1) { - return ""; - } - - QStringList tokens = str.split(" "); - QList::iterator tokItr; - - for (tokItr = tokens.begin(); tokItr != tokens.end(); ++tokItr) - { - (*tokItr) = (*tokItr).at(0).toUpper() + (*tokItr).mid(1); - } - - return tokens.join(" "); -} - -QString& Eniro::cleanUpNumber(QString& number) -{ - return number.replace(numberCleaner_, ""); -} - -QString& Eniro::stripTags(QString& string) -{ - return string.replace(tagStripper_, ""); -} QMap Eniro::getSites() { @@ -633,17 +538,9 @@ Eniro::Site Eniro::stringToSite(QString const& str) if(lower == SITE_NAMES[i] || lower == SITE_IDS[i]) { site = static_cast (i); + break; } } return site; } - -Eniro::SearchDetails::SearchDetails(QString const& q, - QString const& loc, - SearchType t) -{ - query = q; - location = loc; - type = t; -}