Index: ions/ion_envcan.cpp =================================================================== --- ions/ion_envcan.cpp (revision 679051) +++ ions/ion_envcan.cpp (working copy) @@ -39,7 +39,6 @@ void EnvCanadaIon::fetch() { // Go read the city's XML file qDebug() << "EnvCanadaIon::fetch() called"; - m_xml.clear(); getXMLData(); } @@ -70,6 +69,7 @@ qDebug() << "URL Location: " << url.url(); m_job = KIO::get (url.url(), true, false); + m_jobXml.insert(m_job, new QXmlStreamReader); m_jobList.insert(m_job, key); //KIO::TransferJob *XMLjob = KIO::get (url.url(), true, false); @@ -97,18 +97,21 @@ Q_UNUSED(job) qDebug("EnvCanadaIon::slotDataArrived(): Called"); - if (data.isEmpty()) + if (data.isEmpty() || !m_jobXml.contains(job)) return; // Send to xml. - m_xml.addData(data.data()); + m_jobXml[job]->addData(data.data()); } void EnvCanadaIon::slotJobFinished (KJob *job) { Q_UNUSED(job) // Dual use method, if we're fetching location data to parse we need to do this first qDebug ("EnvCanadaIon::slotJobFinished() Called"); - readXMLData(m_jobList[job]); + readXMLData(m_jobList[job], *m_jobXml[job]); + m_jobList.remove(job); + delete m_jobXml[job]; + m_jobXml.remove(job); emit newData(); } @@ -166,47 +169,47 @@ return !m_xmlSetup.error(); } -bool EnvCanadaIon::readXMLData(QString key) { +bool EnvCanadaIon::readXMLData(QString key, QXmlStreamReader& xml) { qDebug() << "EnvCanadaIon::readXMLData() called"; - while (!m_xml.atEnd()) { - m_xml.readNext(); + while (!xml.atEnd()) { + xml.readNext(); - if (m_xml.isStartElement()) { + if (xml.isStartElement()) { - m_currentTag = m_xml.name().toString(); + m_currentTag = xml.name().toString(); // siteData - if (m_xml.name() == "siteData") + if (xml.name() == "siteData") qDebug() << "begin siteData TAG"; - if (m_xml.name() == "station") { + if (xml.name() == "station") { qDebug() << "*********************** KEY " << key; - m_stations.insert(key, m_xml.attributes().value("code").toString()); + m_stations.insert(key, xml.attributes().value("code").toString()); } //qDebug() << "Current Tag: " << m_currentTag; } - else if (m_xml.isEndElement()) { - if (m_xml.name() == "siteData") + else if (xml.isEndElement()) { + if (xml.name() == "siteData") qDebug() << "end siteData TAG"; } } - return !m_xml.error(); + return !xml.error(); } -void EnvCanadaIon::parseUnknownElement() { +void EnvCanadaIon::parseUnknownElement(QXmlStreamReader& xml) { - while (!m_xml.atEnd()) { - m_xml.readNext(); + while (!xml.atEnd()) { + xml.readNext(); - if (m_xml.isEndElement()) + if (xml.isEndElement()) break; - if (m_xml.isStartElement()) - parseUnknownElement(); + if (xml.isStartElement()) + parseUnknownElement(xml); } } @@ -218,8 +221,8 @@ QString EnvCanadaIon::country(QString key) { return m_stations[key]; } QString EnvCanadaIon::territory(QString key) { return m_territories[key]; } QString EnvCanadaIon::city(QString key) { return m_cities[key]; } -QString EnvCanadaIon::temperature(QString key) { return QString(); } -QString EnvCanadaIon::pressure(QString key) { return QString(); } -QString EnvCanadaIon::humidity(QString key) { return QString(); } +QString EnvCanadaIon::temperature(QString key) { Q_UNUSED(key) return QString(); } +QString EnvCanadaIon::pressure(QString key) { Q_UNUSED(key) return QString(); } +QString EnvCanadaIon::humidity(QString key) { Q_UNUSED(key) return QString(); } #include "ion_envcan.moc" Index: ions/ion_envcan.h =================================================================== --- ions/ion_envcan.h (revision 679051) +++ ions/ion_envcan.h (working copy) @@ -71,6 +71,7 @@ QMap m_stations; + QMap m_jobXml; QMap m_jobList; // XML key codes QString m_code; @@ -80,13 +81,12 @@ void getXMLData(); void getXMLSetup(); - bool readXMLData(QString key); + bool readXMLData(QString key, QXmlStreamReader& xml); bool readXMLSetup(); - void parseUnknownElement(); + void parseUnknownElement(QXmlStreamReader& xml); // Member variables - QXmlStreamReader m_xml; QXmlStreamReader m_xmlSetup; KUrl *m_url; KIO::TransferJob *m_job;