/* * * This file is part of QMapControl, * an open-source cross-platform map widget * * Copyright (C) 2007 - 2008 Kai Winter * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with QMapControl. If not, see . * * Contact e-mail: kaiwinter@gmx.de * Program URL : http://qmapcontrol.sourceforge.net/ * */ #include "mapnetwork.h" #include namespace qmapcontrol { MapNetwork::MapNetwork(ImageManager* parent) :parent(parent), http(new QHttp(this)), loaded(0) { connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(requestFinished(int, bool))); } MapNetwork::~MapNetwork() { http->clearPendingRequests(); delete http; } void MapNetwork::loadImage(const QString& host, const QString& url) { // qDebug() << "getting: " << QString(host).append(url); // http->setHost(host); // int getId = http->get(url); http->setHost(host); QHttpRequestHeader header("GET", url); header.setValue("User-Agent", "Mozilla"); header.setValue("Host", host); int getId = http->request(header); if (vectorMutex.tryLock()) { loadingMap[getId] = url; vectorMutex.unlock(); } } void MapNetwork::requestFinished(int id, bool error) { // sleep(1); // qDebug() << "MapNetwork::requestFinished" << http->state() << ", id: " << id; if (error) { qDebug() << "network error: " << http->errorString(); //restart query } else if (vectorMutex.tryLock()) { // check if id is in map? if (loadingMap.contains(id)) { QString url = loadingMap[id]; loadingMap.remove(id); vectorMutex.unlock(); // qDebug() << "request finished for id: " << id << ", belongs to: " << notifier.url << endl; QByteArray ax; if (http->bytesAvailable()>0) { QPixmap pm; ax = http->readAll(); if (pm.loadFromData(ax)) { loaded += pm.size().width()*pm.size().height()*pm.depth()/8/1024; // qDebug() << "Network loaded: " << (loaded); parent->receivedImage(pm, url); } else { qDebug() << "NETWORK_PIXMAP_ERROR: " << ax; } } } else vectorMutex.unlock(); } if (loadingMap.size() == 0) { // qDebug () << "all loaded"; parent->loadingQueueEmpty(); } } void MapNetwork::abortLoading() { http->clearPendingRequests(); if (vectorMutex.tryLock()) { loadingMap.clear(); vectorMutex.unlock(); } } bool MapNetwork::imageIsLoading(QString url) { return loadingMap.values().contains(url); } void MapNetwork::setProxy(QString host, int port) { #ifndef Q_WS_QWS // do not set proxy on qt/extended http->setProxy(host, port); #endif } }