6 #include "CloudRouteModel.h"
10 #include "MarbleDebug.h"
11 #include "MarbleDirs.h"
17 #include <QNetworkRequest>
18 #include <QNetworkReply>
19 #include <QNetworkAccessManager>
23 class Q_DECL_HIDDEN CloudRouteModel::Private {
32 qint64 m_downloadedSize;
41 CloudRouteModel::Private::Private() :
45 m_cacheDir = MarbleDirs::localPath() +
QLatin1String(
"/cloudsync/cache/routes/");
48 CloudRouteModel::CloudRouteModel(
QObject* parent ) :
55 roles[ Name ] =
"name";
56 roles[ Timestamp ] =
"identifier";
57 roles[ PreviewUrl ] =
"previewUrl";
58 roles[ Distance ] =
"distance";
60 roles[ IsCached ] =
"isCached";
61 roles[ IsDownloading ] =
"isDownloading";
62 roles[ IsOnCloud ] =
"isOnCloud";
63 d->m_roleNames = roles;
66 CloudRouteModel::~CloudRouteModel()
73 if ( index.
isValid() && index.
row() >= 0 && index.
row() < d->m_items.size() ) {
76 case Timestamp:
return d->m_items.at( index.
row() ).identifier();
77 case Name:
return d->m_items.at( index.
row() ).name();
78 case PreviewUrl:
return d->m_items.at( index.
row() ).previewUrl();
79 case Distance:
return d->m_items.at( index.
row() ).distance();
80 case Duration:
return d->m_items.at( index.
row() ).duration();
81 case IsCached:
return isCached( index );
82 case IsDownloading:
return isDownloading( index );
83 case IsOnCloud:
return d->m_items.at( index.
row() ).onCloud();
90 int CloudRouteModel::rowCount(
const QModelIndex &parent )
const
92 return parent.
isValid() ? 0 : d->m_items.count();
97 return d->m_roleNames;
104 d->m_previewQueue.
clear();
105 d->m_requestedPreviews.clear();
109 bool CloudRouteModel::isCached(
const QModelIndex &index )
const
112 return cacheDir.exists();
117 return d->m_downloading;
122 d->m_downloading = index;
125 bool CloudRouteModel::isDownloading(
const QModelIndex &index )
const
127 return d->m_downloading == index;
130 qint64 CloudRouteModel::totalSize()
const
132 return d->m_totalSize;
135 qint64 CloudRouteModel::downloadedSize()
const
137 return d->m_downloadedSize;
142 QString timestamp = d->m_items.
at( index.
row() ).identifier();
143 if( d->m_items.at( index.
row() ).preview().isNull() && !d->m_requestedPreviews.contains( timestamp ) ) {
144 QUrl url( d->m_items.at( index.
row() ).previewUrl() );
147 d->m_previewQueue.insert( reply, index.
row() );
148 d->m_requestedPreviews.insert( timestamp );
151 return d->m_items.at( index.
row() ).preview();
156 int position = d->m_previewQueue.take( reply );
158 if( position >= d->m_items.count() ) {
162 RouteItem &route = d->m_items[ position ];
164 route.setPreview( icon );
165 d->m_requestedPreviews.remove( route.identifier() );
168 void CloudRouteModel::updateProgress( qint64 currentSize, qint64 totalSize )
170 d->m_totalSize = totalSize;
171 d->m_downloadedSize = currentSize;
172 dataChanged( d->m_downloading, d->m_downloading );
173 if( currentSize == totalSize ) {
176 d->m_downloadedSize = 0;
182 #include "moc_CloudRouteModel.cpp"