| 211 | } |
| 212 | |
| 213 | void DownloadManager::addLoading(DownloadObject object) { |
| 214 | Expects(object.item != nullptr); |
| 215 | Expects(object.document != nullptr); |
| 216 | |
| 217 | const auto item = object.item; |
| 218 | auto &data = sessionData(item); |
| 219 | |
| 220 | const auto already = ranges::find(data.downloading, item, ByItem); |
| 221 | if (already != end(data.downloading)) { |
| 222 | const auto document = already->object.document; |
| 223 | const auto photo = already->object.photo; |
| 224 | if (document == object.document && photo == object.photo) { |
| 225 | check(item); |
| 226 | return; |
| 227 | } |
| 228 | remove(data, already); |
| 229 | } |
| 230 | |
| 231 | const auto size = object.document->size; |
| 232 | const auto path = object.document->loadingFilePath(); |
| 233 | if (path.isEmpty()) { |
| 234 | return; |
| 235 | } |
| 236 | |
| 237 | const auto shownExists = !data.downloading.empty() |
| 238 | && !data.downloading.front().hiddenByView; |
| 239 | data.downloading.push_back({ |
| 240 | .object = object, |
| 241 | .started = computeNextStartDate(), |
| 242 | .path = path, |
| 243 | .total = size, |
| 244 | .hiddenByView = (!shownExists |
| 245 | && item->history()->owner().queryItemVisibility(item)), |
| 246 | }); |
| 247 | _loading.emplace(item); |
| 248 | _loadingDocuments.emplace(object.document); |
| 249 | _loadingProgress = DownloadProgress{ |
| 250 | .ready = _loadingProgress.current().ready, |
| 251 | .total = _loadingProgress.current().total + size, |
| 252 | }; |
| 253 | _loadingListChanges.fire({}); |
| 254 | _clearLoadingTimer.cancel(); |
| 255 | |
| 256 | check(item); |
| 257 | } |
| 258 | |
| 259 | void DownloadManager::check(not_null<const HistoryItem*> item) { |
| 260 | auto &data = sessionData(item); |
no test coverage detected