mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 07:33:52 +02:00
Added initial ability to save and restore state for boosts info.
This commit is contained in:
parent
daf76c1bc2
commit
2ca489b2fb
4 changed files with 130 additions and 72 deletions
|
@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
#include "api/api_statistics.h"
|
#include "api/api_statistics.h"
|
||||||
#include "boxes/peers/edit_peer_invite_link.h"
|
#include "boxes/peers/edit_peer_invite_link.h"
|
||||||
|
#include "info/boosts/info_boosts_widget.h"
|
||||||
#include "info/info_controller.h"
|
#include "info/info_controller.h"
|
||||||
#include "info/statistics/info_statistics_list_controllers.h"
|
#include "info/statistics/info_statistics_list_controllers.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
|
@ -182,16 +183,25 @@ InnerWidget::InnerWidget(
|
||||||
, _controller(controller)
|
, _controller(controller)
|
||||||
, _peer(peer)
|
, _peer(peer)
|
||||||
, _show(controller->uiShow()) {
|
, _show(controller->uiShow()) {
|
||||||
const auto api = lifetime().make_state<Api::Boosts>(peer);
|
}
|
||||||
|
|
||||||
const auto fakeShowed = lifetime().make_state<rpl::event_stream<>>();
|
void InnerWidget::load() {
|
||||||
|
const auto api = lifetime().make_state<Api::Boosts>(_peer);
|
||||||
|
|
||||||
_showFinished.events(
|
_showFinished.events(
|
||||||
) | rpl::take(1) | rpl::start_with_next([=] {
|
) | rpl::take(1) | rpl::start_with_next([=] {
|
||||||
api->request(
|
api->request(
|
||||||
) | rpl::start_with_error_done([](const QString &error) {
|
) | rpl::start_with_error_done([](const QString &error) {
|
||||||
}, [=] {
|
}, [=] {
|
||||||
const auto status = api->boostStatus();
|
_state = api->boostStatus();
|
||||||
|
fill();
|
||||||
|
}, lifetime());
|
||||||
|
}, lifetime());
|
||||||
|
}
|
||||||
|
|
||||||
|
void InnerWidget::fill() {
|
||||||
|
const auto fakeShowed = lifetime().make_state<rpl::event_stream<>>();
|
||||||
|
const auto &status = _state;
|
||||||
const auto inner = this;
|
const auto inner = this;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -240,8 +250,8 @@ InnerWidget::InnerWidget(
|
||||||
Statistics::AddBoostsList(
|
Statistics::AddBoostsList(
|
||||||
status.firstSlice,
|
status.firstSlice,
|
||||||
inner,
|
inner,
|
||||||
[=](PeerPtr p) { controller->showPeerInfo(p); },
|
[=](PeerPtr p) { _controller->showPeerInfo(p); },
|
||||||
peer,
|
_peer,
|
||||||
tr::lng_boosts_title());
|
tr::lng_boosts_title());
|
||||||
::Settings::AddSkip(inner);
|
::Settings::AddSkip(inner);
|
||||||
::Settings::AddDividerText(
|
::Settings::AddDividerText(
|
||||||
|
@ -253,14 +263,26 @@ InnerWidget::InnerWidget(
|
||||||
::Settings::AddSkip(inner);
|
::Settings::AddSkip(inner);
|
||||||
AddHeader(inner, tr::lng_boosts_link_title);
|
AddHeader(inner, tr::lng_boosts_link_title);
|
||||||
::Settings::AddSkip(inner, st::boostsLinkSkip);
|
::Settings::AddSkip(inner, st::boostsLinkSkip);
|
||||||
FillShareLink(inner, _show, status.link, peer);
|
FillShareLink(inner, _show, status.link, _peer);
|
||||||
::Settings::AddSkip(inner);
|
::Settings::AddSkip(inner);
|
||||||
::Settings::AddDividerText(inner, tr::lng_boosts_link_subtext());
|
::Settings::AddDividerText(inner, tr::lng_boosts_link_subtext());
|
||||||
|
|
||||||
resizeToWidth(width());
|
resizeToWidth(width());
|
||||||
crl::on_main([=]{ fakeShowed->fire({}); });
|
crl::on_main([=]{ fakeShowed->fire({}); });
|
||||||
}, lifetime());
|
}
|
||||||
}, lifetime());
|
|
||||||
|
void InnerWidget::saveState(not_null<Memento*> memento) {
|
||||||
|
memento->setState(base::take(_state));
|
||||||
|
}
|
||||||
|
|
||||||
|
void InnerWidget::restoreState(not_null<Memento*> memento) {
|
||||||
|
_state = memento->state();
|
||||||
|
if (!_state.link.isEmpty()) {
|
||||||
|
fill();
|
||||||
|
} else {
|
||||||
|
load();
|
||||||
|
}
|
||||||
|
Ui::RpWidget::resizeToWidth(width());
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<Ui::ScrollToRequest> InnerWidget::scrollToRequests() const {
|
rpl::producer<Ui::ScrollToRequest> InnerWidget::scrollToRequests() const {
|
||||||
|
|
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "data/data_boosts.h"
|
||||||
#include "ui/widgets/scroll_area.h"
|
#include "ui/widgets/scroll_area.h"
|
||||||
#include "ui/wrap/vertical_layout.h"
|
#include "ui/wrap/vertical_layout.h"
|
||||||
|
|
||||||
|
@ -39,11 +40,19 @@ public:
|
||||||
|
|
||||||
void showFinished();
|
void showFinished();
|
||||||
|
|
||||||
|
void saveState(not_null<Memento*> memento);
|
||||||
|
void restoreState(not_null<Memento*> memento);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void load();
|
||||||
|
void fill();
|
||||||
|
|
||||||
not_null<Controller*> _controller;
|
not_null<Controller*> _controller;
|
||||||
not_null<PeerData*> _peer;
|
not_null<PeerData*> _peer;
|
||||||
std::shared_ptr<Ui::Show> _show;
|
std::shared_ptr<Ui::Show> _show;
|
||||||
|
|
||||||
|
Data::BoostStatus _state;
|
||||||
|
|
||||||
rpl::event_stream<Ui::ScrollToRequest> _scrollToRequests;
|
rpl::event_stream<Ui::ScrollToRequest> _scrollToRequests;
|
||||||
rpl::event_stream<ShowRequest> _showRequests;
|
rpl::event_stream<ShowRequest> _showRequests;
|
||||||
rpl::event_stream<> _showFinished;
|
rpl::event_stream<> _showFinished;
|
||||||
|
|
|
@ -31,6 +31,14 @@ Section Memento::section() const {
|
||||||
return Section(Section::Type::Boosts);
|
return Section(Section::Type::Boosts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Memento::setState(SavedState state) {
|
||||||
|
_state = std::move(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
Memento::SavedState Memento::state() {
|
||||||
|
return base::take(_state);
|
||||||
|
}
|
||||||
|
|
||||||
object_ptr<ContentWidget> Memento::createWidget(
|
object_ptr<ContentWidget> Memento::createWidget(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
not_null<Controller*> controller,
|
not_null<Controller*> controller,
|
||||||
|
@ -75,7 +83,7 @@ void Widget::setInternalState(
|
||||||
not_null<Memento*> memento) {
|
not_null<Memento*> memento) {
|
||||||
setGeometry(geometry);
|
setGeometry(geometry);
|
||||||
Ui::SendPendingMoveResizeEvents(this);
|
Ui::SendPendingMoveResizeEvents(this);
|
||||||
// restoreState(memento);
|
restoreState(memento);
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<bool> Widget::desiredShadowVisibility() const {
|
rpl::producer<bool> Widget::desiredShadowVisibility() const {
|
||||||
|
@ -88,10 +96,20 @@ void Widget::showFinished() {
|
||||||
|
|
||||||
std::shared_ptr<ContentMemento> Widget::doCreateMemento() {
|
std::shared_ptr<ContentMemento> Widget::doCreateMemento() {
|
||||||
auto result = std::make_shared<Memento>(controller());
|
auto result = std::make_shared<Memento>(controller());
|
||||||
// saveState(result.get());
|
saveState(result.get());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Widget::saveState(not_null<Memento*> memento) {
|
||||||
|
memento->setScrollTop(scrollTopSave());
|
||||||
|
_inner->saveState(memento);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::restoreState(not_null<Memento*> memento) {
|
||||||
|
_inner->restoreState(memento);
|
||||||
|
scrollTopRestore(memento->scrollTop());
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer) {
|
std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer) {
|
||||||
return std::make_shared<Info::Memento>(
|
return std::make_shared<Info::Memento>(
|
||||||
std::vector<std::shared_ptr<ContentMemento>>(
|
std::vector<std::shared_ptr<ContentMemento>>(
|
||||||
|
|
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "data/data_boosts.h"
|
||||||
#include "info/info_content_widget.h"
|
#include "info/info_content_widget.h"
|
||||||
|
|
||||||
namespace Info::Boosts {
|
namespace Info::Boosts {
|
||||||
|
@ -26,6 +27,14 @@ public:
|
||||||
|
|
||||||
Section section() const override;
|
Section section() const override;
|
||||||
|
|
||||||
|
using SavedState = Data::BoostStatus;
|
||||||
|
|
||||||
|
void setState(SavedState states);
|
||||||
|
[[nodiscard]] SavedState state();
|
||||||
|
|
||||||
|
private:
|
||||||
|
SavedState _state;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Widget final : public ContentWidget {
|
class Widget final : public ContentWidget {
|
||||||
|
|
Loading…
Add table
Reference in a new issue