• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • tools
  • osm-sisyphus
jobmanager.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2011 Dennis Nienhüser <earthwings@gentoo.org>
9 //
10 
11 #include "jobmanager.h"
12 
13 #include <QTimer>
14 #include <QFile>
15 #include <QTextStream>
16 #include <QDebug>
17 #include <QProcess>
18 #include <QDomDocument>
19 
20 JobManager::JobManager(QObject *parent) :
21  QObject(parent)
22 {
23  QDir temp = QDir(QDir::tempPath());
24 
25  m_monavSettings = QFileInfo(temp, "monav_settings.ini");
26  QFile settingsFile(m_monavSettings.absoluteFilePath());
27  settingsFile.open(QFile::WriteOnly | QFile::Truncate);
28  QTextStream settingsStream(&settingsFile);
29 
30  settingsStream << "[General]\npackaging=false\ndictionarySize=16384\nblockSize=16384\n";
31  settingsStream << "importer=OpenStreetMap Importer\nrouter=Contraction Hierarchies";
32  settingsStream << "renderer=Mapnik Renderer\ngpsLookup=GPS Grid\naddressLookup=Unicode Tournament Trie\n\n";
33  settingsStream << "[OSM%20Importer]\nlanguages=name\nspeedProfile=:/speed profiles/motorcar.spp\n\n";
34  settingsStream << "[ContractionHierarchies]\nblockSize=12\n";
35  settingsFile.close();
36 }
37 
38 void JobManager::run()
39 {
40  update();
41 }
42 
43 void JobManager::setRegionsFile(const QString &filename)
44 {
45  QFile file(filename);
46  file.open(QFile::ReadOnly);
47 
48  QDomDocument xml;
49  if ( !xml.setContent( &file ) ) {
50  qDebug() << "Cannot parse xml file with regions.";
51  return;
52  }
53 
54  QDomElement root = xml.documentElement();
55  QDomNodeList regions = root.elementsByTagName( "region" );
56  for ( unsigned int i = 0; i < regions.length(); ++i ) {
57  Region region;
58  QDomNode node = regions.item( i );
59  if (!node.namedItem("continent").isNull()) {
60  region.setContinent(node.namedItem("continent").toElement().text());
61  }
62  if (!node.namedItem("country").isNull()) {
63  region.setCountry(node.namedItem("country").toElement().text());
64  }
65  if (!node.namedItem("name").isNull()) {
66  region.setName(node.namedItem("name").toElement().text());
67  }
68  if (!node.namedItem("id").isNull()) {
69  region.setId(node.namedItem("id").toElement().text());
70  }
71  if (!node.namedItem("path").isNull()) {
72  region.setPath(node.namedItem("path").toElement().text());
73  }
74  if (!node.namedItem("pbf").isNull()) {
75  region.setPbfFile(node.namedItem("pbf").toElement().text());
76  }
77  if (!node.namedItem("transport").isNull()) {
78  QStringList input = node.namedItem("transport").toElement().text().split(',', QString::SkipEmptyParts);
79  foreach( const QString &value, input ) {
80  if (!region.continent().isEmpty() && !region.name().isEmpty()) {
81  PendingJob job;
82  job.m_region = region;
83  job.m_transport = value.trimmed();
84  if (job.m_transport == "Motorcar") {
85  job.m_profile = "motorcar";
86  m_pendingJobs << job;
87  } else if (job.m_transport == "Bicycle") {
88  job.m_profile = "bicycle";
89  m_pendingJobs << job;
90  } else if (job.m_transport == "Pedestrian") {
91  job.m_profile = "foot";
92  m_pendingJobs << job;
93  } else {
94  qDebug() << "Invalid transport type " << job.m_transport
95  << " in .xml file, ignoring. Valid types are Motorcar, Bicycle and Pedestrian.";
96  }
97  }
98  }
99  }
100  }
101 }
102 
103 void JobManager::setResumeId(const QString &resumeId)
104 {
105  m_resumeId = resumeId;
106 }
107 
108 void JobManager::setJobParameters(const JobParameters &parameters)
109 {
110  m_jobParameters = parameters;
111 }
112 
113 void JobManager::update()
114 {
115  bool resume = m_resumeId.isEmpty();
116  foreach(const PendingJob &job, m_pendingJobs) {
117  resume = resume || job.m_region.id() == m_resumeId;
118  if (resume) {
119  addJob(job);
120  }
121  }
122 
123  QTimer::singleShot(1000*60*60*24, this, SLOT(update()));
124 }
125 
126 void JobManager::addJob(const PendingJob &job)
127 {
128  Job* countryJob = new Job(job.m_region, m_jobParameters);
130  countryJob->setTransport(job.m_transport);
131  countryJob->setProfile(job.m_profile);
132  countryJob->setMonavSettings(m_monavSettings.absoluteFilePath());
133  m_queue.addJob(countryJob);
134 }
135 
136 #include "jobmanager.moc"
QDomElement::elementsByTagName
QDomNodeList elementsByTagName(const QString &tagname) const
JobManager::setRegionsFile
void setRegionsFile(const QString &filename)
Definition: jobmanager.cpp:43
QDomNodeList::item
QDomNode item(int index) const
Job::setTransport
void setTransport(const QString &transport)
Definition: job.cpp:40
Job::setProfile
void setProfile(const QString &profile)
Definition: job.cpp:50
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
Job::setMonavSettings
void setMonavSettings(const QString &filename)
Definition: job.cpp:55
QDomNodeList
jobmanager.h
Region::setName
void setName(QString arg)
Definition: region.cpp:35
Job
Definition: job.h:21
JobManager::setJobParameters
void setJobParameters(const JobParameters &parameters)
Definition: jobmanager.cpp:108
JobManager::setResumeId
void setResumeId(const QString &resumeId)
Definition: jobmanager.cpp:103
Region::continent
QString continent
Definition: region.h:20
QDomDocument::documentElement
QDomElement documentElement() const
QDomNode
Region::setPbfFile
void setPbfFile(const QString &pbfFile)
Definition: region.cpp:65
JobManager::JobManager
JobManager(QObject *parent=0)
Definition: jobmanager.cpp:20
QFile
QTextStream
Region
Definition: region.h:18
QDomNode::toElement
QDomElement toElement() const
PendingJob::m_region
Region m_region
Definition: jobmanager.h:22
QDomElement::text
QString text() const
JobManager::run
void run()
Definition: jobmanager.cpp:38
QDir::tempPath
QString tempPath()
QObject
QFileInfo::absoluteFilePath
QString absoluteFilePath() const
QString::isEmpty
bool isEmpty() const
QString::trimmed
QString trimmed() const
QString
QFile::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > mode)
JobParameters
Definition: jobparameters.h:16
QStringList
PendingJob::m_transport
QString m_transport
Definition: jobmanager.h:23
Region::setPath
void setPath(const QString &path)
Definition: region.cpp:75
QFileInfo
QDomNode::namedItem
QDomNode namedItem(const QString &name) const
QDomDocument
PendingJob
Definition: jobmanager.h:21
QDomNode::isNull
bool isNull() const
Region::setCountry
void setCountry(QString arg)
Definition: region.cpp:45
QDir
Region::setId
void setId(const QString &id)
Definition: region.cpp:55
Region::id
QString id
Definition: region.h:24
JobQueue::addJob
void addJob(Job *job)
Definition: jobqueue.cpp:23
PendingJob::m_profile
QString m_profile
Definition: jobmanager.h:24
Region::setContinent
void setContinent(QString arg)
Definition: region.cpp:40
QDomNodeList::length
uint length() const
QDomElement
Region::name
QString name
Definition: region.h:22
QDomDocument::setContent
bool setContent(const QByteArray &data, bool namespaceProcessing, QString *errorMsg, int *errorLine, int *errorColumn)
QTimer::singleShot
singleShot
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:39 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal