Create web page file source.

GitOrigin-RevId: 3e920c90df20cf24a1911124323ef4b258b72463
This commit is contained in:
levlam 2019-01-22 01:32:13 +03:00
parent dcdf4fae36
commit 542eb9e5c0
2 changed files with 35 additions and 3 deletions

View File

@ -70,7 +70,7 @@ FileSourceId FileReferenceManager::create_wallpapers_file_source() {
FileSourceId FileReferenceManager::create_web_page_file_source(string url) { FileSourceId FileReferenceManager::create_web_page_file_source(string url) {
FileSourceWebPage source{std::move(url)}; FileSourceWebPage source{std::move(url)};
return add_file_source_id(std::move(source), PSLICE() << "web page of " << url); return add_file_source_id(std::move(source), PSLICE() << "web page of " << source.url);
} }
FileSourceId FileReferenceManager::create_saved_animations_file_source() { FileSourceId FileReferenceManager::create_saved_animations_file_source() {

View File

@ -17,9 +17,11 @@
#include "td/telegram/ContactsManager.h" #include "td/telegram/ContactsManager.h"
#include "td/telegram/DocumentsManager.h" #include "td/telegram/DocumentsManager.h"
#include "td/telegram/DocumentsManager.hpp" #include "td/telegram/DocumentsManager.hpp"
#include "td/telegram/FileReferenceManager.h"
#include "td/telegram/files/FileId.h" #include "td/telegram/files/FileId.h"
#include "td/telegram/files/FileManager.h" #include "td/telegram/files/FileManager.h"
#include "td/telegram/files/FileManager.hpp" #include "td/telegram/files/FileManager.hpp"
#include "td/telegram/files/FileSourceId.h"
#include "td/telegram/Global.h" #include "td/telegram/Global.h"
#include "td/telegram/logevent/LogEvent.h" #include "td/telegram/logevent/LogEvent.h"
#include "td/telegram/MessageEntity.h" #include "td/telegram/MessageEntity.h"
@ -191,6 +193,8 @@ class WebPagesManager::WebPage {
FileId document_file_id; FileId document_file_id;
WebPageInstantView instant_view; WebPageInstantView instant_view;
FileSourceId file_source_id;
mutable uint64 logevent_id = 0; mutable uint64 logevent_id = 0;
template <class T> template <class T>
@ -1504,6 +1508,10 @@ WebPageId WebPagesManager::on_get_web_page(tl_object_ptr<telegram_api::WebPage>
binlog_erase(G()->td_db()->get_binlog(), web_page_to_delete->logevent_id); binlog_erase(G()->td_db()->get_binlog(), web_page_to_delete->logevent_id);
web_page_to_delete->logevent_id = 0; web_page_to_delete->logevent_id = 0;
} }
if (web_page_to_delete->file_source_id.is_valid()) {
td_->file_manager_->change_files_source(web_page_to_delete->file_source_id,
get_web_page_file_ids(web_page_to_delete), vector<FileId>());
}
web_pages_.erase(web_page_id); web_pages_.erase(web_page_id);
} }
@ -1612,6 +1620,7 @@ void WebPagesManager::update_web_page(unique_ptr<WebPage> web_page, WebPageId we
CHECK(web_page != nullptr); CHECK(web_page != nullptr);
auto &page = web_pages_[web_page_id]; auto &page = web_pages_[web_page_id];
auto old_file_ids = get_web_page_file_ids(page.get());
WebPageInstantView old_instant_view; WebPageInstantView old_instant_view;
if (page != nullptr) { if (page != nullptr) {
old_instant_view = std::move(page->instant_view); old_instant_view = std::move(page->instant_view);
@ -1621,6 +1630,15 @@ void WebPagesManager::update_web_page(unique_ptr<WebPage> web_page, WebPageId we
update_web_page_instant_view(web_page_id, page->instant_view, std::move(old_instant_view)); update_web_page_instant_view(web_page_id, page->instant_view, std::move(old_instant_view));
auto new_file_ids = get_web_page_file_ids(page.get());
if (old_file_ids != new_file_ids) {
if (!page->file_source_id.is_valid()) {
LOG(ERROR) << page->url;
page->file_source_id = td_->file_reference_manager_->create_web_page_file_source(page->url);
}
td_->file_manager_->change_files_source(page->file_source_id, old_file_ids, new_file_ids);
}
on_get_web_page_by_url(page->url, web_page_id, from_database); on_get_web_page_by_url(page->url, web_page_id, from_database);
update_messages_content(web_page_id, true); update_messages_content(web_page_id, true);
@ -1935,7 +1953,7 @@ void WebPagesManager::on_load_web_page_instant_view_from_database(WebPageId web_
update_web_page_instant_view_load_requests(web_page_id, true, Unit()); update_web_page_instant_view_load_requests(web_page_id, true, Unit());
return; return;
} }
auto web_page = web_page_it->second.get(); WebPage *web_page = web_page_it->second.get();
auto &web_page_instant_view = web_page->instant_view; auto &web_page_instant_view = web_page->instant_view;
if (web_page_instant_view.was_loaded_from_database) { if (web_page_instant_view.was_loaded_from_database) {
return; return;
@ -1952,8 +1970,19 @@ void WebPagesManager::on_load_web_page_instant_view_from_database(WebPageId web_
} }
result.was_loaded_from_database = true; result.was_loaded_from_database = true;
auto old_file_ids = get_web_page_file_ids(web_page);
update_web_page_instant_view(web_page_id, web_page_instant_view, std::move(result)); update_web_page_instant_view(web_page_id, web_page_instant_view, std::move(result));
auto new_file_ids = get_web_page_file_ids(web_page);
if (old_file_ids != new_file_ids) {
if (!web_page->file_source_id.is_valid()) {
LOG(ERROR) << web_page->url;
web_page->file_source_id = td_->file_reference_manager_->create_web_page_file_source(web_page->url);
}
td_->file_manager_->change_files_source(web_page->file_source_id, old_file_ids, new_file_ids);
}
update_web_page_instant_view_load_requests(web_page_id, false, Unit()); update_web_page_instant_view_load_requests(web_page_id, false, Unit());
} }
@ -2868,7 +2897,10 @@ string WebPagesManager::get_web_page_search_text(WebPageId web_page_id) const {
} }
vector<FileId> WebPagesManager::get_web_page_file_ids(const WebPage *web_page) { vector<FileId> WebPagesManager::get_web_page_file_ids(const WebPage *web_page) {
CHECK(web_page != nullptr); if (web_page == nullptr) {
return vector<FileId>();
}
vector<FileId> result = photo_get_file_ids(web_page->photo); vector<FileId> result = photo_get_file_ids(web_page->photo);
if (web_page->document_file_id.is_valid()) { if (web_page->document_file_id.is_valid()) {
result.push_back(web_page->document_file_id); result.push_back(web_page->document_file_id);