Enter InternalServer::m_library_id

The new field is intended to serve as a seed for generating semi-stable
OPDS feed ids that only need to change when the library is updated.
This commit is contained in:
Veloman Yunkan 2021-04-18 14:59:07 +04:00
parent feeb9f206e
commit 92c2de8d46
2 changed files with 7 additions and 5 deletions

View File

@ -170,6 +170,7 @@ bool InternalServer::start() {
} }
auto server_start_time = std::chrono::system_clock::now().time_since_epoch(); auto server_start_time = std::chrono::system_clock::now().time_since_epoch();
m_server_id = kiwix::to_string(server_start_time.count()); m_server_id = kiwix::to_string(server_start_time.count());
m_library_id = m_server_id;
return true; return true;
} }
@ -738,9 +739,9 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_root(const RequestCo
kainjow::mustache::object{ kainjow::mustache::object{
{"date", gen_date_str()}, {"date", gen_date_str()},
{"endpoint_root", root_url + "/catalog/v2"}, {"endpoint_root", root_url + "/catalog/v2"},
{"feed_id", gen_uuid(m_server_id)}, {"feed_id", gen_uuid(m_library_id)},
{"all_entries_feed_id", gen_uuid(m_server_id + "/entries")}, {"all_entries_feed_id", gen_uuid(m_library_id + "/entries")},
{"category_list_feed_id", gen_uuid(m_server_id + "/categories")} {"category_list_feed_id", gen_uuid(m_library_id + "/categories")}
}, },
"application/atom+xml;profile=opds-catalog;kind=navigation" "application/atom+xml;profile=opds-catalog;kind=navigation"
); );
@ -757,7 +758,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_categories(const Req
{"name", category}, {"name", category},
{"urlencoded_name", urlencodedCategoryName}, {"urlencoded_name", urlencodedCategoryName},
{"updated", now}, {"updated", now},
{"id", gen_uuid(m_server_id + "/categories/" + urlencodedCategoryName)} {"id", gen_uuid(m_library_id + "/categories/" + urlencodedCategoryName)}
}); });
} }
@ -767,7 +768,7 @@ std::unique_ptr<Response> InternalServer::handle_catalog_v2_categories(const Req
kainjow::mustache::object{ kainjow::mustache::object{
{"date", now}, {"date", now},
{"endpoint_root", root_url + "/catalog/v2"}, {"endpoint_root", root_url + "/catalog/v2"},
{"feed_id", gen_uuid(m_server_id + "/categories")}, {"feed_id", gen_uuid(m_library_id + "/categories")},
{"categories", categoryData } {"categories", categoryData }
}, },
"application/atom+xml;profile=opds-catalog;kind=navigation" "application/atom+xml;profile=opds-catalog;kind=navigation"

View File

@ -107,6 +107,7 @@ class InternalServer {
NameMapper* mp_nameMapper; NameMapper* mp_nameMapper;
std::string m_server_id; std::string m_server_id;
std::string m_library_id;
friend std::unique_ptr<Response> Response::build(const InternalServer& server); friend std::unique_ptr<Response> Response::build(const InternalServer& server);
friend std::unique_ptr<ContentResponse> ContentResponse::build(const InternalServer& server, const std::string& content, const std::string& mimetype, bool isHomePage); friend std::unique_ptr<ContentResponse> ContentResponse::build(const InternalServer& server, const std::string& content, const std::string& mimetype, bool isHomePage);