| 251 | } |
| 252 | |
| 253 | void HttpMetaCache::SaveNow() |
| 254 | { |
| 255 | if (m_index_file.isNull()) |
| 256 | return; |
| 257 | |
| 258 | qDebug() << "[HttpMetaCache]" << "Saving metacache with" << m_entries.size() << "entries"; |
| 259 | |
| 260 | QJsonObject toplevel; |
| 261 | Json::writeString(toplevel, "version", "1"); |
| 262 | |
| 263 | QJsonArray entriesArr; |
| 264 | for (auto group : m_entries) { |
| 265 | for (auto entry : group.entry_list) { |
| 266 | // do not save stale entries. they are dead. |
| 267 | if (entry->stale) { |
| 268 | continue; |
| 269 | } |
| 270 | |
| 271 | QJsonObject entryObj; |
| 272 | Json::writeString(entryObj, "base", entry->baseId); |
| 273 | Json::writeString(entryObj, "path", entry->relativePath); |
| 274 | Json::writeString(entryObj, "md5sum", entry->md5sum); |
| 275 | Json::writeString(entryObj, "etag", entry->etag); |
| 276 | entryObj.insert("last_changed_timestamp", QJsonValue(double(entry->local_changed_timestamp))); |
| 277 | if (!entry->remote_changed_timestamp.isEmpty()) |
| 278 | entryObj.insert("remote_changed_timestamp", QJsonValue(entry->remote_changed_timestamp)); |
| 279 | if (entry->isEternal()) { |
| 280 | entryObj.insert("eternal", true); |
| 281 | } else { |
| 282 | entryObj.insert("current_age", QJsonValue(double(entry->current_age))); |
| 283 | entryObj.insert("max_age", QJsonValue(double(entry->max_age))); |
| 284 | } |
| 285 | entriesArr.append(entryObj); |
| 286 | } |
| 287 | } |
| 288 | toplevel.insert("entries", entriesArr); |
| 289 | |
| 290 | try { |
| 291 | Json::write(toplevel, m_index_file); |
| 292 | } catch (const Exception& e) { |
| 293 | qWarning() << e.what(); |
| 294 | } |
| 295 | } |